WinRM already is set up to receive requests on this machine.
WinRM already is set up for remote management on this machine.
exclua este winrm quickconfig
do seu script. ele quer configurar seu serviço WinRM mas já está configurado, então não há necessidade disso. O WinRM permite que você acesse o computador remoto através do seu serviço, por exemplo, é necessário invoke-command {}
.
Copy-item : Cannot find path 'C:\OfficeDocumentfix.reg' because it does not exist.
a razão para isso é que sua variável $newfile
usa $servers
em vez de $server
como deveria (porque está dentro do bloco foreach()
), então $servers
é $null
. essa é a causa do erro.
se o arquivo do registro que você está usando grava no HKCU :, você não precisa elevar o script, se estiver gravando no HKLM: você precisa. Somente administradores podem gravar no HKLM. A elevação é toda a parte desde o início até winrm quickconfig
.
isto deve dar-lhe o seguinte produto final (deixei a elevação lá):
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
if ($myWindowsPrincipal.IsInRole($adminRole))
{
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
$Host.UI.RawUI.BackgroundColor = "Darkred"
clear-host
}
else
{
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
$newProcess.Verb = "runas";
[System.Diagnostics.Process]::Start($newProcess);
exit
}
$servers = Get-Content c:\temp\servers.txt
$HostedRegFile = "C:\temp\CyclopsOfficeDocumentfix.reg"
foreach ($server in $servers)
{
$newfile = "\$server\c'$\Downloads\RegistryFiles\"
New-Item -ErrorAction SilentlyContinue -ItemType directory -Path \$server\C$\Downloads\RegistryFiles\
Copy-Item $HostedRegFile -Destination $newfile
Invoke-Command -ComputerName $server -ScriptBlock {
Start-Process -filepath "C:\windows\regedit.exe" -argumentlist "/s C:\Downloads\RegistryFiles\test.reg"
Write-Host -NoNewLine "Press any key to continue..."
}
}
por favor, também dê uma olhada nesta linha:
Start-Process -filepath "C:\windows\regedit.exe" -argumentlist "/s C:\Downloads\RegistryFiles\test.reg"
ainda não é dinâmico. ele sempre lerá em test.reg
ao invés do arquivo reg desejado.
em vez de start-process
você também pode simplesmente usar regedit /s $regfile /f
O PowerShell pode executar comandos em lote (mas isso é detalhe. Se funcionar assim, deixe como está).