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 

}

Я делаю это изо всех сил, поэтому, пожалуйста, сначала проверьте это!

Другие вопросы по тегам