我正在尝试在一大组机器上远程安装 .NET framework4.6.1。我正在使用 powershell 来远程编写此脚本。问题是,无论出于什么原因,.exe 似乎都不想被远程调用。我假设这是因为用于升级的 .exe 启动了一个 UI 会话。但是,即使传递了应该允许远程安装的“/q”参数,它仍然不起作用。我没有收到任何错误,当 RDP 进入有问题的机器时,它似乎没有升级或使用任何 CPU 进行升级。
我的脚本:
Write-Host "Executing 'Upgrade dotnet 4.6' for $server"
Invoke-Command -ComputerName $servers -Credential $credentials -ScriptBlock {
$Url = 'https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA40/NDP461-KB3102436-x86-x64-AllOS-ENU.exe'
$Exe = "net461.exe"
$Dest = "C:\\" + $Exe
$Params = " /q"
$client = new-object System.Net.WebClient
$client.DownloadFile($Url,$Dest)
Invoke-Expression ("cmd.exe /C " + $Dest + $Params)
}
我也尝试过使用 chocolatey,但它也不起作用,我认为原因是一样的。在本地运行 chocolatey 是可行的。
答案1
MS 的可执行文件似乎只是一个自解压档案(我能够使用 7-Zip 打开它)。您是否尝试过将 .exe 解压到某个位置,然后尝试打开其中包含的/q
开关Setup.exe
?
答案2
问题是 powershell 的默认远程 shell 内存限制为 150MB。安装 .NET 4.6.1 会将自解压 exe 的内容加载到内存中,其中一些项目大于 150 MB。此链接提供了增加内存限制的正确方法。 http://blogs.technet.com/b/heyscriptingguy/archive/2013/07/30/learn-how-to-configure-powershell-memory.aspx