将托pipe的registry文件推送到多个服务器

我有一堆服务器,我需要推这个补丁。 通常我会加载一个WSUS或同等的。 不过我想在DSC环境下工作。 所以我正在testing这个工作stream程的脚本。

PowerShell抱怨找不到文件夹。

Copy-Item $HostedRegFile -Destination $newfile "unauthorized" 

显然我没有正确地传递凭据。 我已经尝试了所有我能想到的使用会话不使用会话..

  $servers = Get-Content "d:\Powershell\Servers.txt" $Session = New-PSSession -computername $servers -credential $MyCredential $HostedRegFile = "\\Contra2\D:\reg\Player2.reg" foreach ($server in $servers) { #$Session = New-PSSession -computername $server -credential $MyCredential $newfile = "\\$server\c$\Utils\" New-Item -ErrorAction SilentlyContinue -ItemType directory -Path \\$server\C$\Utils\ Copy-Item $HostedRegFile -Destination $newfile Invoke-Command -computername $server -ScriptBlock { Start-Process -filepath "C:\windows\regedit.exe" -argumentlist "/s C:\Utils\Player2.reg" } } 

我究竟做错了什么? 有没有更好的方法(总是有)?

  1. $HostedRegFile看起来是一个UNCpath,但是在path中有一个冒号。 您需要将D:更改为D$

  2. regedit失败是因为它在启动时提示inputUAC,但是您没有运行GUI来确认并允许。 要允许UAC启动,请将“ -verb runas添加到Start-Process调用。

  3. 如果最终目标是通过DSC运行,则需要创build一些域中计算机帐户可以访问的普通份额。 域计算机不能访问像D $和C $这样的pipe理共享。

  4. 要避免registry和UAC问题,请使用本机powershell cmdLets: Set-ItemProperty -Path HKLM:\Software\XYZ -Name Color -Value Blue -Type String -Type也可以是DWORD,QWORD,Binary,ExpandString

  5. 也可以通过GPO推送registry项。

这是我结束了。

在这个工作之前,UAC和WinRM必须要被照顾。

 $servers = Get-Content "d:\Powershell\Servers.txt" $HostedRegFile = "\\Contra2\D$\reg\Player2.reg" foreach ($server in $servers) { $Session = New-PSSession -computername $server -credential $MyCredential Copy-Item -Path "$RegFile" -Destination "C:\Utils\" -force -ToSession $session Invoke-Command -session $session -ScriptBlock { regedit /i /s C:\Utils\Player2.reg" } }