Wyciągam tu włosy, ponieważ po prostu nie mogę tego zmusić do pracy i nie mogę wymyślić, jak google to rozwiązać. Używam Powershell 2.0. Oto mój skrypt:Powershell's Invoke-Command nie przyjmie zmiennej dla parametru -ComputerName?
$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
}
Ostatnia komenda daje błąd:
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.
Ale kiedy skopiować dane wyjściowe polecenia Write-Output do powłoki i uruchom, że to działa dobrze. Jak mogę rzucić zmienną łańcuchową na coś, co zaakceptuje Invoke-Command? Z góry dziękuję!
To się udało, dzięki! Nie myślałem, że po prostu uruchomię na to wszystko. To skrót, którego nie widziałem. Ale unikałem deklarowania tablicy, ponieważ nie sądziłem, że Invoke-Command -KomputerName ją bierze - zamiast tego pobiera listę nazw komputerów oddzielonych przecinkami, bez spacji. Czy się mylę? – erictheavg
Odpowiadając na siebie: tak to wygląda. Po prostu przeczytałem pomoc dotyczącą tego polecenia i stwierdziłem, że oczekuje ciągu znaków []. Wyszedłem z przykładów sam i zrobiłem złe założenie. – erictheavg