Powershell函数中的SID

时间:2016-11-30 17:37:16

标签: powershell

我有一个PowerShell函数,可以在Perflogs文件夹上启用审计。该功能在具有英语安装语言的Windows PC上运行良好。但是当我在丹麦语版本上使用它时它失败了,因为"每个人"不会退出丹麦装置。在丹麦的装置"每个人"被称为" Alle"

所以我不想使用每个人,而是想使用SID" S-1-1-0"

S-1-1-0 =每个人/世界link

但由于某种原因,这也行不通。有没有人对此有所了解以及为什么我不能这样做?

function AddAuditToFile {
param
(
    [Parameter(Mandatory=$true)]
    [string]$path
)

Get-Acl $path -Audit | Format-List Path,AuditToString | Out-File -FilePath 'file_before.txt' -Width 200 -Append
$File_ACL = Get-Acl $path
$AccessRule = New-Object System.Security.AccessControl.FileSystemAuditRule("S-1-1-0","CreateFiles,Modify,AppendData”,"none","none",”Success")
$File_ACL.AddAuditRule($AccessRule)
$File_ACL | Set-Acl $path
Get-Acl $path -Audit | Format-List Path,AuditToString | Out-File -FilePath 'file_after.txt' -Width 200 -Append}

我这样称呼函数:

AddAuditToFile "C:\Perflogs"

2 个答案:

答案 0 :(得分:1)

使用SecurityIdentifier类翻译SID:

$everyoneSid= New-Object System.Security.Principal.SecurityIdentifier "S-1-1-0"
$everyoneSidName= $everyoneSid.Translate([System.Security.Principal.NTAccount])
$everyoneSidName.Value

这将根据实际机器输出实际的每个人组名称。

答案 1 :(得分:0)

Spiceworks的Gungnir找到了解决方案。

我必须翻译SID并创建一个变量,然后使用变量

  

$ AccountSID = New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList'S-1-1-0'

     

$ AccountName = $ AccountSID.Translate([System.Security.Principal.NTAccount])。值

     

$ AccessRule = New-Object System.Security.AccessControl.FileSystemAuditRule -ArgumentList($ AccountName,'CreateFiles,Modify,AppendData','none','none','Success')