设置 Get-Acl 的输出语言
Set output Language of Get-Acl
我正在开发一个 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"
.
这非常令人不快,因为脚本应该 运行 在具有不同 OS 语言的多个系统上,我必须为每种语言编写一个规则。
问题
如何强制powershell输出英文?有没有更好的方法?
如Mathias R. Jessen mentioned, you should work with Secure Identifiers. Here is a 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")
改用内置组的安全标识符(始终相同):
$BuiltinUsersSID = New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-32-545'
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $BuiltinUsersSid,"Read","Allow"
与一样,您可以使用 WMI 根据 SID 查找用户或组帐户,但您也可以 翻译 一个 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
我正在开发一个 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"
.
这非常令人不快,因为脚本应该 运行 在具有不同 OS 语言的多个系统上,我必须为每种语言编写一个规则。
问题 如何强制powershell输出英文?有没有更好的方法?
如Mathias R. Jessen mentioned, you should work with Secure Identifiers. Here is a 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")
改用内置组的安全标识符(始终相同):
$BuiltinUsersSID = New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-32-545'
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $BuiltinUsersSid,"Read","Allow"
与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