Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 1479
Hei jeg trenger litt hjelp med å fullføre et script jeg har laget for å få ut en cvs fil med oversikt over hvilke brukere som har tilgang til de forskjellige mappene på fil-serverne.

Basic info om oppsett.
Fil-serveren er satt-opp med dfs ie: \\dsfroot\avdeling\fellesmapper\under-mapper\

Tilganger gies via AD Universal Securety groups: de 3 standard gruppene som blir gitt er: Avdeling_mappe_R \ Avdeling_mappe_RW \ Avdeling_mappe_ADM

R = kun lese \ se innhold
RW = lese og skrive og lagre innhold
ADM = lese, skrive og endre på innhold

inne i disse gruppene lå legger vi inn brukere etter hvilke rettigheter de skal ha, og eventuelt egen grupper inne i disse gruppene igjen utifra hvilket nivå mappen tilhører og om det er felles for alle eller egen avdeling.

Jeg har til nå et script som finner informasjonen om hvem brukere som har tilgang til spesifisert root mappe og tar ut info i dette formatet:

Kode

Z:\Fellesmappe\Hovedmappe\Under-mappe,Domene\Brukernanvn
det jeg ønsker er og få lagt til "display name" og "email" da vi har et brukernavn oppsett på avdelings-nr og ansatt nr ie: 0153889

dette blir da veldig upraktisk når en leder vil ha en oversikt til revisjon over tilganger som er på de forskjellige mappene

Koden er laget i powershell mappetilgang.ps1

Kode

$OutFile = "C:\Permissions-test.csv"
$Header = "Folder Path,IdentityReference,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags"
Add-Content -Value $Header -Path $OutFile 

$RootPath = "C:\Test"

$Folders = dir $RootPath -recurse | where {$_.psiscontainer -eq $true}

foreach ($Folder in $Folders){
	$ACLs = get-acl $Folder.fullname | ForEach-Object { $_.Access  }
	Foreach ($ACL in $ACLs){
	$OutInfo = $Folder.Fullname + "," + $ACL.IdentityReference  + "," + $ACL.AccessControlType + "," + $ACL.IsInherited + "," + $ACL.InheritanceFlags + "," + $ACL.PropagationFlags
	Add-Content -Value $OutInfo -Path $OutFile
	}}
Jeg har prøvd og google og finne svar på dette men finner ikke ut hvilke verdier jeg skal legge til for og få med de feltene jeg ønsket

er det noen her som kan dytte meg i riktig retting eventuelt om det går an n og få koden bedre?
Sist endret av knutazz; 17. februar 2014 kl. 11:45.
PSA
knutazz's Avatar
Trådstarter
Buper opp denne,

Er det ingen som har noen kommenterer eller tips til hvordan dette kan løses med og få en output med display name og email adresse fra AD?
Du får nok ikke DisplayName, etc., fra Get-Acl. Du må gjøre eksternt oppslag i AD med skriptet ditt med f.eks. Get-ADUser -Identity "" | Select-Object DisplayName, Mail
PSA
knutazz's Avatar
Trådstarter
har du noen tips til hvordan jeg kan få inn denne funksjonen inn i det scriptet så jeg får den outputen jeg ønsker.

er veldig ny i powershell scripting så noen tips på veien hadde vert fint
Kort og enkelt uten altfor mange fine funksjoner

Kode

$Folders = dir $RootPath -recurse | where {$_.psiscontainer -eq $true}

ForEach ($Folder in $Folders) {
	$ACLs = get-acl $Folder.fullname | ForEach-Object { $_.Access  }
	Foreach ($ACL in $ACLs) {
		$ADUser = $ACL.IdentityReference -creplace '(?s)^.*\\', ''
		$ADUser = Get-ADUser -Filter {SamAccountName -eq $ADUser} -Properties DisplayName, EmailAddress
		If ($ADUser) {
			$DisplayName = $ADUser.DisplayName
			$EmailAddress = $ADUser.EmailAddress
		} Else {
			$DisplayName = "N/A"
			$EmailAddress = "N/A"
		}

		$OutInfo = $Folder.Fullname + "," `
				+ $ACL.IdentityReference + "," `
				+ $ACL.AccessControlType + "," `
				+ $ACL.IsInherited + "," `
				+ $ACL.InheritanceFlags + "," `
				+ $ACL.PropagationFlags + "," `
				+ $DisplayName + "," `
				+ $EmailAddress
				
		Add-Content -Value $OutInfo -Path $OutFile
	}
}