Назад | Перейти на главную страницу

Удаленное взаимодействие Powershell: как запустить команду на нескольких машинах с отдельными параметрами?

Например:

Допустим, у меня есть 10 серверов (Server 1-Server10) и список csv, где у меня есть имена серверов и индивидуальное имя папки / путь для каждого сервера.

Как мне создать эти папки на каждой машине?

а) Открыть все 10 подключений и запустить команду на основе csv? б) шагая 1 на 1

Укажите, пожалуйста, наиболее эффективный способ

Это очень наивно, поскольку здесь нет проверки ошибок и т. Д., Но он делает то, что вы хотите. Я предполагаю, что вы используете 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-command не может читать ваши локальные переменные. Вы устанавливаете для него параметр (называемый $path), а затем поместите локальную переменную $row.path в список аргументов - это позволяет команде mkdir на удаленных серверах использовать $path переменная и видит, что было передано из файла CSV.

если вы делаете что-то, основанное на wmi, вы можете использовать асинхронные вызовы!

мой ответ был совершенно неверным, в любом случае, если у вас нет psv2 или вы не реализуете winrm.

$ csvdata = импорт-csv. \ test.csv

foreach ($ row в $ csvdata) {

md  \\$row.server\c$\$row.path 

}

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