ACL өзгерту - Барлық анықтамалықтарды Powershell-ды қайталау

Мен қашып кеттім!

Міне, мен не істеуім керек. Біз жаңа доменге көшіп кеттіңіз, негізінен серверде іске қосуға болатын сценарий қажет, ол барлық каталогтар мен файлдарды әрқайсысы үшін ACL-ге қарайтын болады. Ол OLDDOMAIN \ USER және т.б. үшін ACL іздейді, егер табылған 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 пәрменінде орындалмайды

Кез келген идеялар? Шашты осында алып тастау: Р

Рахмет

4

1 жауаптар

$ ar = Жаңа-Object system.security.accesscontrol.filesystemaccessrule $ perm

FileSystemAccessRule конструкторы 3 аргументті қабылдайды, содан кейін барлық бөліну және foreach, $ perm тек бір дәлелге ие болады және құрылыстың өзі орындалмайды.

Бөлгіштерден және т.б. құтылудан құтылыңыз. 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: Қауіпсіздік идентификаторы осы нысанның иесі болуына жол берілмейді. Кез келген идеялар, мен өте жақынмын: Р
қосылды автор Chris Day, көзі
Мінсіз Мен оны жұмысқа алдым Жаңа нәрсе, оның жаңа ережені қосу, бірақ ескі доменді қалдыру Мен оны қалай алып тастаймын?
қосылды автор Chris Day, көзі
Оны қолданыңыз Барлық көмегіңіз үшін рақмет!
қосылды автор Chris Day, көзі