关于腾讯云windows更新

2024-03-04 11:53:53 浏览数 (1)

没有公网的机器,内网 windows update参考https://cloud.tencent.com/document/product/213/2758

代码语言:javascript复制
如果机器有公网,默认不用配啥,用系统自带的更新功能打补丁时自动连微软对公的update server

http://windows-1251783334.cos.ap-shanghai.myzijiebao.com/115.159.148.149/windows_update.vbs (原出处的内容可能更新,建议以原出处为准)

该脚本来自微软,原出处:https://learn.microsoft.com/zh-cn/windows/win32/wua_sdk/searching--downloading--and-installing-updates

主要用于实现windows自动更新功能。 在windows机器内直接执行该脚本文件即可,不需要输入任何参数

RebootToComplete以实现更新后重启机器使得更新生效

脚本执行指令如下:cscript windows_update.vbs /RebootToComplete

注意:

(1)必须确保机器可以正常连接windows更新服务器或自定义的相关更新服务器,否则无法实现更新

(2)该脚本执行结束后,机器会重启以保证补丁生效

(3)脚本执行时间取决于补丁大小及网络状况等

另外,了解下使用 WUA 脱机扫描更新

需要提醒的是,不通过winrm,直接在系统里执行cscript.exe "C:windows_update.vbs"没问题,而通过winrm执行相同命令就会卡在Downloading,报错 Microsoft VBScript 运行时错误: 没有权限

从上到下,依次是.vbs的第362行~第386行

代码语言:javascript复制
C:windows_update.vbs(366, 5) Microsoft VBScript 运行时错误: 没有权限
      CategoryInfo          : NotSpecified: (C:windows_upda...ipt 运行时错误: 没有权限:String) [], RemoteException
      FullyQualifiedErrorId : NativeCommandError
      PSComputerName        : 10.255.5.6
NotSpecified: (:) [], RemoteException

通过winrm执行脚本,前365行的功能正常回显,执行到366行报错了,在系统内部直接执行脚本则完全正常

首先需要打通WinRM,默认不支持WinRM

开启WinRM(执行后最好重启下机器)

代码语言:javascript复制
winrm quickconfig -q 2>&1> $null;winrm quickconfig -q -force 2>&1> $null;netstat -ano|findstr :5985;
reg delete "HKLMSOFTWAREPoliciesMicrosoftWindowsWinRM" /f 2>$null
stop-service mpssvc 2>&1 > $null
winrm quickconfig -q 2>&1 > $null
winrm quickconfig -q -force 2>&1 > $null
restart-service winrm 2>&1 > $null
#Set-Item WSMan:localhostclienttrustedhosts -value * -force 2>&1 > $null
winrm set winrm/config/client '@{TrustedHosts="*"}' 2>&1 > $null
#netstat -ato|findstr :5985

用powershell通过winrm执行脚本

代码语言:javascript复制
$Username = '.Administrator'

$Password = '密码'

$pass = ConvertTo-SecureString -AsPlainText $Password -Force

$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass

$iparray = @('10.255.5.6')

for($i=0;$i -lt $iparray.Length;$i  ){

"`$iparray[" $i "]=" $iparray[$i] "`n"

Invoke-Command -ComputerName $iparray[$i] -Credential $Cred -ScriptBlock { 

cscript.exe "C:windows_update.vbs";

}

}

能执行到这个层面说明脚本已经真正在执行了,只是执行到Downloading那里报错了

winrm跟系统内部cmd/powershell还是有区别的,有些命令通过winrm并不能达到系统内部cmd/powershell执行命令的效果

我调整思路,用这2行命令替换cscript.exe "C:windows_update.vbs"

代码语言:javascript复制
schtasks.exe /create /tn "update" /ru Administrator /rl highest /sc ONLOGON /tr "cscript.exe 'C:windows_update.vbs'" /f;
schtasks /Run /TN "update";

通过先创建一个计划任务再触发计划任务执行,这样就相当于在远程服务器本机执行命令,如此执行下来确实符合预期,结果正常

0 人点赞