Например:
Допустим, у меня есть 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
}
Я делаю это из головы, поэтому сначала проверьте это!