我正在 Azure 上制作 2008 R2 版本的原型(prototype)。我有工作代码来部署 VM、检索 x509 证书并在已部署的 VM 上建立对远程 Powershell 的 WinRM 访问。
我需要为我们的软件安装一些先决条件。其中之一是 .NET 4。当我启动此命令时:
Invoke-Command -ConnectionUri $azUri -Credential $vmCreds -ScriptBlock {start-process -filepath "c:\installs\dotNetFx40_Full_x86_x64.exe"-argumentlist "/q/norestart"-wait}
我在安装事件日志中收到此错误:
由于错误 2147942405“访问被拒绝”,无法安装 Windows 更新。 (命令行:“wusa.exe”C:\1112ac1e217ef544ae09\Windows6.1-KB958488-v6001-x64.msu“/quiet/norestart”)
我使用的信用是使用虚拟机本身创建的管理帐户构建的。该文件是通过 Powershell 使用 FTP 获取的(我使用 .net 方法和一些谷歌搜索拼凑了一个 FTP 功能)。
我正在处理的项目要求我使用 Microsoft 提供的干净的默认图像之一,因此我无法提前自定义模板。最终这些操作也将由配置管理工具(例如 Chef 或 Puppet)执行,因此我需要能够以配置管理方式执行此操作。
我已经尝试了此命令的各种排列,这是我能够使其正常工作的最接近的排列。我禁用了 UAC 并重新启 Action 为实验,这并没有改变行为。到目前为止,我的搜索发现其他人也遇到这个问题,但没有适合我的情况的适当解决方案。
最佳答案
我也遇到过这个问题,我很确定问题是 wusa 无法远程调用:
该问题源于以下事实:.NET 4.0 安装程序有几个要应用的 msu 更新。由于 wusa 无法从远程命令运行,因此整个 shebang 失败。
编辑:我做了一些挖掘,在 ParamaterInfo.xml 中发现了一个未记录的标志 - SkipMSUInstall 标志将绕过 msu 安装,否定 wusa 调用,从而成功安装。我刚刚在几百台服务器上运行过这个,效果很好。我们的安全策略不允许使用 CredSSP,因此我在每台服务器上本地复制安装文件,然后使用 Invoke-Command 和 Start-Process 来运行安装。
修改后的 powershell 代码片段如下:
$servers = get-Content c:\temp\serverlist.txt
foreach ($server in $servers) {
$session = New-PSSession -ComputerName $server -Credential $credential
Invoke-Command -session $session -asJob -scriptBlock {
Start-Process "C:\Temp\dotNetFx40_Full_x86_x64\setup.exe" -ArgumentList "/passive /norestart /SkipMSUInstall" -Wait -Passthru
}
}
关于.net - 如何以编程方式在 Azure VM 上远程安装 .NET 4 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197954/