Змена ACL - Recurse Усе каталогі Powershell

Я ў тупіку!

Вось тое, што мне трэба зрабіць. Мы перайшлі на новы дамен, я ў асноўным патрэбен сцэнар, які мы можам запускаць на сэрвэры, які будзе паўторна праклінаць ўсе каталогі і файлы, гледзячы на ​​ACL, для кожнага з іх. Ён будзе шукаць ACL для OldDomain \ USER і г.д., калі знойдзены змяніць ACL для NewDomain \ USER, але захаваць усе дазволы

Вось тое, што я да гэтага часу

$access = ""
$accessarray = @()
$filesarray = @()
$permarray = @()
$filesarray = Get-ChildItem C:\Users -Recurse
ForEach($path in $filesarray) {
  $pathcheck = $path.fullname
  $access = get-acl $pathcheck
  $accessarray = $access.AccessToString.Split(",")

  foreach ($item in $accessarray) {
    if ($item -match "OLDDOMAIN") {
      Write-Host $pathcheck
      Write-Host $item
      $item = $item -replace ("OLDDOMAIN","NEWDOMAIN")
      $permarray = $item.split(” “) | where-object {$_ -ne ”“}

      foreach($perm in $permarray) {
        $ar = New-Object system.security.accesscontrol.filesystemaccessrule $perm
        $acl.SetAccessRule($ar)
        $acl | Set-Acl $pathcheck
      }
    }
  }
}

Ён працуе выгляд, але праблема ў тым, што, калі гаворка ідзе паўторна дазвол масіў не ў правільным парадку, і ён не ў камандзе Set-Acl,

Любыя ідэі? Нацяжэнне маіх валасоў тут: P

дзякуй

4

1 адказы

<�Код> $ ар = New-Object system.security.accesscontrol.filesystemaccessrule $ рассыпалася

Канструктар FileSystemAccessRule прымае 3 аргумэнты, і пасля таго, як усе вашы расшчаплення і Еогеасп, $ рассыпалася будзе мець толькі адзін аргумент, і што будаўніцтва само па сабе праваліцца.

Пазбягайце шпагат і г.д. Powershell дае вам аб'екты. Працуюць на іх. Ня атрымаць радкі, а затым падзяліць і г.д.

Вы можаце рабіць тое, што вы хочаце нешта накшталт гэтага:

gci c:\users -recurse | %{
    $acl = get-acl $_.fullname

    $acl.Access | ?{$_.IdentityReference.Value.StartsWith("OLDDOMAIN")} | %{

        $identity = $_.IdentityReference.Value -replace "OLDDOMAIN", "NEWDOMAIN"
        $permission = $identity,$_.FileSystemRights,$_.AccessControlType
        $ar = New-Object system.security.accesscontrol.filesystemaccessrule $permission
        $acl.SetAccessRule($ar)

    }

    $acl | set-acl $_.fullname
}
3
дададзена
Дзякуючы чалавеку, на самай справе трэба глядзець больш у Powershell
дададзена аўтар Chris Day, крыніца
Атрыманне наступнага паведамленні пра памылку ў цяперашні час Set-Acl: Ідэнтыфікатар бяспекі не можа быць уладальнікам гэтага аб'екта. Любыя ідэі, я так блізка: P
дададзена аўтар Chris Day, крыніца
Дасканалы я атрымаў гэта працуе яшчэ адно, яго даданне новага правілы доступу, але пакідаючы адзін для старога дамена Як бы я выдаліць яго?
дададзена аўтар Chris Day, крыніца
Атрымаў гэта працуе Дзякуй за вашу дапамогу!
дададзена аўтар Chris Day, крыніца