我需要编写一个脚本,使用 powershell 将 .net 4 远程安装到一组 Server 2008 R2 机器上。我的脚本基于http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/3045eb24-7739-4695-ae94-5aa7052119fd/。
enter-pssession -computername localhost
$arglist = "/q /norestart /log C:\Users\tempuser\Desktop\dotnetfx4"
$filepath = "C:\Users\tempuser\Desktop\dotNetFx40_Full_setup.exe"
Start-Process -FilePath $filepath -ArgumentList $arglist -Wait -PassThru
运行该命令后,我会收到以下日志错误(在本地运行相同的行将会安装.net 而不会出现错误):
Action: Downloading Item
Failed to CreateJob : hr= 0x80200014
Action: Performing actions on all Items
Action: Performing Action on Exe at C:\Users\tempuser\Desktop\dotnetfx4\SetupUtility.exe
Exe (C:\Users\tempuser\Desktop\dotnetfx4\SetupUtility.exe) succeeded.
Exe Log File: dd_SetupUtility.txt
Action complete
Action: ServiceControl - Stop clr_optimization_v2.0.50727_32
ServiceControl operation succeeded!
Action complete
Action: ServiceControl - Stop clr_optimization_v2.0.50727_64
ServiceControl operation succeeded!
Action complete
Action: Performing Action on Exe at C:\Users\tempuser\AppData\Local\Temp\Microsoft .NET Framework 4 Setup_4.0.30319\Windows6.1-KB958488-v6001-x64.msu
Exe (C:\Users\tempuser\AppData\Local\Temp\Microsoft .NET Framework 4 Setup_4.0.30319\Windows6.1-KB958488-v6001-x64.msu) failed with 0x5 - Access is denied. .
PerformOperation on exe returned exit code 5 (translates to HRESULT = 0x5)
Action complete
OnFailureBehavior for this item is to Rollback.
Action: Performing actions on all Items
Action complete
Action complete
Action: Downloading http://go.microsoft.com/fwlink/?LinkId=164184&clcid=0x409 using WinHttp
WinHttpDetectAutoProxyConfigUrl failed with error: 12180
Unable to retrieve Proxy information although WinHttpGetIEProxyConfigForCurrentUser called succeeded
Action complete
C:\Users\tempuser\AppData\Local\Temp\Microsoft .NET Framework 4 Setup_4.0.30319\TMPF279.tmp.exe: Verifying signature for netfx_Core.mzz
C:\Users\tempuser\AppData\Local\Temp\Microsoft .NET Framework 4 Setup_4.0.30319\TMPF279.tmp.exe Signature verified successfully for netfx_Core.mzz
Action complete
Decompression completed with code: 16389
Decompression of payload failed: C:\Users\tempuser\AppData\Local\Temp\Microsoft .NET Framework 4 Setup_4.0.30319\netfx_Core.mzz
Action complete
Final Result: Installation failed with error code: (0x80074005) (Elapsed time: 0 00:00:28).
是否存在某些安全设置或者我遗漏了其他什么?
答案1
我弄清楚了如何使用 Opalis 使其工作。有一个选项可以“以交互方式”运行该进程,而不是在后台运行。它仍然远程运行,因此我可以针对多台机器运行它。这就是我的诀窍。以下是 Opalis 如何定义不同的执行模式:
交互式 - 选择此选项可在运行命令或程序的计算机上显示用户界面。用户界面(如果可用)将显示在由“高级”选项卡上的“运行身份”框(用户名、密码)中指定的用户凭据定义的用户会话中。
后台,正常优先级 - 选择此选项可在后台运行命令或程序,并将进程优先级设置为正常。在此模式下,不会显示任何用户界面。
后台,低优先级 - 选择此选项可在后台运行命令或程序,并将进程优先级设置为低。在此模式下,不会显示任何用户界面。某些程序在设置为低优先级时可能无法正常运行。如果是这种情况,请使用交互或后台,正常优先级设置。
答案2
我找到了一种使用计划任务解决此问题的方法。.net 4 安装程序可以以当前管理员用户身份运行计划任务,但无法通过 powershell 直接运行。
通过 psremoting 会话创建、运行和删除所述任务可以正常工作。
schtasks /create /tn net4install /sc once /st 12:34 /sd 01/02/2003 /f /np /RL 最高 /tr M:\SharedDriveLocation\dotNetFx40_Full_setup.exe /q /norestart
schtasks /运行/tn net4install /i
schtasks /delete /tn installdotnet4 /f
虽然丑陋,但确实有效。如果有人找到更优雅的方法来解决这个问题,我洗耳恭听 =)