web-dev-qa-db-ja.com

PowerShellを使用してレジストリファイルをリモートで実行する

次のスクリプトを使用して、複数のリモートシステムでtest.regを実行しています。

$computers = Get-Content computers.txt

Invoke-Command -ComputerName $computers -ScriptBlock {
  regedit /i /s "\\SERVER\C$\RegistryFiles\test.reg"
}

スクリプトはエラーになりませんが、レジストリエントリはどのシステムにもインポートされません。

test.regファイルは、コピーして手動で実行し、レジストリキーをインポートしたため、有効なレジストリファイルであることがわかりました。また、リモートコンピューターでPowerShellRemotingが有効になっていることを確認しました。

レジストリキーがインポートされない理由はありますか?

6
blashmet

サーバー認証に関連する問題を台無しにせず、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
6

私はいくつかの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"

    }

    }
2
blashmet