如何获取 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

还有另一种方法,使用枚举帐户WithUserRightWin32 API 函数。这必须用 C# 进行编码(调用) 在您的脚本中,代码定义会非常长且混乱。

我会避免上述情况,而是包装可执行文件。为什么要重新发明轮子呢?

# 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 解决方案,但仍然是一个选择。:)

您可以使用 Microsoft 的 AccessChk 实用程序(点击下载) 而不是 SecEdit。

与 SecEdit 不同,AccessChk 输出到标准输出,因此您可以轻松地将其输出捕获到 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

相关内容