3 votes

PowerShell Set-PhysicalDisk lorsqu'il y a des FriendlyName identiques

J'ai couru Get-PhysicalDisk à l'intérieur d'une machine virtuelle qui possède 4 disques durs. Le résultat est le suivant :

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

Il n'y avait pas de SerialNumber ou d'autre ID unique que je pouvais voir dans le résultat ci-dessus.

Maintenant, je dois exécuter Set-PhysicalDisk . Tous les exemples sur le web utilisent le nom unique FriendlyName ou quelque chose comme PhysicalDisk1 . Tout d'abord, il y a 4 disques avec les mêmes FriendlyName, donc je pense que je ne peux pas l'utiliser. Deuxièmement, je pense que PhysicalDisk{number} était un nom spécial pour désigner un disque par l'index, mais il ne semble pas fonctionner.

Que dois-je transmettre à Set-PhysicalDisk Si je veux désigner, par exemple, le deuxième disque ci-dessus (taille = 100GB) ?

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

2voto

root Points 3412

Vous pouvez Set-PhysicalDisk en utilisant le UniqueID .

Pour récupérer le UniqueID ,

Get-PhysicalDisk | Select-Object SerialNumber,UniqueID

Pour effectuer des mises à jour basées sur les UniqueID ,

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

2voto

Remi Despres-Smyth Points 1500

Vous pouvez assigner ce disque "objet" à une variable. Avec cette variable, vous pouvez effectuer les opérations sur la variable elle-même, sans même avoir besoin d'un fichier Nom de l'ami o Numéro de série

Détails

Dans mon cas, j'avais non FriendlyName ni aucun 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

La chose la plus simple que j'ai pu faire, c'est que la Statut opérationnel dit Lost Communication :

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

A partir de là, je peux assigner ce disque à une variable :

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

Maintenant que j'ai un objet variable, je peux marquer ce disque comme retiré :

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

Et pour couronner le tout, réparer tous les volumes de l'espace de stockage qui ont été affectés :

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

Vous pouvez confirmer qu'un disque virtuel est en train d'être réparé en constatant que ses Statut de l'opération es 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

Enfin, vous pouvez suivre l'évolution de la réparation :

#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

Merci à Matthew Hodgkins . ( archives )

p.s. la personne qui pense que PowerShell est une bonne idée devrait être abattue

0voto

MMacD Points 141

Lorsque je rencontre ce problème, je me tourne vers Select-Object ( https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-7 )

Ce n'est pas très élégant, mais si vous pouvez lister vos objets et que vous savez que vous ne voulez que certains d'entre eux, vous pouvez les indexer en tableau avec Select-Object.

c'est-à-dire si vous voulez opérer sur le troisième disque dur :

Get-PhysicalDisk | Select-Object -Index 2 | Set-PhysicalDisk...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X