Avatar billede Soaked89 Nybegynder
05. februar 2015 - 16:27 Der er 1 løsning

Powershell

Hej Eksperter,

Jeg er ny til powershell, men har alligevel påtaget mig den udfordring at sammensætte et script der ændre rettigheder på mapper med bestemte navne.

F.eks. hvis filstrukturen ser således ud:

\\filserver
...............\First
......................\a
......................\b
................\Second
......................\b
......................\c

Jeg skal f.eks. disable inheritance på "b" i \first og i \second.
Undskyld hvis min nedenstående kode ser rodet ud.

Præcise formål med denne er at søge efter mapper på filserveren der har navnet "b" og deaktivere inheritance på dem den finder.

Det er 2 funktioner jeg har sat sammen, at finde Get-ChildItem og Get-ACL/Set-ACL. Hver for sig virker de perfekt, men det går galt når jeg sætter dem sammen.
Kan I fortælle mig, hvor/hvorfor det går galt for mig?

$dir = "\\filserver\"
$folder=Get-ChildItem $dir -recurse -name "b" | Foreach-object {$dir + $_}
$acl = ForEach-Object {Get-ACL -path $folder}

foreach ($dir in $acl)
{
$acl.SetAccessRuleProtection($True, $False)
  {
  Set-Acl -Path $folder -AclObject $acl
  }
}

pft.
Avatar billede Soaked89 Nybegynder
10. februar 2015 - 15:09 #1
Løste det selv.
Den er ikke særlig prof, men den virker! :-)


$dirs = Read-Host 'Input directory root (\\Server\share\) '
$dir = Read-Host 'Input folder name '
$folder = Get-ChildItem $dirs -recurse -name $dir | Foreach-object {$dirs + $_}

while ($true)
{
$remove = Read-Host 'Do you want to (r)emove inheritance, (a)dd user/group or (e)xit?(r/a/e) '
  if ($remove -like "r")
  {
    Foreach ($mappe in $folder) {
    $acl = Get-ACL -path $mappe
    $acl.SetAccessRuleProtection($True, $False)
    Set-Acl -Path $mappe -aclobject $acl
    clear-variable -name acl
  }
  }
  if ($remove -like "a")
  { 
  $id = Read-Host 'Input domain\user or domain\group '
  Foreach ($mappe in $folder) {
  $acl = Get-ACL -path $mappe
  $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$id", "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
  $acl.AddAccessRule($rule)
  Set-Acl -Path $mappe -aclobject $acl
  clear-variable -name acl
  }
  }
  else
  {
  exit
  }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester