【发布时间】:2018-03-10 14:39:18
【问题描述】:
我一直在尝试设置一个 Powershell 模块,该模块将使用 Invoke-Command 在服务器上远程调用 Windows/Microsoft 更新,然后处理更新,并将所有内容发送回调用服务器,以便它可以发送电子邮件报告。
当我尝试调用下载程序时出现问题:Powershell 似乎正在请求远程计算机上的提升权限。
这是我尝试运行和失败的 sn-p:
Invoke-Command -ComputerName $Server -Credential $Credentials -ScriptBlock {
$UpdateSession = New-Object -ComObject "Microsoft.Update.Session"
Write-Progress -Activity "Updating" -Status "Checking for new updates"
$Criteria = "IsInstalled=0 and Type='Software'"
$Updates = $UpdateSession.CreateUpdateSearcher().Search($Criteria).updates
$Downloader = $UpdateSession.CreateUpdateDownloader()
$Downloader.Updates = $Updates
}
我知道问题不在于远程处理,因为前 4 个命令可以正常工作。
$Credentials 变量指向预定义的凭据,即远程服务器上的本地管理员。
当脚本到达第 5 行 $Downloader = $UpdateSession.CreateUpdateDownloader() 时,我从 Powershell 收到此错误:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
+ CategoryInfo : OperationStopped: (:) [], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException
+ PSComputerName : SERVER.sidlee.inc
究竟是什么原因造成的?
提前感谢您的帮助!
【问题讨论】:
-
如果我没记错的话,大多数 Windows Update 和 Microsoft Installer 方法都需要本地和交互式会话。一种解决方法是设置一个任务计划程序任务以立即运行。
-
如果是这样,那将非常糟糕,因为这基本上是我最初所做的。我有一个运行所有内容的大型脚本(触发 Windows 更新、生成报告、通过另一台服务器通过电子邮件发送它们等),但我希望通过 Powershell 模块从单个服务器运行所有内容。
标签: powershell powershell-remoting invoke-command windows-update