2017-01-11 14 views
2

powershellコマンドの出力を配列に取得しようとしていますが、動作していないようです。実際には、行と列のインデックスを使って出力を扱いたい。例: 出力とpowershellコマンドの出力を配列に取得する方法

$a=Get-Service 

(一部)

Status Name    DisplayName       
------ ----    -----------       
Stopped AeLookupSvc  Application Experience     
Stopped ALG    Application Layer Gateway Service  
Stopped AppIDSvc   Application Identity     
Running Appinfo   Application Information    
Stopped AppMgmt   Application Management  

Iは、第二のラインのためのDisplayName、例えば対応します

$a[2][2] 

そして、それはその後

Application Layer Gateway Service 

与えるべきである。しかし、これは動作するようには思えません。

誰でも手伝いできますか?

答えて

4

このタイプの質問は、あなたがおそらくUnixのバックグラウンドから来ていると思うし、指標や列インデックスを扱うことに慣れているということです。

基本的に、PowerShellはオブジェクト指向のスクリプト言語です。あなたは単にあなたがここで尋ねていることをする必要はありません。

たとえば、結果をキャプチャしてオブジェクトの1つのプロパティを取得する場合は、ここでその方法を実行します。

まず、出力をキャプチャします。

$a=Get-Service 

ここで、特定のエンティティの特定のプロパティが必要です。それを取得するには、目的のオブジェクトにインデックスを付けます。

>$a[2] 
Status Name    DisplayName       
------ ----    -----------       
Stopped AJRouter   AllJoyn Router Service     

.DisplayNameを選択するには、あなたがしなければならないすべてはあなたの前のコマンドの最後にそれを追加しています。

> $a[2].DisplayName 
AllJoyn Router Service 

複数の値を選択する場合は、代わりにこの方法を使用できます。

#Select multiple values from one entity 
$a[2] | select DisplayName, Status 

>DisplayName      Status 
-----------      ------ 
Application Layer Gateway Service Stopped 

#Select multiple values from each in the array 
$a | select DisplayName, Status 

>DisplayName            Status 
-----------            ------ 
Adobe Acrobat Update Service        Running 
AllJoyn Router Service         Stopped 
Application Layer Gateway Service      Stopped 
Application Identity          Stopped 
+0

ありがとうございました! –

3

コンソールに表示されるGet-Serviceの出力は、アレイのように見える場合があります(コンソールに送信されるときに表としてフォーマットされるため)。実際は 'System.ServiceProcess.ServiceController'オブジェクトです。あなたの例のための

ではなく、行と列の名称を使用して、あなたはそれを取得するために、プロパティの名前を使用する必要があり、そう:

$a[2].DisplayNameはからのマッピングなしApplication Layer Gateway Service

6

これが可能ではないが返されます。プロパティ名を配列インデックスに変換します。出力に表示されるのは、(XMLファイルで定義された)プロパティの部分的なリストです。したがって、それらを配列インデックスに変換する簡単な方法はありません。

ただし、私もあなたのが必要です。ここにが必要です。期待どおり、$a[1]で2番目のサービスを取得することができます。そしてDisplayNameプロパティの値を$a[1].DisplayNameにすることができます。 PowerShellはオブジェクト全体を使用します。単にデータを取得するために、テキスト解析や暗黙の列インデックスに戻す必要はありません。簡単な方法があります。

関連する問題