Я хочу использовать один хост-сервер для поддержки скрипта PowerShell с глобальными переменными, который можно интерпретировать и запускать на нескольких других устройствах в сетевом кластере.
На главном хосте I ' Мне бы хотелось иметь возможность поддерживать список переменных для IP-адресов каждого другого устройства, с которым я хочу запускать сценарии, но затем how Я хочу запустить сценарий что-то мне трудно определить. Есть несколько вещей, которые мне нужно сделать друг с другом в кластере (изменить имя компьютера, изменить часовой пояс и время, настроить сетевые адаптеры ... есть неплохой список вещей). Командлеты для выполнения функций на отдельных машинах не проблема ... У меня все это выписано и проверено. Я просто не понимаю, какие у меня варианты, где хранится этот скрипт. Предпочтительно, я думаю, что я хотел бы объявить все переменные для всего, что должно быть сделано на всех машинах, в верхней части файла на главном хосте. Затем я хотел бы разбить все, что необходимо сделать для каждого хоста в одном файле на главном хосте. Я знаю, что это будет немного грязно, но это значительно упростит обслуживание командлетов для каждого устройства, особенно когда речь идет о тестировании и внесении изменений. Пытаюсь ли я сделать здесь невозможное ??
Я узнал об использовании ENABLE-PSSESSION, а также INVOKE-COMMAND, но у каждого, похоже, есть свои проблемы. С Enable-PSSession я не могу найти способ подождать, пока скрипт подключится к каждому хосту, прежде чем он перейдет к следующей строке. Я пробовал пайпинг в Out-Null, а также добавлял строку Start-Sleep. Я не хочу вручную подключаться к каждому хосту, а затем вручную запускать список команд для каждого хоста. Кажется, что Invoke-Command не позволяет мне разбивать раздел SCRIPTBLOCK на несколько строк.
Есть ли какие-либо предложения относительно лучшего способа выполнения желания запустить скрипт с основного хоста, который выполняет все мои командлеты на нескольких машинах, без какого-либо дополнительного взаимодействия с человеком ??
Большое спасибо !!
-Andrew
РЕДАКТИРОВАТЬ: я обнаружил, что я может разбить строку ScriptBlock (вопреки тому, что я думал, вчера не сработало). Вот в основном то, что я пытаюсь выполнить sh, хотя, конечно, приведенное ниже не работает при вызове переменных из верхней части файла:
#Edit These Variables
$NewName_Server2 = "Server2"
$NewName_Server3 = "Server3"
$NewName_Server4 = "Server4"
$IPAddress_Server2 = "10.10.10.2"
$IPAddress_Server3 = "10.10.10.3"
$IPAddress_Server4 = "10.10.10.4"
$TimeZone = "US Eastern Standard Time"
#Do Not Edit These Variables
$Server2 = "192.168.1.2"
$Server3 = "192.168.1.3"
$Server4 = "192.168.1.4"
#Configure Server 2
Invoke-Command -ComputerName $Server2 -ArgumentList $local -ScriptBlock {
Rename-Computer -NewName $NewName_Server2
New-NetIPAddress -InterfaceAlias "Wired Ethernet Connection" -IPv4Address $IPAddress_Server2
Set-TimeZone -ID $TimeZone
Restart-Computer -Force
}
#Configure Server 3
Invoke-Command -ComputerName $Server3 -ArgumentList $local -ScriptBlock {
Rename-Computer -NewName $NewName_Server3
New-NetIPAddress -InterfaceAlias "Wired Ethernet Connection" -IPv4Address $IPAddress_Server3
Set-TimeZone -ID $TimeZone
Restart-Computer -Force
}
#Configure Server 4
Invoke-Command -ComputerName $Server3 -ArgumentList $local -ScriptBlock {
Rename-Computer -NewName $NewName_Server3
New-NetIPAddress -InterfaceAlias "Wired Ethernet Connection" -IPv4Address $IPAddress_Server4
Set-TimeZone -ID $TimeZone
Restart-Computer -Force
}