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

标签 .net powershell azure

我正在 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 无法远程调用:

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
    }
  }

关于.net - 如何以编程方式在 Azure VM 上远程安装 .NET 4 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197954/

相关文章:

c# - C#中如何清除 ListView 中的数据

c# - 在 .Net 3.5 上使用 ICSharpCode.AvalonEdit?

Powershell 仅当基于列 1 的组的列 2 -cge 列 3 时才显示行

azure - 循环遍历文件夹目录中的每个文件并检查日期 Azure Data Factory V2 -错误代码

java - 在 Azure Web 应用上运行 Solr

c# - 为什么 .NET System.IO.File 使用 Create/Open 而不是构造函数?

powershell - 如何指示 PowerShell 对 XmlSchemaSet 等 .NET 对象进行垃圾收集?

powershell - 我应该在目录字符串中使用/还是\?

Azure表存储触发移动通知

c# - 添加到字典中的字典