2016-04-27 13 views
0

システムで使用可能なすべてのドライブを反復処理するスクリプトを作成し、そのドライブで何かを行う必要があります。コードは、PSバージョン2.0〜4.0をサポートする必要があります。問題は、ドライブのリストを取得すると、以下に示すように、PSバージョン2.0と4.0の間で異なるタイプが戻ってくるということです。ここパワーシェルのバージョン間で同じクエリの異なるデータ型

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

はPS版で出力された2.0

名前値

---- ----- CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleバージョン{1.0、2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
タイプこれは私がPSバージョン3.0以上に得るものであるSystem.Management.Automation.PSCustomObject

あります。

名前値
---- ----- PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 6.3.9600.16394
PSCompatibleVersions {1.0、2.0 、3.0、4.0}
PSRemotingProtocolVersion 2.2
タイプはのSystem.Object []

どのようにしても、一つだけがありますので[]ので、私のコードは一貫

答えて

2

ことができることそれは単一PSCustomObject -objectを返すオブジェクトを返すために、PSバージョン2.0を作ることができますWin7(PS 2.0)コンピュータの条件に一致する論理ディスク。あなたのWin8.1コンピュータ(PS 4.0)には、複数のディスクがあります。これは、配列を取得する理由です。

配列演算子@()を使用して結果を配列にラップすると、常に配列が得られます(項目がゼロの場合でも)。

$drives = @(Get-WmiObject -class Win32_LogicalDisk -Filter "DriveType=3" | select Name) 
関連する問題