1. ホーム
  2. powershell

[解決済み] "get-wmiobject win32_process -computername" でエラー "Access denied , code 0x80070005" が発生する。

2022-02-25 01:47:42

質問

3台のターミナルサーバーで、$_.commandlineプロパティに特定の単語を持つプロセスを見つけようとしています。私のドメイン管理者アカウントでは、それは問題なく動作しました。しかし、私はこのスクリプトをドメインユーザーにも使用できるようにしたいのですが、ドメインユーザーはこのスクリプトを実行するとエラーになります。

ドメインユーザーがドメイン管理者と同じようにこのスクリプトを実行できるようにするには、どうしたらよいでしょうか。よろしくお願いします。

エラーです。

Get-WmiObject : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESS DENIED))
At N:\FindWhoIsUsing\FindWhoIsUsing.ps1:7 char:18
get-wmiobject <<<<  win32_process -computername $server -EnableAllPrivileges|
CategoryInfo          : NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException
FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

Powershellのコードです。

Write-host "Who is using this profile?"
$profile = Read-host "specify profile name" 
$servers = @("server-01","server-02","server-03")
Foreach($server in $servers)
{
    Write-host $server
    get-wmiobject win32_process -computername $server -EnableAllPrivileges|
    where{$_.name -like "*Processname*" -and
    $_.CommandLine -like "*$profile*"}|
    select @{n="Server";e={$server}},@{n="User";e={$_.getowner().user}},@{n="ProcessID";e= {$_.ProcessID}},{$_.CommandLine}|fl
}
Write-host "DONE Searching!"

解決方法は?

OK ここで手順を説明します。

  1. wmimgmt.mscを起動します。
  2. WMIコントロール(ローカル)を右クリックし、プロパティを選択します。
  3. セキュリティ]タブで[セキュリティ]を選択し、[詳細設定]を選択し、[追加]を選択します。
  4. WMIへのアクセスを許可するユーザー名またはグループを選択し、[OK]をクリックします。
  5. 必要なパーミッションを付与します。最初にすべてのパーミッションを付与してアクセスを確保し、後で必要に応じてパーミッションを削除することをお勧めします。
  6. Apply to"オプションが"This namespace and subnamespaces"に設定されていることを確認します。
  7. すべてのプロンプトを保存して終了する
  8. ローカル "Distributed COM Users" グループにユーザーまたはグループを追加します。注:ここで、"Authenticated Users"および"Everyone"グループを追加することはできないので、代わりに"Domain Users"グループを使用することができます。