Quando estou conectado via área de trabalho remota em uma máquina Windows Server 2012 R2 Core, posso acionar a atualização do Windows executando sconfig.cmd. No entanto, isso falha quando é chamado em uma sessão remota do PS:
Enter-PSSession -ComputerName server2
É disso que o sconfig reclama. Basicamente, diz que não consegue encontrar um valor de registro específico. Uma coisa engraçada a se notar é que a Microsoft escolheu o VBScript ao invés do PowerShell para programar esta interface CLI...
[server2]: PS C:\> sconfig
C:\>echo off
sconfig : FEHLER: Der angegebene Registrierungsschl?ssel bzw. Wert wurde nicht gefunden.
+ CategoryInfo : NotSpecified: (FEHLER: Der ang...nicht gefunden.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Microsoft (R) Windows Script Host, Version 5.8
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
System wird ?berpr?ft...
[...]
14) Server herunterfahren
15) Zur Befehlszeile wechseln
C:\Windows\System32\de-DE\sconfig.vbs(326, 1) Laufzeitfehler in Microsoft VBScript: Eingabe hinter Dateiende.
Como devo/posso iniciar uma atualização do Windows ao fazer login via sessão remota do PS?
Na verdade, você não pode acioná-lo diretamente por winrm/winrs.
Existe um módulo powershell bastante popular (PSWindowsUpdate) para executar atualizações do Windows a partir do Powershell e, para executar atualizações em um sistema remoto, ele realmente copia o módulo para o sistema remoto e agenda uma nova tarefa única no sistema remoto.
No arquivo invoke-WUInstall.ps1, há este comentário sobre o acionamento remoto de uma atualização.
FWIW, no Windows Server 2019, você pode usar
A matriz
$u
informa quais atualizações estão disponíveis, se estiver vazia, está feito.O booleano
$b
informa se uma reinicialização é necessária. Após a reinicialização, você deve procurar atualizações novamente.Todos saúdam o autor do último comentário. Funciona.
Obtenha os
pswidowsupdate
arquivos da web e descompacte-os. Em seguida, importe o módulo e execute este código (oinvoke-wsuinstall.ps1
arquivo tem o código de exemplo, mas removi um pouco dele e ainda funciona):