Estou construindo um script para instalar remotamente o módulo PowerShell do PSWindowsUpdate, abrir as portas corretas do firewall e, em seguida, executar um comando para instalar as atualizações em espera. Para instalar o módulo PSWindowsUpdate, eu preciso instalar um MSI em algumas de minhas máquinas para ativar o commandlet "Install-Module".
Se eu executar o código a seguir manualmente, em uma sessão admin do PowerShell em minha máquina local, tudo funcionará bem:
$RemoteMachine = "DCSvrRDS16"
write-host "Server Name is: $RemoteMachine"
#Copy the MSI Local to the computer
Write-Host "Copying MSI locally"
Copy "\dcsvrstorage2\software\microsoft\powershell\PackageManagement_x64.msi" \$RemoteMachine\c$\
#Run the MSI remotely
Write-Host "Running MSI"
Invoke-Command -ComputerName $RemoteMachine -Credential $domaincredentials -ScriptBlock { c:\windows\system32\msiexec /i c:\PackageManagement_x64.msi /quiet /lvx* c:\PackageManagement.log } 4>&1
Mas se eu executar este script completo NA SESSÃO DO EXECT MAME JÁ ABERTA DO PowerShell, o MSI não é instalado e o arquivo de log não é criado:
Import-Module PSWindowsUpdate
$domaincredentials = Get-Credential
Function ProcessMachine($RemoteMachine) {
write-host "Server Name is: $RemoteMachine"
#Copy the MSI Local to the computer
Write-Host "Copying MSI locally"
Copy "\dcsvrstorage2\software\microsoft\powershell\PackageManagement_x64.msi" \$RemoteMachine\c$\
#Run the MSI remotely
Write-Host "Running MSI"
Invoke-Command -ComputerName $RemoteMachine -Credential $domaincredentials -ScriptBlock { c:\windows\system32\msiexec /i c:\PackageManagement_x64.msi /quiet /lvx* c:\PackageManagement.log } 4>&1
#Install the module
Invoke-Command -ComputerName $RemoteMachine -Credential $domaincredentials -ScriptBlock { Install-Module PSWindowsUpdate -Force }
#Turn on the firewall rules
Invoke-Command -ComputerName $RemoteMachine -Credential $domaincredentials -ScriptBlock { Set-NetFirewallRule -DisplayName "COM+ Network Access (DCOM-In)" -Enabled True }
Invoke-Command -ComputerName $RemoteMachine -Credential $domaincredentials -ScriptBlock { Set-NetFirewallRule -DisplayName "COM+ Remote Administration (DCOM-In)" -Enabled True }
Invoke-Command -ComputerName $RemoteMachine -Credential $domaincredentials -ScriptBlock { Remove-NetFirewallRule -DisplayName "Remote WSUS Install" }
Invoke-Command -ComputerName $RemoteMachine -Credential $domaincredentials -ScriptBlock { New-NetFirewallRule -DisplayName "Remote WSUS Install" -Profile Domain -Enabled True -Direction Inbound -Action Allow -Protocol TCP -LocalPort RPC }
#Try the update
Install-WindowsUpdate -ComputerName $RemoteMachine -AcceptAll
}
foreach ($machine in (Get-Content NeedsWSUS.txt)) {
ProcessMachine $machine
}
Isso está me deixando louco. Eu executei o ProcessMonitor na máquina remota e consigo ver o msiexec iniciar e depois parar sem acessar o MSI na raiz da unidade C: ou tentar abrir o arquivo de log para gravação.
Alguém viu algo parecido? A máquina cliente é o Windows 7 pro, o Powershell 4, e a máquina de destino é o Windows 2012 R2 e também o PowerShell 4.
Obrigado antecipadamente.