Windows で特定のユーザー権限を持つすべてのユーザーの概要を取得するにはどうすればよいですか?

Windows で特定のユーザー権限を持つすべてのユーザーの概要を取得するにはどうすればよいですか?

管理者グループ (sid: S-1-5-32-544) のみがファイルまたはフォルダーの所有権を取得する権限 (SeTakeOwnershipPrivilege) を持っていることを確認する必要があります。

この権限を持つすべてのユーザー/グループの概要を取得するにはどうすればよいですか?

私がすでに見つけて試したのは次のコマンドです:

secedit /export /areas USER_RIGHTS /cfg output.txt

ファイル内の出力は非常に便利そうです:

[Unicode]
Unicode=yes
[特権権限]
SeNetworkLogonRight = *S-1-5-32-544
...
SeTakeOwnershipPrivilege = *S-1-5-32-544
...
[バージョン]
signature="$CHICAGO$"
Revision=1

上記の方法では、ファイルを Powershell スクリプトに読み込み、権限を検索し、その後ファイルを削除する必要があります。

外部モジュールや実行可能ファイルを使用せずに、Powershell でこれを行う他の方法はありますか?

ご提供ありがとうございます。

乾杯

デビッド

答え1

別の方法としては、LsaEnumerateAccountsWithUserRightWin32 API関数。これはC#でコーディングする必要があります(PInvoke) をスクリプト内に含めると、コード定義が非常に長くなり、乱雑になります。

私は上記を避け、代わりに実行可能ファイルをラップします。なぜ車輪の再発明をするのでしょうか?

# Check this priviledge.
$privilege = 'SeDenyInteractiveLogonRight'

# Create temp file for executable output.
$tempFile = [System.IO.Path]::GetTempFileName()

# Run the executable and wait for it to finish.
Start-Process -FilePath secedit.exe -ArgumentList "/export /areas USER_RIGHTS /cfg $tempFile" -Wait -WindowStyle Hidden

# Run through lines in the output file. 
Get-Content $tempFile -Encoding Unicode | Where-Object { 

    # Where the privilege is listed.
    $_ -match $privilege } | ForEach-Object { 

        # Seperate the key and values.    
        $_.split('=')[1].split(',') | ForEach-Object {

            # Ouput the user/SID values        
            $_.trim()
        }
}

答え2

純粋な PS ソリューションではありませんが、それでも選択肢の 1 つです。:)

MicrosoftのAccessChkユーティリティ(ここからダウンロードSecEdit の代わりに ) を使用します。

SecEdit とは異なり、AccessChk は stdout に出力するため、その出力を PS 変数に簡単にキャプチャし、その変数をチェックできます (中間ファイルは必要ありません)。

何かのようなもの:

$privToCheckFor = "SeTakeOwnershipPrivilege"
$groupPrivs = .\accesschk -a administrators *
if ((Out-String -InputObject $groupPrivs).IndexOf($privToCheckFor) -ge 0) {
    Write-Host "Has Privilege"
} else {
    Write-Host "Doesn't Have Privilege"
}

答え3

恥知らずな宣伝:カーボンモジュール(私は作成者/管理者です)。権限取得プリンシパルのすべての権限を返す関数。

答え4

解決策は次のとおりです:

(Get-WmiObject -Namespace root\rsop\computer -Class RSOP_UserPrivilegeRight | Where-Object {$_.UserRight -eq "SeTakeOwnershipPrivilege"}).AccountList

関連情報