PowerShell Set-PhysicalDisk, wenn identische FriendlyName vorhanden sind

1

Ich lief Get-PhysicalDiskin einer virtuellen Maschine, die 4 Festplatten hat. Das Ergebnis war:

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

Es gab keine Seriennummer oder eine andere eindeutige ID, die ich im Ergebnis oben sehen konnte.

Jetzt muss ich rennen Set-PhysicalDisk. Alle Beispiele im Web verwenden den eindeutigen FriendlyName oder ähnliches PhysicalDisk1. Erstens gibt es 4 Festplatten mit den gleichen FriendlyNames, so dass ich glaube, ich kann es nicht verwenden. Zweitens dachte ich, PhysicalDisk{number}es wäre ein besonderer Name, um eine Platte nach dem Index zu kennzeichnen, aber es schien nicht zu funktionieren.

Was soll ich Set-PhysicalDisktun, wenn ich die zweite Festplatte (Größe = 100 GB) angeben möchte?

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
Verdammtes Gemüse
quelle
1
Haben Sie die UniqueIDeinzelnen Datenträger überprüft ? Versuchen Sie es Get-PhysicalDisk | Select-Object SerialNumber,UniqueID. Sie sollten in der Lage sein , Set-PhysicalDiskdurch UniqueIDstatt dem FriendlyName.
Root
Vielen Dank. Es funktionierte. Ich habe versucht, eine Möglichkeit zum Abrufen der UniqueIDs mit dem Befehl Get-PhysicalDisk zu finden, aber in der Handbuchseite wurde nur gezeigt, wie nur der Datenträger mit der entsprechenden UniqueID abgerufen werden kann. Ich denke, es braucht etwas Hintergrundwissen über PowerShell, um Select-Object herauszufinden. Für alle, die das gleiche Problem haben, habe ich die UniqueID wie-Set-PhysicalDisk -UniqueId "{7a1... lonng hex... }"
Damn Vegetables
Alle Eigenschaften, die Sie Get-Helpfür ein Cmdlet finden (z. B. Get-Help Get-PhysicalDisk -full), können mit Select-Object
root

Antworten:

1

Sie können Set-PhysicalDiskmit dem UniqueID.

Um die abzurufen UniqueID,

Get-PhysicalDisk | Select-Object SerialNumber,UniqueID

Um Updates zu machen , basierend auf dem UniqueID,

Set-PhysicalDisk -UniqueId "{<insert_UniqueID>}"
Wurzel
quelle
Seien Sie gewarnt, dass UniqueId nicht eindeutig ist.
Ian Boyd
1

Sie können dieses Datenträger- "Objekt" einer Variablen zuweisen . Mit dieser Variablen können Sie die Operationen an der Variablen selbst ausführen - und das alles, ohne einen FriendlyName oder eine Seriennummer zu benötigen

Einzelheiten

In meinem Fall hatte ich keine FriendlyName oder keine 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

Das Einfachste, worauf ich schreiben konnte, war, dass der OperationalStatus sagte Lost Communication:

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

Von dort aus kann ich diese Festplatte einer Variablen zuweisen:

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

Jetzt, da ich ein variables Objekt habe, kann ich diese Platte als zurückgezogen markieren:

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

Reparieren Sie anschließend alle betroffenen Volumes auf dem Speicherplatz, um das Ganze abzurunden:

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

Sie können bestätigen, dass eine virtuelle Festplatte repariert wird, indem Sie feststellen, dass der Betriebsstatus wie folgt lautet 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

Und schließlich können Sie den Fortschritt der Reparatur überwachen:

#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

Vielen Dank an Matthew Hodgkins . ( Archiv )

ps Die Person, die PowerShell für eine gute Idee hält, sollte erschossen werden

Ian Boyd
quelle