设置Get-Acl的输出语言

时间:2016-11-14 10:58:04

标签: powershell acl multilingual

我正在研究一个powershell脚本,该脚本应该删除给定网络共享的权限。

我用:

 $folder = "Path\To\Folder\on\Share"

 $acl = Get-ACL -Path $Folder

 #Remove inheritance but copy ACE
 $acl.SetAccessRuleProtection($True, $True)

 Set-Acl -Path $folder -AclObject $acl

 $acl = Get-ACL -Path $Folder

 $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule("VORDEFINIERT\Benutzer","Read",,,"Allow")

 $acl.RemoveAccessRuleAll($accessrule)

 Set-Acl -Path $folder -AclObject $acl

这应该在保留现有权限的同时删除继承权,然后删除"BUILTIN\Users"的所有权限。

不幸的是我的系统语言是德语,所以写"BUILTIN\Users""<OUR DOMAIN>\Users"不起作用,因为它自动翻译Get-ACL的输出,我必须编写德语翻译"VORDEFINIERT\Benutzer"。 / p>

这是非常不愉快的,因为脚本应该在具有不同操作系统语言的多个系统上运行,我将不得不为每种语言编写一条规则。

问题 如何强制powershell用英语输出?还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

使用内置组的安全标识符(始终相同):

$BuiltinUsersSID = New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-32-545'
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $BuiltinUsersSid,"Read","Allow"

作为shown by Martin Brandl,您可以使用WMI根据SID查找用户或群组帐户,但如果您需要,您还可以将<{em} {{em> SecurityIdentifier对象转换为帐户本地化名称:

PS> $BuiltinUsersSID = New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-32-545'
PS> $BuiltinUsersGroup = $BuiltinUsersSID.Translate([System.Security.Principal.NTAccount])
PS> $BuiltinUsersGroup.Value # This would output VORDEFINIERT\Benutzer on a system with german locale
BUILTIN\Users

答案 1 :(得分:1)

作为Mathias R. Jessen mentioned,您应使用安全标识符。这是一个list of Well-known SIDs。你可能想做这样的事情:

# ...
$sidName = ([wmi]"Win32_SID.SID='S-1-5-32-545'").AccountName
$accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($sidName,"Read",,,"Allow")