web-dev-qa-db-ja.com

「要求されたレジストリアクセスは許可されていません。」パワーシェル

NTDSサービスにあるDCのデータベースサイズを見つけようとしています。私のスクリプトは次のとおりです。

$Computer = "abe.com"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer)     

$RegKey=$Reg.OpenSubKey("SYSTEM\\CurrentControlSet\\services\\NTDS\\Parameters" 
$NTDSPath = $Regkey.GetValue("DSA Database file") 
$NTDSREMOTEPath =  "\\$computer\$NTDSPath" -replace ":","$" 
$NTDSREMOTEPath = Get-item $NTDSREMOTEPath | Select-Object -ExpandProperty Length 

($NTDSREMOTEPath /1GB).ToString("0.000"+" GB") 

これを実行した後、エラーが発生しました:

Exception calling "OpenSubKey" with "1" argument(s): "Requested registry access is not allowed."
At C:\Users\Documents\HealthCheck\hardwareMonitoring.ps1:40 char:1
+ $RegKey= $Reg.OpenSubKey("SYSTEM\\CurrentControlSet\\services\\NTDS\\Parameters" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SecurityException

You cannot call a method on a null-valued expression.
At C:\Users\Documents\HealthCheck\hardwareMonitoring.ps1:41 char:1
+ $NTDSPath = $Regkey.GetValue("DSA Database file")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Get-item : Cannot find path '\\abc.com\' because it does not exist.
At C:\Users\Documents\HealthCheck\hardwareMonitoring.ps1:43 char:19
+ $NTDSREMOTEPath = Get-item $NTDSREMOTEPath | Select-Object -ExpandProperty Lengt ...
+                   ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (\\abc.com\:String) [Get-Item], ItemNotFoundE 
   xception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand

私のアカウントには、regedit SYSTEM\\CurrentControlSet\\services\\NTDS\\Parametersからこのパスをクエリするための十分な権限がないことがわかりました。

「abc.com」にログインすることにし、full controlおよびread権限を持つアカウントを追加しました。私が行ったことは、Parameterを右クリックしてpermissionsを選択し、アカウントを追加しました。

再びスクリプトを実行するために戻ってきました。同じエラーが発生しました!

ちなみに管理者アカウントで動作します。ドメイン管理者アカウントを使用せずにクエリを実行したい。

この場合の理由は何ですか?どうもありがとうございます!

2
Ender

ステップ1。

レジストリキーへのアクセス許可の割り当て

  1. アクセス許可を割り当てるキーをクリックします。
  2. [編集]メニューの[アクセス許可]をクリックします。
  3. 処理したいグループまたはユーザー名をクリックします。
  4. 次のアクセスレベルのいずれかをキーに割り当てます。

読み取りを行って、キーの内容の読み取りを許可しますが、変更を保存しません。フルコントロールの[許可]チェックボックスをオンにして、キーのオープン、編集、および所有権の取得を許可します。

  1. キーに特別なアクセス許可を付与するには、[詳細設定]をクリックし、特別なアクセス権を割り当てるユーザーまたはグループをダブルクリックします。 [アクセス許可]で、許可または拒否する各アクセス許可の[許可]または[拒否]チェックボックスをオンにします。

ステップ2。

Windows Server 2003ドメインコントローラ

  1. グループポリシーエディターを開く
  2. 「ローカルコンピュータポリシー」>「コンピュータの構成」>「ポリシー」>「Windows設定」>「セキュリティ設定」>「システムサービス」に移動します。
  3. 右側のペインで、リモートレジストリを見つけます。
  4. ポリシーを定義し、スタートアップの種類を自動に設定します
  5. クライアントをebootしてポリシーを適用する

Windows Server 2008以降のドメインコントローラー

  1. グループポリシーエディターを開く
  2. [コンピューターの構成]> [ポリシー]> [Windowsの設定]> [セキュリティの設定]> [システムサービス]を展開します。
  3. リモートレジストリアイテムを見つけて、サービスのスタートアップモードを自動に変更します。
  4. クライアントを再起動してポリシーを適用します

ステップ3。

ローカルグループポリシーエディターを開きますコンピューターの構成-> Windows設定->セキュリティ設定->ローカルポリシー->セキュリティオプション->ネットワークアクセスのプロパティ:リモートアクセス可能なレジストリパスとサブパス->ローカルポリシー設定タブでレジストリサブを追加します照会したいパス

例えば: System\CurrentControlSet\Control\ContentIndex

1
Ender