gpt4 book ai didi

powershell - 管理员权限的通用测试

转载 作者:行者123 更新时间:2023-12-01 11:34:01 27 4
gpt4 key购买 nike

是否有单一可靠的方法来测试当前用户是否具有管理员权限?这个我试过了

$isAdmin = (new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole("Administrators")

只要 Windows 最初安装的是英文版本,它就可以工作。如果 Windows 是用西类牙语安装的,您必须测试 Administradors。还有一些其他语言也有类似的工作方式。我的第一个想法是只测试所有可能的拼写,但如果有简单、优雅且万无一失的东西,那将是我的首选。

最佳答案

您正在调用 IsInRole 方法的 String 定义,这就是您在不同语言中遇到问题的原因。

如果您查看 IsInRole OverLoadDefinitions,您会看到第一个 Defintion 是一个 String,这是您在代码中调用的定义

OverloadDefinitions
-------------------
bool IsInRole(string role)
bool IsInRole(System.Security.Principal.WindowsBuiltInRole role)
bool IsInRole(int rid)
bool IsInRole(System.Security.Principal.SecurityIdentifier sid)
bool IPrincipal.IsInRole(string role)

这种基于字符串的重载与 NET LOCALGROUP Administrators 命令有相同的缺点,它依赖于不同操作系统语言中不同的组名。

要解决此问题,请使用 System.Security.Principal.WindowsBuiltInRole OverLoadDefinition:

$role = [System.Security.Principal.WindowsBuiltInRole] "Administrator"

然后检查这个角色:

$isAdmin = (new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole($role)

这样你就不需要关心不同的操作系统语言

*获取所有可用的 WindowsBuiltInRoles:

[System.Enum]::GetValues([System.Security.Principal.WindowsBuiltInRole])

关于powershell - 管理员权限的通用测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35813265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com