Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PowerShell在远程计算机上安装Windows更新_Powershell - Fatal编程技术网

如何使用PowerShell在远程计算机上安装Windows更新

如何使用PowerShell在远程计算机上安装Windows更新,powershell,Powershell,我正在尝试使用以下命令在远程计算机上安装Windows更新: $InstallSplat = @{ AcceptAll = $true SendReport = $true IgnoreReboot = if ($Reboot) { $false } else { $true } PSWUSettings = @{ SmtpServer = "my mail server" From = "myfrom <myfrom@myf

我正在尝试使用以下命令在远程计算机上安装Windows更新:

$InstallSplat = @{
    AcceptAll = $true
    SendReport = $true
    IgnoreReboot = if ($Reboot) { $false } else { $true }
    PSWUSettings = @{
        SmtpServer = "my mail server"
        From = "myfrom <myfrom@myfrom.com>"
        To = "myto <myto@myto.com>"
        Port = 25
    }
}

Invoke-Command -ComputerName $_ -Credential $cred -AsJob -ArgumentList $InstallSplat -ScriptBlock { 
    param([hashtable]$InstallSplat)
    Import-Module PSWindowsUpdate
    Install-WindowsUpdate @InstallSplat
    $Error | out-file C:\install\installwinupdate.log -Append
}
命令
Install WindowsUpdate
本身没有我可以使用的凭据参数。该命令需要在提升的PowerShell中运行,但我在计算机上启动此命令时使用提升的PowerShell

我还尝试用我的
$cred
创建一个
新的PSSession
,并运行
调用命令-Session$Session
,而不是
调用命令-ComputerName$
,结果相同

有人知道这里发生了什么吗?为什么我被拒绝访问


它与传递
$InstallSplat
没有任何关系,因为如果我根本不传递任何参数,直接在命令中写入参数及其值而不是splatting,就会发生同样的情况。

问题是,您无法从另一台远程机器下载或安装更新。当涉及到Windows更新时,您可以或不能远程执行哪些操作

解决方案是,在要从远程脚本安装更新的每台服务器上创建一个计划任务,然后启动该任务

幸运的是,当您使用该模块时,您不必自己这样做,您只需使用
调用WUJob
(以前的
调用WUInstall
)就可以了

我是这样使用它的(
$ServerData.Value
包含我的服务器列表),它就像一个符咒。如果添加
-RunNow
参数,它会在每台服务器上创建一个计划任务,并立即运行它们

invoke-WUJob -ComputerName $ServerData.Value -Script { Import-Module PSWindowsUpdate ; Install-WindowsUpdate -AcceptAll -SendReport -IgnoreReboot -PSWUSettings @{From='xy';Port=25;SmtpServer='xy';To='xy'} | Out-File C:\install\PSWindowsUpdateLog.txt -Append} -Confirm:$false -verbose -RunNow

请注意,您在
-script
中指定为脚本块的内容将粘贴到计划任务中的
-Command”“
,因此您应该在
-script
中使用

可能重复的@GuentherSchmitz确定不,它肯定不是重复的。如果我不传递任何东西来调用命令,并且根本不使用splatting(刚刚测试过),同样的事情也会发生。根据它的说法,这是一种安全特性。这篇文章中的链接显示一些人使用JEA完成了这项工作。@GuentherSchmitz,所以即使他们从WSUS服务器获得更新,我也无法在远程计算机上下载WinUpdate?这真是一个遗憾,这是我从帖子中读到的-可以在周一或今天晚些时候在我的环境中测试这个,并向您报告
invoke-WUJob -ComputerName $ServerData.Value -Script { Import-Module PSWindowsUpdate ; Install-WindowsUpdate -AcceptAll -SendReport -IgnoreReboot -PSWUSettings @{From='xy';Port=25;SmtpServer='xy';To='xy'} | Out-File C:\install\PSWindowsUpdateLog.txt -Append} -Confirm:$false -verbose -RunNow