2016-04-27 6 views
0

Ich muss Skript schreiben, um alle Laufwerke im System durchlaufen und dann etwas mit diesen Laufwerken zu tun. Der Code muss PS-Versionen 2.0 - 4.0 unterstützen. Problem ist, dass, wenn ich die Liste der Laufwerke abrufe, es mit verschiedenen Typen zwischen PS Version 2.0 und 4.0 kommt, wie unten gezeigt.Verschiedene Datentypen für die gleiche Abfrage zwischen Power Shell-Versionen

$PSVersionTable 
$drives = Get-WmiObject -class Win32_LogicalDisk -Filter "DriveType=3" | select Name 
'Type = ' + $drives.GetType().FullName 
Foreach($drive in $drives) 
{ 
    #some logic 
} 

Hier wird ausgegeben, in PS-Version 2,0

Name Wert

---- ----- CLRVersion 2.0.50727.5485
Build 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSKompatibel Versionen {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
Typ ist System.Management.Automation.PSCustomObject

Dies ist, was ich in PS-Version 3.0 und höher erhalten.

Name Wert
---- ----- PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
Build 6.3.9600.16394
PSCompatibleVersions {1.0, 2.0 , 3,0, 4,0}
PSRemotingProtocolVersion 2.2
Typ ist System.Object []

Wie kann ich PS-Version 2.0 mache auch ein Objekt [] so zurück, dass mein Code konsistent sein könnte

Antwort

2

Es gibt ein einzelnes PSCustomObject -object weil es nur eine ist logischer Datenträger, der Ihren Kriterien auf Ihrem Win7-Computer (PS 2.0) entspricht. Auf Ihrem Win8.1-Computer (PS 4.0) haben Sie mehrere Festplatten, die übereinstimmen, weshalb Sie ein Array erhalten.

Sie können jedes Ergebnis mit dem Array-Operator @() in ein Array einschließen, um sicherzustellen, dass Sie immer ein Array erhalten (sogar mit null Elementen).

$drives = @(Get-WmiObject -class Win32_LogicalDisk -Filter "DriveType=3" | select Name)