在不同文化中使用 PowerShell 设置文件夹权限
Set folder permissions with PowerShell in different cultures
我正在尝试创建一个 PowerShell 脚本,该脚本向不同文化的 NETWORK SERVICE 授予文件夹权限。主要问题是 NETWORK SERVICE,虽然存在于 Windows 的所有安装中,但在不同的文化中有不同的名称,我不知道如何处理。
这是我正在使用的脚本:
$appPath = "C:\SomeFolder"
$Acl = (Get-Item $appPath).GetAccessControl('Access')
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("NETWORK SERVICE", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $appPath $Acl
现在这个脚本在 Windows 的英文版本上工作得很好。但是,当尝试在 Windows 的德语版本上 运行 它时,我收到以下错误消息(翻译自德语):
Exception calling "SetAccessRule" with "1" argument(s): "Some or all identity
references could not be translated."
At C:\Experimental Files\GrantFolderPermissions.ps1:7 char:1
+ $Acl.SetAccessRule($Ar)
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : IdentityNotMappedException
我怎样才能最好地处理这个问题,使这个脚本独立于文化?
使用well-known SID确定账户名:
$sid = [Security.Principal.SecurityIdentifier]'S-1-5-20'
$acct = $sid.Translate([Security.Principal.NTAccount]).Value
$ace = New-Object Security.AccessControl.FileSystemAccessRule($acct, 'FullControl', 'ContainerInherit,ObjectInherit', 'None', 'Allow')
我正在尝试创建一个 PowerShell 脚本,该脚本向不同文化的 NETWORK SERVICE 授予文件夹权限。主要问题是 NETWORK SERVICE,虽然存在于 Windows 的所有安装中,但在不同的文化中有不同的名称,我不知道如何处理。
这是我正在使用的脚本:
$appPath = "C:\SomeFolder"
$Acl = (Get-Item $appPath).GetAccessControl('Access')
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("NETWORK SERVICE", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $appPath $Acl
现在这个脚本在 Windows 的英文版本上工作得很好。但是,当尝试在 Windows 的德语版本上 运行 它时,我收到以下错误消息(翻译自德语):
Exception calling "SetAccessRule" with "1" argument(s): "Some or all identity references could not be translated." At C:\Experimental Files\GrantFolderPermissions.ps1:7 char:1 + $Acl.SetAccessRule($Ar) + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : IdentityNotMappedException
我怎样才能最好地处理这个问题,使这个脚本独立于文化?
使用well-known SID确定账户名:
$sid = [Security.Principal.SecurityIdentifier]'S-1-5-20'
$acct = $sid.Translate([Security.Principal.NTAccount]).Value
$ace = New-Object Security.AccessControl.FileSystemAccessRule($acct, 'FullControl', 'ContainerInherit,ObjectInherit', 'None', 'Allow')