将托管注册表文件推送至多台服务器

将托管注册表文件推送至多台服务器

我有许多服务器需要推动此补丁。通常我会加载 WSUS 或同等版本。但是我想在 DSC 环境中运行它。所以我正在测试脚本以用于此工作流程。

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

  1. $HostedRegFile似乎是 UNC 路径,但路径中有冒号。您需要更改D:D$

  2. 失败regedit是因为它在启动时提示 UAC,但您没有使用 GUI 来确认和允许这一点。要允许 UAC 启动,请添加-verb runasStart-Process调用中。

  3. 如果最终目标是通过 DSC 运行,则需要创建一些域中的计算机帐户可以访问的普通共享。域计算机无权访问 D$ 和 C$ 等管理共享。

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

  5. 也可以通过 GPO 推送注册表项。

答案2

这就是我最终得到的结果。

当然,在此之前必须先处理好 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"
        }
    }

相关内容