UAC なしで複数の Win10 リモート コンピューターで regedit を実行する方法はありますか?

UAC なしで複数の Win10 リモート コンピューターで regedit を実行する方法はありますか?

Windows10 で UAC がポップアップ表示されずに、多数のリモート コンピューターで regedit を実行する方法はありますか? オン/sコマンド ラインは、Windows 10 テスト コンピューターでは機能しません (Win7 システムでは機能すると確信していましたが、クライアント コンピューターのほとんどは Win10 です)。

最終的な目標は

  1. PowerShellのexecutionPolicyを無制限に昇格するために、regファイルをHKLMにインポートします。
  2. Powershellを使用してシステム保護/復元を有効にする
  3. PowerShellを使用して復元ポイントを作成し、最後に
  4. reg ファイルをインポートして、executionPolicy を Restricted または RemoteSigned に戻します (ちなみに、これはすべてパッチ適用前のタスクとして実行されます)。

私のテスト コンピューターでは、regedit がパラメーター付きであっても Windows 10 で UAC ポップアップなしでは実行されないという例外を/s除いて、これらすべてが正常に動作します。これは、Win10 テスト コンピューターで確認しました。

bat ファイル経由で PowerShell を昇格して実行してみました:

powershell.exe -ExecutionPolicy Bypass -File .\MyScript.ps1

そして

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy unrestricted -Force' -Verb RunAs}"

しかし、これらは両方とも失敗します (つまり、アクセスが拒否され、PowerShell 実行ポリシーが昇格されません)。

reg ファイルをインポートしてから Powershell スクリプトを実行するのが、私が達成した中で最も成功に近い方法です。

私は、検索した他の解決策に基づいて、Sysinternals psexec 経由でもこれを試しました (つまり、インポートするために reg.exe を psexec で呼び出す)。しかし、それには独自の問題があります (psexec では EULA 用に reg をインポートする必要があるため、同じ問題であり、解決策ではありません)。

それを参考にして、次のコマンドも実行してみました。

C:\Windows\System32\REG.exe ADD HKLM\\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /t REG_SZ /d Unrestricted /f

...しかし、"エラー: 無効なキー名" というエラーが繰り返し表示されます。おそらく、これに取り組みすぎたため (現在 3 日間)、別の視点が必要です。誰か手伝ってもらえませんか?

答え1

複数の異なる試みを試みたため、投稿内で指摘されたいくつかの問題には実際に回答が必要です。これらのコマンドをリモートでどのように実行しているかが明確にされていません。示したコマンドはどれも、リモート コンピューターで実際に何も実行しません。すべてローカル コンピューターで実行されます。ただし、PSExec を試すことについては言及されています。

また、UAC がリモート コマンドの実行を妨げる状況も知りません。したがって、ローカル コンピューターでコマンドを実行していて、UAC プロンプトが表示されているとしか考えられません。ただし、これは実際にコマンドをリモートで実行するための準備として実行していることになります。

そこで、正しい方向に進むための基本的なリモート実行サポートをいくつか紹介したいと思います。コマンドのリモート実行にはすべて、特定のファイアウォール ポートを開く必要があります。そのため、先に進む際にはこの点に留意してください。

Powershell にはすでにリモート コマンド/スクリプト実行メカニズムが備わっています。

  • 特定のコマンドのスイッチを使用して-ComputerName、リモート システムでコマンドを実行できます。
  • Enter-PSSession <ComputerName>およびを使用して対話型リモート セッションを開始できますExit-PSSession
  • このInvoke-Command -ComputerName <ComputerName>コマンドを使用すると、任意のスクリプトまたはコマンドをリモートで実行できます。

対話型の Powershell セッションを開始してからスクリプトの実行を試行しない限り、これらのメソッドはいずれも実行ポリシーの制限の対象にはなりません。

これらのコマンドは、現在ログインしているユーザー アカウントを使用してリモート コンピューター上で実行されます。リモート マシンの管理者でない場合は、スイッチPSCredentialを使用して管理者であるオブジェクトを追加で提供する必要があります-Credential

リモートコマンドの実行

あるいは、PSExec を使用してリモート コマンドまたは実行可能ファイルを実行することもできます。権限の問題を回避するには、これらをシステム コンテキストで実行することをお勧めしますが、リモート マシンの管理者のコンテキストで実行するだけでも通常は成功します。

  • -accepteulaスイッチでEULAプロンプトをバイパスする
  • -sスイッチを使用してSYSTEMコンテキストで実行する
  • 場合によっては、-i特定のサードパーティ EXEcutable を適切に実行するには、(対話型) スイッチを利用する必要があります。

PSExec 経由で実行されるコマンドは、UAC の制限の対象ではありません。ただし、PSExec 経由で Powershell をリモートで実行し、スクリプトを実行しようとすると、スイッチも使用しない限り、実行ポリシーが邪魔になります-ExecutionPolicy Bypass。ただし、PSExec を使用して Powershell をリモートで実行し、スクリプトを実行するのは、必要なことを実行するのに非常に長い道のりです。

再度、PSExec は現在ログオンしているユーザー コンテキストを使用してリモート コンピューターへの接続を確立します。リモート コンピューターの管理者でない場合は、および-uスイッチを使用してユーザー名/パスワードを指定する必要があります-p

https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

最後に、コマンドがどこで実行されているか (ローカルまたはリモート) を常に覚えておく必要があります。また、アクセスしようとするリソースは、コマンドが実行されている場所の観点からアクセスされることを認識する必要があります。たとえば、コマンドをC:\MyBatch.batリモート コンピューターで実行する場合、C:\MyBatch.batリモート コンピューターに が存在している必要があります。

関連情報