21

コマンドレットを実行して、結果の値を変数に格納したいと思います。

例えば

C:\PS>Get-WSManInstance -enumerate wmicimv2/win32_process | select Priority

優先順位をヘッダー付きで一覧表示します。たとえば、最初のもの:

Priority
--------
8

それらを変数に格納するにはどうすればよいですか?私はもう試した:

$var=Get-WSManInstance -enumerate wmicimv2/win32_process | select Priority

今、変数は:@{Priority=8}であり、私はそれをにしたかった8

質問2:

1つのコマンドレットで2つの変数を保存できますか?つまり、パイプラインの後に保存します。

C:\PS>Get-WSManInstance -enumerate wmicimv2/win32_process | select Priority, ProcessID

私はこれを避けたい:

$prio=Get-WSManInstance -enumerate wmicimv2/win32_process | select Priority
$pid=Get-WSManInstance -enumerate wmicimv2/win32_process | select ProcessID
4

2 に答える 2

34

-ExpandPropertyのフラグを使用するSelect-Object

$var=Get-WSManInstance -enumerate wmicimv2/win32_process | select -expand Priority

他の質問に答えるために更新してください:

プロパティにアクセスすることもできます。

$var=(Get-WSManInstance -enumerate wmicimv2/win32_process).Priority

したがって、これらの複数を変数に入れるには、次のようにします。

$var=Get-WSManInstance -enumerate wmicimv2/win32_process
   $prio = $var.Priority
   $pid = $var.ProcessID
于 2012-04-09T12:44:32.087 に答える
4

Priorityパイプラインから返されたオブジェクトのプロパティにアクセスするだけです。

$var = (Get-WSManInstance -enumerate wmicimv2/win32_process).Priority

Get-WSManInstance(これは、複数のオブジェクトを返す場合は機能しません。2

2番目の質問:2つのプロパティを取得するには、いくつかのオプションがあります。おそらく最も簡単なのは、2つの別々のプロパティを持つオブジェクトを含む1つの変数*を持つことです。

$var = (Get-WSManInstance -enumerate wmicimv2/win32_process | select -first 1 Priority, ProcessID)

次に、1つのプロセスのみを想定して使用します。

$var.Priority

$var.ProcessID

複数のプロセス$varがある場合は、インデックスを作成できる配列になるため、最初のプロセスのプロパティを取得するには(配列リテラル構文を使用して、@(...)常にコレクション1になります)。

$var = @(Get-WSManInstance -enumerate wmicimv2/win32_process | select -first 1 Priority, ProcessID)

次に使用します:

$var[0].Priority
$var[0].ProcessID

1 PowerShellはコマンドラインには役立ちますが、スクリプトではあまり役に立ちません。パイプラインの結果を変数に割り当てるときに、追加のロジックがあります。オブジェクトが返されない場合は設定$nullし、オブジェクトが返される場合はそのオブジェクトを割り当てます。それ以外の場合は配列です。割り当てられています。配列を強制すると、0個、1個、またはそれ以上の(それぞれ)要素を持つ配列が返されます。

2 PowerShell V3でのこの変更(リリース候補での執筆時点)では、オブジェクトの配列でメンバープロパティを使用すると、それらのプロパティの値の配列が返されます。

于 2012-04-09T13:41:02.930 に答える