次のスクリプトを使用して、複数のリモートシステムでtest.reg
を実行しています。
$computers = Get-Content computers.txt
Invoke-Command -ComputerName $computers -ScriptBlock {
regedit /i /s "\\SERVER\C$\RegistryFiles\test.reg"
}
スクリプトはエラーになりませんが、レジストリエントリはどのシステムにもインポートされません。
test.reg
ファイルは、コピーして手動で実行し、レジストリキーをインポートしたため、有効なレジストリファイルであることがわかりました。また、リモートコンピューターでPowerShellRemotingが有効になっていることを確認しました。
レジストリキーがインポートされない理由はありますか?
サーバー認証に関連する問題を台無しにせず、Regファイルをパラメーターとして機能に渡すだけで複雑さを軽減する最善の方法を見つけました。
$regFile = @"
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]
"MaxUserPort"=dword:00005000
"TcpTimedWaitDelay"=dword:0000001e
"@
Invoke-Command -ComputerName computerName -ScriptBlock {param($regFile) $regFile | out-file $env:temp\a.reg;
reg.exe import $env:temp\a.reg } -ArgumentList $regFile
私はいくつかのPowerShellフォーラムに投稿し、ついにこれを機能させました。
1)ループ内で$ newfile変数を移動し、2)$ newfile変数に格納されているパスの$をコメントアウトする必要がありました。
参考までに、誰かがそれを使用したい場合、最終的なスクリプトは次のようになります。
$servers = Get-Content servers.txt
$HostedRegFile = "C:\Scripts\RegistryFiles\test.reg"
foreach ($server in $servers)
{
$newfile = "\\$server\c`$\Downloads\RegistryFiles\test.reg"
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"
}
}