检查用户是否具有特定的Windows权限Powershell

时间:2014-10-03 14:18:14

标签: powershell

我正在尝试在Windows 2003服务器上安装SQL Server 2008 R2。我尝试创建一个PowerShell脚本,检查用户是否具有Windows权限(调试程序的权利等),或者如果他没有该特定权限,如果他在具有该权限的组中。如果成功,则运行2008安装程序中包含的系统配置检查程序。我很难找到这样做的相关例子。这是PowerShell中的可能吗?

1 个答案:

答案 0 :(得分:0)

whoami.exe /priv可以显示此信息,您是否愿意解析其输出?也许像这样的函数(我确定我已经过度复杂了):

function Get-PrivilegeState {
    [CmdletBinding()]
    param(
        [string[]] $PrivilegeName = "*"
    )

    $WhoAmI = whoami.exe /priv

    foreach ($PrivilegeSearch in $PrivilegeName) {
        $RegEx = "^(?<privilege>{0})\s+.*?\s+(?<state>Enabled|Disabled)" -f ($PrivilegeSearch -replace '\*', '[A-z]*')
        $WhoAmI -match $RegEx | ForEach-Object {
            if ($_ -match $RegEx) {
                $FinalPrivilegeName = $Matches.privilege
                $State = $Matches.state

                New-Object psobject -Property @{
                    PrivilegeName = $FinalPrivilegeName
                    State = $State
                }
            }
        }
    }
}

如果用户没有该权限,该功能将不会返回任何内容。以下是您可以测试特定权限的方法(这不会启用权限;我假设您需要的应​​用程序会在授予权限后自动执行此操作):

if (Get-PrivilegeState SeRestorePrivilege) {
    # Privilege exists
    "Do something here"
}
else {
    Write-Error "Missing privilege"
}

以下是使用该命令的更多示例:

# Get all granted privileges
Get-PrivilegeState

# Use wildcards:
Get-PrivilegeState *system*