一般来说,我是 powershell/scripting/life 的新手,但最后我遇到了一个值得寻求帮助的问题:我在环境中有各种 Windows 本地化 - 当前环境中的英语、芬兰语和俄语,但有可能拥有其他斯堪的纳维亚/欧洲本地化。我需要将经过身份验证的用户添加到管理员组。我可以用英语编写脚本:
NET LOCALGROUP Administrators "Authenticated Users" /add,
但我不会知道所有本地化名称。例如,在俄语中,它将是“Administratori”和“Proshedshie Proverku”。在西里尔语中,无论如何我并不那么强大。当然,我知道 SID——S-1-5-32-544 用于管理员,S-1-5-11 用于经过身份验证的用户。然而,运行
NET LOCALGROUP S-1-5-32-544 S-1-5-11 /add returns error that group doesn't exist. Ok, so I found a script to check it -
$objUser = New-Object System.Security.Principal.NTAccount("kenmyer")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
这将返回预期值,到目前为止一切顺利。然后我尝试仔细检查它-通过运行从 SID 获取名称的行-
$Admin = (Get-WMIObject -Class Win32_Group -Filter "LocalAccount=True and SID='S-1-5-32-544'").Name
$Auth = (Get-WMIObject -Class Win32_Group -Filter "LocalAccount=True and SID='S-1-5-11'").Name
And $Admin
= Administratori(应该如此),而$Auth
= 没有。没有名字。这就是我停下来的地方。我也在英语环境中尝试过这个 - 仍然得到“没有这样的组”消息。运行我写的第一个命令,两个名字都是英文 - 工作得很好。
有任何想法吗?
Upd:也许我无法正确解释我要做什么,所以让脚本来说话:
#Task: to add "Authenticated users" to "Administrators" group in any languange OS.
$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
$objgroup = $objSID.Translate( [System.Security.Principal.NTAccount])
$objgroupnameAdm = ($objgroup.Value).Split("\")[1]
$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-11")
$objgroup = $objSID.Translate( [System.Security.Principal.NTAccount])
$objgroupnameAuth = ($objgroup.Value).Split("\")[1]
#Administratörer
#Autentiserade användare
net localgroup $objgroupnameAdm $objgroupnameAuth /add
我现在在瑞典的 Win7 上试试这个。所以结果是:
net.exe : Syntaxen för kommandot är:
At line:13 char:4
+ net <<<< localgroup $objgroupnameAdm $objgroupnameAuth /add
+ CategoryInfo : NotSpecified: (Syntaxen för kommandot är::String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
我也尝试过$objgroupnameAuth
加上引号,因为它包含两个单词,但结果相同。将变量定义为字符串 - 没有变化,并用$objGroupNameAdm
实际值替换 - 没有变化。
如果我不能在英文 Windows 中做到这一点,我会认为它在功能上是不可能的。