1

Я запустил Get-PhysicalDisk внутри виртуальной машины, которая имеет 4 жестких диска. Результат был:

FriendlyName             SerialNumber CanPool OperationalStatus HealthStatus Usage         Size
------------             ------------ ------- ----------------- ------------ -----         ----
VMware, VMware Virtual S              False   OK                Healthy      Auto-Select  60 GB
VMware, VMware Virtual S              False   OK                Healthy      Auto-Select 100 GB
VMware, VMware Virtual S              False   OK                Healthy      Auto-Select 200 GB
VMware, VMware Virtual S              False   OK                Healthy      Auto-Select 400 GB

Там не было никаких SerialNumber или любого другого уникального идентификатора, который я мог видеть в результате выше.

Теперь мне нужно запустить Set-PhysicalDisk . Все примеры в Интернете используют уникальное имя FriendlyName или что-то вроде PhysicalDisk1 . Во-первых, есть 4 диска с одинаковым именем FriendlyName, поэтому я не могу его использовать. Во-вторых, я думал, что PhysicalDisk{number} - это специальное имя для указания диска по индексу, но оно, похоже, не работает.

Что я должен передать Set-PhysicalDisk , если я хочу обозначить, скажем, второй диск выше (размер = 100 ГБ)?

PS C:\Users\Administrator> Set-PhysicalDisk -FriendlyName "VMware, VMware Virtual S" -Usage Retired
Set-PhysicalDisk : Not Supported
At line:1 char:1
+ Set-PhysicalDisk -FriendlyName "VMware, VMware Virtual S" -Usage Reti ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (StorageWMI:ROOT/Microsoft/..._StorageCmdlets) [Set-PhysicalDisk], CimException
    + FullyQualifiedErrorId : StorageWMI 1,Set-PhysicalDisk

PS C:\Users\Administrator> Set-PhysicalDisk PhysicalDisk1 -Usage Retired
Set-PhysicalDisk : The requested object could not be found.
At line:1 char:1
+ Set-PhysicalDisk PhysicalDisk1 -Usage Retired
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (PS_StorageCmdlets:ROOT/Microsoft/..._StorageCmdlets) [Set-PhysicalDisk], CimException

2 ответа2

1

Вы можете назначить этот дисковый "объект" переменной. С помощью этой переменной вы можете выполнять операции над самой переменной - и все, даже не нуждаясь в FriendlyName или SerialNumber.

подробности

В моем случае у меня не было ни FriendlyName , ни SerialNumber:

FriendlyName   CanPool  OperationalStatus   HealthStatus  Usage             Size
------------   -------  -----------------   ------------  -----             ----
PhysicalDisk1  False    OK                  Healthy       Auto-Select    1.82 TB
PhysicalDisk3  False    OK                  Healthy       Auto-Select    1.82 TB
PhysicalDisk4  False    OK                  Healthy       Auto-Select    1.82 TB
PhysicalDisk0  False    OK                  Healthy       Auto-Select  111.79 GB
PhysicalDisk8  False    OK                  Healthy       Auto-Select    1.82 TB
PhysicalDisk2  False    OK                  Healthy       Auto-Select  465.76 GB
               False    Lost Communication  Warning       Retired      930.75 GB
PhysicalDisk6  False    OK                  Healthy       Auto-Select  930.75 GB
PhysicalDisk9  False    OK                  Healthy       Auto-Select  930.75 GB
PhysicalDisk7  False    OK                  Healthy       Auto-Select    1.82 TB
PhysicalDisk5  False    OK                  Healthy       Auto-Select    1.82 TB

Самая простая вещь, на которой я мог указать, это то, что OperationalStatus сказал « Lost Communication:

#Single out the disk that has lost communication
Get-PhysicalDisk | Where-Object { $_.OperationalStatus -eq 'Lost Communication' }

Оттуда я могу назначить этот диск переменной:

#Assign the missing disk to a variable
$missingDisk = Get-PhysicalDisk | Where-Object { $_.OperationalStatus -eq 'Lost Communication' }

Теперь, когда у меня есть переменный объект, я могу пометить этот диск как удаленный:

#tell the storage pool that the disk has been retired:
$missingDisk | Set-PhysicalDisk -Usage Retired

А затем, в довершение, восстановите все тома в области хранения, которые были затронуты:

# To Repair all Warning Volumes
Get-VirtualDisk | Where-Object –FilterScript {$_.HealthStatus –Eq 'Warning'} | Repair-VirtualDisk

Вы можете подтвердить, что виртуальный диск восстанавливается, увидев, что его OperationStatus - InService:

#Disks will show as `InService` to let us know that they're currently being repaired
Get-VirtualDisks

FriendlyName      ResiliencySettingName  OperationalStatus  HealthStatus  IsManualAttach   Size
------------      ---------------------  -----------------  ------------  --------------   ----
Three-way mirror  Mirror                 InService          Warning       False           10 TB
PooledParityDisk  Parity                 InService          Warning       False           15 TB

И, наконец, вы можете следить за ходом ремонта:

#Monitor the percentage of the repair
Get-StorageJob

Name          ElapsedTime  JobState  PercentComplete  IsBackgroundTask
----          -----------  --------  ---------------  ----------------
Regeneration  00:00:00     Running   40               True
Regeneration  00:00:00     New       0                True

Спасибо Мэтью Ходжкинсу. (архив)

ps человек, который считает PowerShell хорошей идеей, должен быть застрелен

1

Вы можете Set-PhysicalDisk , используя UniqueID .

Чтобы получить UniqueID ,

Get-PhysicalDisk | Select-Object SerialNumber,UniqueID

Чтобы сделать обновления на основе UniqueID ,

Set-PhysicalDisk -UniqueId "{<insert_UniqueID>}"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .