none
Аудит файлов и папок на powershell. RRS feed

  • Вопрос

  • $TargetFolders = Get-Content "C:\test.txt"
    $AuditUser = "Network_service" #, Everyone)
    $AuditRules = "Delete,DeleteSubdirectoriesAndFiles,ChangePermissions,Takeownership"
    $InheritType = "ContainerInherit" #ObjectInherit"
    $AuditType = "Success"
    $ACL = new-object System.Security.AccessControl.DirectorySecurity
    $AccessRule = New-Object System.Security.AccessControl.FileSystemAuditRule($AuditUser,$AuditRules,$InheritType,"None",$AuditType)
    $ACL.SetAuditRule($AccessRule)
    foreach ($TargetFolder in $TargetFolders)
    {
                Write-Host "Processing >",$TargetFolder
                $ACL | Set-Acl $TargetFolder
    }
    Write-Host "Audit Policy applied successfully."

    Добрый день !

    Стоит задача написать на чистом powershell 2.0(без доп модулей) скрипт который будет выставлять аудит для пользователей и групп , на просторах интернета нашел вот такой скрипт. Но он выставляет аудит только для одного пользователя и перетирает старые настройки аудита. Мне нужно просто добавить аудит для нескольких пользователей желательно передав их одним параметром  если в скрипте я выставляю

    $AuditUser = "Network service" , "Everyone"

    то выдается исключение

    Exception calling "SetAuditRule" with "1" argument(s): "Some or all identity references could not be translated."
    At C:\VK\pcidss\Untitled8.ps1:8 char:18
    + $ACL.SetAuditRule <<<< ($AccessRule)
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException

    Помогите справится с этой проблемой пожалуйста !!!


    • Изменено Igoroppo6 13 ноября 2014 г. 12:50
    13 ноября 2014 г. 12:49

Ответы

  • $TargetFolders = Get-Content "C:\test.txt"
    
    $AuditUsers = "Все","NT AUTHORITY\NETWORK SERVICE"
    $AuditPerm = "Delete,DeleteSubdirectoriesAndFiles,ChangePermissions,Takeownership"
    $InheritType = "ContainerInherit,ObjectInherit"
    $AuditType = "Success"
    
    
    foreach ($TargetFolder in $TargetFolders)
    {
    	$ACL = Get-ACL $TargetFolder -Audit 
    	$AuditUsers | Foreach {
    		$AuditUser = $_
    		$AccessRule = New-Object System.Security.AccessControl.FileSystemAuditRule($AuditUser,$AuditPerm,$InheritType,"None",$AuditType)
    		$ACL.AddAuditRule($AccessRule)
    	}
        
    	Write-Host "Processing >",$TargetFolder
        $ACL | Set-Acl -Path $TargetFolder
    }
    Write-Host "Audit Policy applied successfully."

    • Предложено в качестве ответа Vector BCOModerator 13 ноября 2014 г. 16:00
    • Помечено в качестве ответа KazunEditor 13 ноября 2014 г. 16:07
    13 ноября 2014 г. 13:47
    Отвечающий
  • Тогда делайте рекурсию и замените

    $ACL.SetAuditRule($AccessRule) 

    на

    $ACL.AddAuditRule($AccessRule)
    В таком случае по идее параметры не будут затираться а будут добавлены к следующему


    • Изменено Vector BCOModerator 13 ноября 2014 г. 13:32
    • Предложено в качестве ответа Vector BCOModerator 13 ноября 2014 г. 16:01
    • Помечено в качестве ответа KazunEditor 13 ноября 2014 г. 16:07
    13 ноября 2014 г. 13:31
    Модератор

Все ответы

  • Во первых крайне не рекомендую использовать имена, так как на рускоязычных системах это будет выглядеть по одному, для систем с муи по другому, для англоязычных систем по третьему

    Используйте Сиды этих пользователей вместо имен

    Попробуйте через $AuditUser ='Network service, Everyone' если хотите через один параметр

    У меня похожая задача решалась при помощи утилиты Хельге Кляйна Setacl (Нужно смотреть битность)


    13 ноября 2014 г. 12:59
    Модератор
  • $AuditUser ='Network service, Everyone' 

    Не работает, тоже исключение выдает.
    13 ноября 2014 г. 13:14
  • Тогда делайте рекурсию и замените

    $ACL.SetAuditRule($AccessRule) 

    на

    $ACL.AddAuditRule($AccessRule)
    В таком случае по идее параметры не будут затираться а будут добавлены к следующему


    • Изменено Vector BCOModerator 13 ноября 2014 г. 13:32
    • Предложено в качестве ответа Vector BCOModerator 13 ноября 2014 г. 16:01
    • Помечено в качестве ответа KazunEditor 13 ноября 2014 г. 16:07
    13 ноября 2014 г. 13:31
    Модератор
  • Аудит перетирается все равно :(
    13 ноября 2014 г. 13:39
  • $TargetFolders = Get-Content "C:\test.txt"
    
    $AuditUsers = "Все","NT AUTHORITY\NETWORK SERVICE"
    $AuditPerm = "Delete,DeleteSubdirectoriesAndFiles,ChangePermissions,Takeownership"
    $InheritType = "ContainerInherit,ObjectInherit"
    $AuditType = "Success"
    
    
    foreach ($TargetFolder in $TargetFolders)
    {
    	$ACL = Get-ACL $TargetFolder -Audit 
    	$AuditUsers | Foreach {
    		$AuditUser = $_
    		$AccessRule = New-Object System.Security.AccessControl.FileSystemAuditRule($AuditUser,$AuditPerm,$InheritType,"None",$AuditType)
    		$ACL.AddAuditRule($AccessRule)
    	}
        
    	Write-Host "Processing >",$TargetFolder
        $ACL | Set-Acl -Path $TargetFolder
    }
    Write-Host "Audit Policy applied successfully."

    • Предложено в качестве ответа Vector BCOModerator 13 ноября 2014 г. 16:00
    • Помечено в качестве ответа KazunEditor 13 ноября 2014 г. 16:07
    13 ноября 2014 г. 13:47
    Отвечающий
  • Спасибо , работает !!!!!
    13 ноября 2014 г. 14:49
  • Я тоже самое написал...
    13 ноября 2014 г. 16:00
    Модератор