我有一个可执行文件列表(.msi
和.exe
),我必须使用PowerShell
在某些远程服务器(在同一个域中)静默安装这些文件脚本。首先,我将所有程序从本地服务器复制到远程服务器。接下来,我尝试将所有这些程序逐个安装到远程服务器。为此,我使用下面的代码:
Copy-Item -Path "C:\path\to\softwares\*" -Destination "C:\path\to\destination" # this is copying all softwares on destination path
$destItem = Get-ChildItem -Path "C:\path\to\destination"
foreach($software in $destItem)
{
$setup = Invoke-Command -ComputerName <computer> -ScriptBlock {$temp=Start-Process "C:\path\to\$software" -ArgumentList "/s" -Wait -PassThrough;$Temp}
}
问题是:当我运行此脚本时,我收到以下错误:
[172.xx.xx.xxx]连接到远程服务器172.xx.xx.xxx失败,并显示以下错误消息:WinRM客户端 无法处理请求。在以下条件下,默认验证可与IP地址一起使用: 传输是HTTPS或目标位于TrustedHosts列表中,并提供显式凭据。使用 winrm.cmd配置TrustedHosts。请注意,TrustedHosts列表中的计算机可能未经过身份验证。更多 有关如何设置TrustedHosts的信息运行以下命令:winrm help config。有关更多信息,请参阅 about_Remote_Troubleshooting帮助主题。
+ CategoryInfo:OpenError:(172.xx.xx.xxx:String)[],PSRemotingTransportException
+ FullyQualifiedErrorId:CannotUseIPAddress,PSSessionStateBroken
我在本地计算机上运行了命令winrm quickconfig
并得到了这个结果:
WinRM service is already running on this machine.
WinRM is already set up for remote management on this computer.
并从远程服务器获得此输出:
WinRm already is set up to recieve requests on this machine.
WinRm already is set up for remote management on this machine.
问题是:如何解决此问题并在远程服务器上安装可执行文件?
答案 0 :(得分:1)
您可能会尝试将远程计算机放入可信主机列表中:
查看TrustedHosts列表
get-item wsman:\localhost\Client\TrustedHosts
将所有计算机(小心!)添加到TrustedHosts列表中
set-item wsman:\localhost\Client\TrustedHosts -value *
将具有特定IP地址的计算机添加到可信主机列表中
set-item wsman:\localhost\Client\TrustedHosts -value 192.168.0.10
答案 1 :(得分:1)
查看Matt Wrock关于在Windows上远程安装软件的文章:
在他的Boxstarter库中,他通过使用Invoke-FromTask命令将命令包装在计划任务中来解决这个问题:
Invoke-FromTask @"
Start-Process "$env:temp\net45.exe" -verb runas -wait `
-argumentList "/quiet /norestart /log $env:temp\net45.log"
"@