Feeds:
Записи
Комментарии

Archive for Март 2013

1) С помощью служебной программы Diskpart с интерфейсом командной строки

Назначение: Windows Xp, Windows Vista, Windows 7, Windows 8, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012

Программа Diskpart позволяет выполнять расширенный набор действий, поддерживаемых оснасткой "Управление дисками". Оснастка "Управление дисками" защищает данные на диске путем блокирования действий, которые могут привести к их повреждению. Будьте внимательны, используя программу Diskpart, поскольку она предоставляет явный контроль над разделами и томами!

Для получение статуса программного массива – воспользуемся командой "list volume":

#Вывод для русской локализации

PS >  "list volume" | diskpart 

DISKPART> 
  
  Том ###     Имя      Метка     ФС     Тип              Размер    Состояние  Сведения    
  ----------  ---  -----------  -----  ----------------  -------  ----------  --------
  Том 0         F   My RAID Set  NTFS   RAID-5            4096 МБ  Исправен
  Том 1         G   FATSTRIPE    FAT32  Чередующийся том  6144 МБ  Неисправен
  Том 2         H   My Mirror    NTFS   Зеркальный том    2048 МБ  Исправен
  Том 3         I   My Span      NTFS   Составной том        9 ГБ  Исправен
  Том 4         D                CDFS   CD-ROM               0 Б
  Том 5         C                NTFS   Раздел            2047 МБ  Исправен    Системный
  Том 6         Е                NTFS   Раздел            2063 МБ  Исправен    Загрузочный
  Том 7         J   My Primary   NTFS   Раздел            4095 МБ  Исправен
  Том 8         K   My Logical   NTFS   Раздел            2047 МБ  Исправен
  Том 9         L   My Next Log  NTFS   Раздел            2534 МБ  Исправен

#Вывод для английской локализации

DISKPART>  
  
  Volume ###  Ltr  Label        Fs     Type              Size     Status      Info    
  ----------  ---  -----------  -----  ----------------  -------  ----------  --------
  Volume 0     F   My RAID Set  NTFS   RAID-5            4096 MB  Healthy
  Volume 1     G   FATSTRIPE    FAT32  Stripe            6144 MB  Failed
  Volume 2     H   My Mirror    NTFS   Mirror            2048 MB  Healthy
  Volume 3     I   My Span      NTFS   Spanned              9 GB  Healthy
  Volume 4     D                CDFS   CD-ROM               0 B
  Volume 5     C                NTFS   Partition         2047 MB  Healthy     System
  Volume 6     E                NTFS   Partition         2063 MB  Healthy     Boot
  Volume 7     J   My Primary   NTFS   Partition         4095 MB  Healthy
  Volume 8     K   My Logical   NTFS   Partition         2047 MB  Healthy
  Volume 9     L   My Next Log  NTFS   Partition         2534 MB  Healthy

 

Более подробно — How Basic Disks and Volumes Work

 

2) Используя VDS (Virtual Disk Services) API

Назначение:  Windows Vista, Windows 7, Windows 8, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012

Microsoft Storage VDS Library — позволяет получить  статус программного массива. Но данная библиотека является недокументированной и неподдерживаемой, хотя и поставляется вместе с ОС. Так что используем на свой страх и риск.

  • Для работы с библиотекой требуются права Администратора
  • При использовании Windows 7,Windows Vista – требуется установить Remote Server Administration Tools (RSAT) и компонент из набора Share and Storage Management Tools

 

 

Перечисления:

  • VDS_VOLUME_STATUS – статус тома
    VDS_VS_UNKNOWN

    The status of the volume is unknown. This value does not apply to dynamic volumes.

    VDS_VS_ONLINE

    The volume is available.

    VDS_VS_NO_MEDIA

    The volume is removable media, such as a CD-ROM.

    VDS_VS_FAILED

    The volume is unavailable.

    VDS_VS_OFFLINE

    The volume is offline.

  • VDS_VOLUME_TYPE – тип тома
    VDS_VT_UNKNOWN

    The volume type is unknown.

    VDS_VT_SIMPLE

    The volume type is simple—it is composed of extents from exactly one disk.

    VDS_VT_SPAN

    The volume type is spanned—it is composed of extents from more than one disk.

    VDS_VT_STRIPE

    The volume type is striped, which is equivalent to RAID 0.

    VDS_VT_MIRROR

    The volume type is mirrored, which is equivalent to RAID 1.

    VDS_VT_PARITY

    The volume type is striped with parity, which accounts for RAID levels 3, 4, 5, and 6.

  • VDS_HEALTH – здоровье тома
# Загрузка сборки Microsoft Storage VDS Library  
[Reflection.Assembly]::LoadWithPartialName("Microsoft.Storage.Vds") | Out-Null 
$VdsServiceLoader = New-Object Microsoft.Storage.Vds.ServiceLoader 
$VdsService = $VdsServiceLoader.LoadService($null) 
$VdsService.WaitForServiceReady() 

# Получим коллекцию томов присутствующих в системе
$volumes = $VdsService.Providers  | foreach {$_.packs} | foreach {$_.volumes}

# Выведем свойства Буква диска,тип,статус,"здоровье" 
$volumes | Select DriveLetter,Type,Status,Health

Пример вывода:

Windows PowerShell

Copyright (C) 2012 Microsoft Corporation. All rights reserved.

PS >.\GetVolumeStatus.ps1

DriveLetter   Type Status  Health

————   —- ——  ——

          G  Mirror   Online  Healthy

          E  Span     Online  Healthy

          F  Stripe   Online  Healthy

          D  Simple   Online  Healthy 
             Simple   Online  Healthy

          C  Simple   Online  Healthy



 

3) Используя командлет Get-Volume из модуля Storage

Назначение:  Windows 8,  Windows Server 2012

В Windows 8,Windows Server 2012 появился новый WMI класс MSFT_Volume. Комадлет Get-Volume является обвязкой для этого класса. Есть один существенный минус – нет возможности определить тип тома.

Требования:

  • Minimum supported client — Windows 8 [desktop apps only]
  • Minimum supported server — Windows Server 2012 [desktop apps only]
  • Namespace — \\.\Root\Microsoft\Windows\Storage
  • MOF — Storagewmi.mof

Пример вывода:

Windows PowerShell

Copyright (C) 2012 Microsoft Corporation. All rights reserved.

PS > Get-Volume | Format-Table -AutoSize DriveLetter,HealthStatus

DriveLetter HealthStatus

———— ————

            Healthy

          C Healthy

          E Healthy

          F Healthy

            Healthy

          D Healthy



 

PS. ИМХО самое простое и эффективное средство – является DiskPart

Реклама

Read Full Post »

Нам требуется только добавлять текст в конец файла, поэтому вполне разумно будет ограничиться лишь разрешение Append Data (дозапись данных).

Для теста создадим файл и назначим требуемые права доступа:

 
#Создадим файл 
Set-Content -Path mydoc.txt -Value "Привет"

#Установим право доступа текущему пользователю Append Data & Read
$acl = Get-Acl mydoc.txt
$acl.SetAccessRuleProtection($true,$false)
$rule = New-Object Security.AccessControl.FileSystemAccessRule(
	$env:UserName,"Read,AppendData","Allow"
)
$acl.AddAccessRule($rule)
$acl | Set-Acl

#Посмотрим,что получилось
(Get-Acl mydoc.txt).Access

FileSystemRights  : AppendData, Read, Synchronize
AccessControlType : Allow
IdentityReference : PC\Kazun
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

Теперь попробуем добавить данные в конец файла:

  1. "Конец" >> mydoc.txt  — Out-File : Отказано в доступе по пути "C:\mydoc.txt".
  2. "Конец" | Out-File -Append mydoc.txt  — Out-File : Отказано в доступе по пути "C:\mydoc.txt".
  3. Add-Content mydoc.txt -Value "Конец" — Add-Content : Отказано в доступе по пути "C:\mydoc.txt".
  4. $file = [IO.File]::AppendText("mydoc.txt") — Исключение при вызове "AppendText" с "1" аргументами: "Отказано в доступе по пути "C:\mydoc.txt"."
  5. [IO.File]::AppendAllText("mydoc.txt","Конец") — Исключение при вызове "AppendAllText" с "2" аргументами: "Отказано в доступе по пути "C:\mydoc.txt"."
  6. $file = New-Object IO.FileStream("mydoc.txt", [IO.FileMode]::Append, [IO.FileAccess]::Write) — New-Object : Исключение при вызове ".ctor" с "3" аргументами: "Отказано в доступе по пути "C:\mydoc.txt"."

Все эти методы запрашивают более высокие разрешения (GENERIC_WRITE = 0x40000000) , нежели чем мы предоставили . Укажем более точные разрешения, для этого воспользуемся классом IO.FileStream.

 
#Текст, который мы добавим в конец файла
$text = "`r`nКонец"
#Преобразуем в массив байтов с кодировкой cp-1251
$TextBytes = [Text.Encoding]::GetEncoding("windows-1251").GetBytes($text)
#Укажем требуемые разрешения
$fs = New-Object IO.FileStream("mydoc.txt",[IO.FileMode]::Open,[Security.AccessControl.FileSystemRights]::AppendData,[IO.FileShare]::Read,8,[IO.FileOptions]::None)
#Добавим данные
$fs.Write($TextBytes,0,$TextBytes.Count)
#Закроем текущий поток
$fs.Close()

Код отработал без ошибок. Теперь посмотрим на наш результат:

 
PS С:\> Get-Content mydoc.txt
Привет
Конец

 

Более подробно с разрешениями NTFS,можете ознакомится:

Read Full Post »