如何在Azure VM上远程,以编程方式安装.NET 4客户端?

时间:2013-11-25 16:22:06

标签: .net powershell azure

我正在Azure上构建2008 R2的版本。我有工作代码来部署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}

我在安装事件日志中遇到此错误:

Windows update could not be installed because of error 2147942405 "Access is denied." (Command line: "wusa.exe "C:\1112ac1e217ef544ae09\Windows6.1-KB958488-v6001-x64.msu" /quiet /norestart")

我使用的信用卡是使用VM本身创建的管理帐户构建的。该文件是通过Powershell使用FTP获得的(我使用.net方法和一些谷歌搜索将FTP功能拼凑在一起)。

我正在处理的项目要求我使用Microsoft提供的一个干净的默认图像,因此我无法提前自定义模板。最终这些操作也将由配置管理工具(如Chef或Puppet)执行,因此我需要能够以配置管理方式执行此操作。

我已经尝试过这个命令的各种排列,这是我能够让它工作的最接近的。我禁用了UAC并重新启动了实验,但没有改变行为。到目前为止,我的搜索结果显示其他人遇到了这个问题,但没有适合我情况的适当解决方案。

1 个答案:

答案 0 :(得分:1)

我也遇到过这种情况,我很确定问题是无法远程调用wusa:

KB: Windows Update Standalone Installer (WUSA) returns 0x5 ERROR_ACCESS_DENIED when deploying .msu files through WinRM and Windows Remote Shell

问题源于.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
    }
  }
相关问题