Skript, mis küsib ACL-i objekte AD-st - Powershell

From ICO wiki


Skripti kasutamiseks läheb vaja PowerGUI koos AD powerpack-iga. Skript ei käi läbi alamkatalooge ja faile.

#
# Lauri Liibert AK21 2011
# Powershell skript
#
#

# kausta valmise funktsioon, avab anka kus saab hiirega valida 
function Select-Folder($message='Vali kaust', $path = 0) {
   $bf = New-Object -comObject Shell.Application  
   $folder = $bf.BrowseForFolder(0, $message, 0, $path)  
   if ($folder -ne $null) {
     $folder.self.Path  
   }
}

$pwd = pwd # kataloog kus hetkel oleme
$result = "\tulemus.txt" # faili nimi kuhu salvestame
$file = $pwd + $result #liidame pwd ja faili kokku
$dir = Select-Folder # käivitame kausta funktsiooni

echo "***" > $file
echo "Folder premissions" >> $file
echo "***" >> $file

$acl = Get-ChildItem $dir | Get-Acl # küsime kasusta acl-i, ainult kaustad
$list = $acl | ForEach-Object {$_.Access} | ForEach-Object {$_.IdentityReference} | Sort-Object | Get-Unique # leiame unikaalsed õigused

$rs = "Microsoft.PowerShell.Core\\FileSystem\:\:" 

#Kuvame kaustad mis pärivad õiguseid.
echo "---" >> $file
echo "Is Inherited: $dir"  >> $file
echo "---" >> $file
foreach ($item in $acl) {
	$path = $item | Foreach {$_.Path -replace $rs, ""} #kustutame path eest koleda rea, selle jaoks on tegelikult korralik command olemas
	$parib = $item | ForEach-Object {$_.Access} | ForEach-Object {$_.IsInherited} | Get-Unique	
	if($parib) {$path >> $file} else {$isinherited = $true}
}

Get-Acl $dir | ForEach-Object {$_.Access} | Format-Table FileSystemRights, IdentityReference -HideTableHeaders -AutoSize >> $file

#Kuvame kaustad mis ei päri õiguseid.
if ($isinherited){
	echo "---" >> $file
	echo "Isn't Inherited" >> $file
	echo "---" >> $file
	foreach ($item in $acl) {
		$path = $item | Foreach {$_.Path -replace $rs, ""}
		$parib = $item | ForEach-Object {$_.Access} | ForEach-Object {$_.IsInherited} | Get-Unique	
		if(!$parib) {
			$path >> $file
			$item | ForEach-Object {$_.Access} | Format-Table FileSystemRights, IdentityReference -HideTableHeaders -AutoSize >> $file
		}
	}
}

echo "***" >> $file
echo "Group Users" >> $file
echo "***" >> $file

# kuvame grupi inimesed
foreach ($item in $list) {
	$groups = $item.ToString()
	$c1 = @{Expression={$_.name};Label=$groups;}
	$type = Get-QADObject $groups | ForEach-Object {$_.Type} | Get-Unique	
	if($type -eq "group"){
		Get-QADGroupMember $groups -IncludedProperties name |
		Format-Table $c1 >> $file
	}
}