Здесь я создал новый PSsession для каждого сервера в списке и использовал команду invoke для таргетинга на этот сервер. Я протестировал его в своей среде, и он успешно устанавливает мое приложение exe с помощью ключа / q на моих удаленных серверах.
Этот метод, однако, не указывает, успешно ли вы выполнили команду на удаленной стороне, вам нужно будет выполнить вход на сервер или выполнить тестовый путь к ожидаемому местоположению установленных файлов для проверки. Кроме того, PSsessions остаются открытыми до тех пор, пока консоль, запускающая команду, не будет закрыта. Если PSsession заканчивается до завершения установки, установка завершится с ошибкой.
Function InstallApp {
param(
[parameter(Mandatory=$true)] [String] $ServerNameFilePath,
[parameter(Mandatory=$true)] [String] $InstallerFilePath,
[parameter(Mandatory=$true)] [String] $CommandArgument,
[parameter(Mandatory=$true)] [String] $UserName,
[parameter(Mandatory=$true)] [String] $Password
)
$secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($UserName, $secpasswd)
Get-Content $ServerNameFilePath | ForEach-Object {
$remoteSession = new-PSSession $_ -Credential $mycreds
Invoke-command -Session $remoteSession -Scriptblock {& ($args[0]) @($args[1])} -ArgumentList $InstallerFilePath,$CommandArgument
}
}
InstallApp -ServerNameFilePath $ServerNameFilePath -InstallerFilePath $InstallerFilePath -CommandArgument $CommandArgument -UserName $UserName -Password $Password