У меня есть несколько серверов, на которых мне нужно протолкнуть этот патч. Обычно я загружаю 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"
}
}
Что я делаю не так? Есть ли способ лучше (всегда есть)?
$HostedRegFile
кажется, это путь UNC, но у вас есть двоеточие в пути. Вам нужно изменить D:
к D$
В regedit
не работает, потому что он запрашивает UAC при запуске, но вы не работаете с графическим интерфейсом, чтобы подтвердить и разрешить это. Чтобы разрешить запуск UAC, добавьте -verb runas
к Start-Process
призыв.
Если конечной целью является запуск через DSC, вам нужно будет создать несколько обычных общих ресурсов, к которым учетные записи компьютеров в домене будут иметь доступ. Компьютеры домена не имеют доступа к административным ресурсам, таким как D $ и C $.
Чтобы избежать проблем с regedit и UAC, используйте собственные командлеты PowerShell: Set-ItemProperty -Path HKLM:\Software\XYZ -Name Color -Value Blue -Type String
-Тип также может быть DWORD, QWORD, Binary, ExpandString
Также можно отправлять записи реестра через GPO.
Вот что у меня получилось.
Конечно, прежде чем это заработало, нужно было позаботиться о 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"
}
}