6

私はこれを機能させることができないようで、この問題をグーグルで検索する方法を理解できないため、ここで髪を引っ張っています。Powershell2.0を実行しています。これが私のスクリプトです:

$computer_names = "server1,server2"
Write-Output "Invoke-Command -ComputerName $computer_names -ScriptBlock { 
    Get-WmiObject -Class Win32_LogicalDisk | 
    sort deviceid | 
    Format-Table -AutoSize deviceid, freespace 
}"
Invoke-Command -ComputerName $computer_names -ScriptBlock { 
    Get-WmiObject -Class Win32_LogicalDisk | 
    sort deviceid | 
    Format-Table -AutoSize deviceid, freespace 
}

最後のコマンドはエラーを出します:

Invoke-Command : One or more computer names is not valid. If you are trying to 
pass a Uri, use the -ConnectionUri parameter or pass Uri objects instead of 
strings.

しかし、Write-Outputコマンドの出力をシェルにコピーして実行すると、問題なく動作します。Invoke-Commandが受け入れるものに文字列変数をキャストするにはどうすればよいですか?前もって感謝します!

4

4 に答える 4

6

Jameyとuser983965は、宣言が間違っているという点で正しいです。ただしforeach、ここでは必須ではありません。このように配列宣言を修正すると、次のように機能します。

$computer_names = "server1","server2"
Invoke-Command -ComputerName $computer_names -ScriptBlock { 
    Get-WmiObject -Class Win32_LogicalDisk | 
    sort deviceid | 
    Format-Table -AutoSize deviceid, freespace 
}
于 2012-04-10T21:15:17.787 に答える
5

配列を誤って宣言しました。文字列の間にコンマを入れて、for-eachのようにパイプします。

$computer_names = "server1", "server2";

$computer_names | %{
   Write-Output "Invoke-Command -ComputerName $_ -ScriptBlock {

    ...snip
于 2012-04-10T21:01:47.380 に答える
1

Active Directoryからもコンピュータの配列を取得している場合は、次のようになります。

$ computers = Get-ADComputer -filter {whatever}

結果を選択/展開することを忘れないでください..次のように:

$ Computers = Get-ADComputer -filter * | Select-Object -ExpandProperty Name

それで...

Invoke-Command -ComputerName $ Computers -ScriptBlock {Do Stuff}

于 2016-01-15T21:41:18.467 に答える
0

やってみました:

$computer_names = "server1" , "server2"

foreach ($computer in $computer_names)
{
Write-Output "Invoke-Command -ComputerName $computer -ScriptBlock { 
    Get-WmiObject -Class Win32_LogicalDisk | 
    sort deviceid | 
    Format-Table -AutoSize deviceid, freespace 
}"
Invoke-Command -ComputerName $computer -ScriptBlock { 
    Get-WmiObject -Class Win32_LogicalDisk | 
    sort deviceid | 
    Format-Table -AutoSize deviceid, freespace 
}
}
于 2012-04-10T21:02:09.513 に答える