Ich ziehe meine Haare hier raus, weil ich einfach nicht scheinen kann, dass dies funktioniert, und ich kann nicht herausfinden, wie man dieses Thema googelt. Ich verwende Powershell 2.0. Hier ist mein Skript:Powershell Invoke-Command wird keine Variable für -ComputerName-Parameter aufnehmen?
$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
}
Der letzte Befehl gibt den Fehler:
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.
Aber wenn ich den Ausgang des Write-Output-Befehl an die Shell und führen Sie das Kopieren, es funktioniert gut. Wie kann ich die String-Variable in etwas umwandeln, das Invoke-Command akzeptiert? Danke im Voraus!
Das ist es, danke! Ich habe nicht gedacht, dass ich einfach nur ein Für-jedes laufen sollte. Das ist eine Abkürzung, die ich nicht gesehen habe. Aber ich vermied es, ein Array zu deklarieren, weil ich nicht dachte, dass Invoke-Command -ComputerName einen braucht - stattdessen braucht es eine Liste von Computernamen, die durch ein Komma, keine Leerzeichen getrennt sind. Liege ich falsch? – erictheavg
Reagieren auf mich selbst: Es sieht so aus. Ich lese gerade die Hilfe zu diesem Befehl und es sagt, es erwartet eine Zeichenfolge []. Ich ging allein von den Beispielen und machte eine schlechte Annahme. – erictheavg