2

他のいくつかの変数で構成される変数を作成して、含めることを試みています。たとえば、次のようになります。

$myString = "{$_.Name -like "
$myString += $computer[0]
$myString += " -Or $_.Name -like "
$myString += $computer[1]+"}"

Get-VM | Where $myString

$($myString)、$myString、${$myString} などで考えられるすべての組み合わせを試しましたが、フィルタがないかのようにすべてのコンピュータが一覧表示されます。Get-VM を ECHO すると...それは完全に問題ないように見え、カットアンドペーストすると機能します。

誰でも手がかりを得ましたか?

4

2 に答える 2

3

Where-Object フィルターはスクリプトブロックです。スクリプト ブロックは実行前にコンパイルされ、それらの変数参照はスクリプト ブロックで修正されます。それを遅らせる 1 つの方法は、ローカル変数が設定された後、使用する直前に [scriptblock]::create を使用してスクリプト ブロックを作成することです。

$myString = "$_.Name -like "
$myString += $computer[0]
$myString += " -Or $_.Name -like "
$myString += $computer[1]

$filter = [scriptblock]::create($myString)

Get-VM | Where $filter
于 2013-03-19T15:07:38.760 に答える
1

スクリプトブロックを使用する必要があります。呼び出すたびに変数が展開されます。Hyper-Vを自分でインストールしたので、例を作成しました。

PS > $computer = "DC", "SQL"

$mywherestatement = { $_.Name -like $Computer[0] -or $_.Name -like $Computer[1] }

Get-VM | Where $mywherestatement

Name State CPUUsage(%) MemoryAssigned(M) Uptime   Status
---- ----- ----------- ----------------- ------   ------
DC   Saved 0           0                 00:00:00 Operating normally
SQL  Saved 0           0                 00:00:00 Operating normally



PS > $computer = "CLIENT", "WebDev"

Get-VM | Where $mywherestatement

Name   State CPUUsage(%) MemoryAssigned(M) Uptime   Status
----   ----- ----------- ----------------- ------   ------            
CLIENT Saved 0           0                 00:00:00 Operating normally
WebDev Saved 0           0                 00:00:00 Operating normally

$computer配列に確認したい名前しか含まれていない場合-containsは、任意のサイズの配列で機能するため、代わりに使用します。元:

PS > $computer = "DC", "SQL", "CLIENT", "WebDev"

Get-VM | Where { $Computer -contains $_.Name }

Name   State CPUUsage(%) MemoryAssigned(M) Uptime   Status            
----   ----- ----------- ----------------- ------   ------            
CLIENT Saved 0           0                 00:00:00 Operating normally
DC     Saved 0           0                 00:00:00 Operating normally
SQL    Saved 0           0                 00:00:00 Operating normally
WebDev Saved 0           0                 00:00:00 Operating normally
于 2013-03-19T15:06:33.227 に答える