Powershell Remoting: Как запустить Comand на нескольких машинах с отдельными параметрами?
Например:
Допустим, у меня есть 10 серверов (Server 1-Server10) и список csv, в котором у меня есть имена серверов и индивидуальные Foldername/Path для каждого сервера.
Как бы я создал эти папки на каждой машине?
а) Откройте все 10 подключений и выполните команду, основанную на CSV? б) шагая через 1by1
Пожалуйста, укажите мне наиболее эффективный способ
3 ответа
Это очень наивно, поскольку нет проверки ошибок и т. Д., Но она делает то, что вы хотите. Я предполагаю, что вы используете Powershell 2.0 с WinRM.
Предполагая, что у вас есть настройка CSV, как это:
server,path
server1,c:\path1
server2,c:\path2
server3,c:\path3
Решение было бы так:
$csvdata = import-csv .\test.csv
foreach ($row in $csvdata) {
invoke-command $row.server { param($path) mkdir $path } -argumentlist $row.path
}
Единственная действительно странная часть здесь - как передать путь. Как правило, скрипт в команде invoke не может читать ваши локальные переменные. Вы устанавливаете параметр для него (называется $path
), а затем положить локальную переменную $row.path
в список аргументов - это позволяет команде mkdir на удаленных серверах использовать $path
переменная, и он видит, что было передано из файла CSV.
Если вы делаете что-то на основе wmi, то вы можете использовать асинхронные вызовы!
Мой ответ был совершенно неосновательным, в любом случае, если у вас нет psv2 или вы не внедрили winrm.
$ csvdata = import-csv. \ test.csv
foreach ($ row в $ csvdata) {
md \\$row.server\c$\$row.path
}
Я делаю это изо всех сил, поэтому, пожалуйста, сначала проверьте это!