Benutzer mit den meisten Antworten
IF

Frage
-
moin,
wenn ich mir mit
$Access=get-acl$Verzeichnis.FullName
die Rechte ansehen möchte erhalte ich ein Array von Daten
C:\temp\Neuer Ordner (5)
FileSystemRights : Modify, Synchronize
AccessControlType : Allow
IdentityReference : Jeder
IsInherited : True
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : NoneFileSystemRights : FullControl
AccessControlType : Allow
IdentityReference : VORDEFINIERT\Administratoren
IsInherited : True
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : Nonewie kann ich das jetzt so einschränken (siehe IF) das ich nur bestimmte IdentityReference erhalte?
sehe den Fehler nicht
$Verzeichnisse = Get-ChildItem c:\temp -Directory foreach($Verzeichnis in $Verzeichnisse) { $Access = get-acl $Verzeichnis.FullName foreach($x in $Access) { write-host $Verzeichnis.FullName -ForegroundColor Green #$x.Access if($x.access.IdentityReference -like "*Administratoren") { $x.Access } } }
liefert? mit -eq das selbe Problem
Jeder
VORDEFINIERT\Administratoren
NT-AUTORITÄT\SYSTEM
VORDEFINIERT\Benutzer
NT-AUTORITÄT\Authentifizierte Benutzer
NT-AUTORITÄT\Authentifizierte Benutzer
Jeder
VORDEFINIERT\Administratoren
NT-AUTORITÄT\SYSTEM
VORDEFINIERT\Benutzer
NT-AUTORITÄT\Authentifizierte Benutzer
NT-AUTORITÄT\Authentifizierte Benutzer.....
Chris
- Bearbeitet -- Chris -- Donnerstag, 22. Juni 2017 07:14
Antworten
-
Ich kann mir zwar nicht vorstellen, was Du damit anfangen willst, aber versuch mal so:
$Verzeichnisse = Get-ChildItem c:\temp -Directory foreach($Verzeichnis in $Verzeichnisse) { $Access = get-acl $Verzeichnis.FullName foreach($x in $Access) { write-host $Verzeichnis.FullName -ForegroundColor Green Foreach($Reference in $x.access.IdentityReference){ if($Reference -like "*Administratoren") { $Reference } } } }
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join''- Als Antwort markiert -- Chris -- Donnerstag, 22. Juni 2017 10:59
-
Hallo,
zu "PowerShell das unbekannte Wesen".
Das Verhalten ist absolut logisch. $x.Access.Reference ist ein Array. Deshalb musst du auch entsprechend damit umgehen.
Wenn du einen Vergleichsoperator auf ein Array anwendest, werden alle Werte zurückgegeben, die die Bedingung erfüllen:
1,2,3,4 -ge 3
Machst du das als Bedingung für einen If-Block, wird der Ausdruck als $true interpretiert, wenn mindestens ein Wert zurückgegeben wird.
if(1,2,3,4 -ge 3){Write-Host "Richtig"}
Für deinen Code
if($x.access.IdentityReference -like "*Administratoren") { $x.Access }
heißt das, sobald es in dem Array eine Admin-Referenz gibt, wird das gesamte Array ausgeben, weil dann die Bedingung erfüllt ist und dein Code für diesen Fall die Ausgabe des gesamten Arrays vorsieht.
Wenn du filtern willst, wolltest du wie Chris schreibt, Where-Object benutzen.
Viele Grüße
Christoph
- Bearbeitet hpotsirhc Donnerstag, 22. Juni 2017 10:03
- Als Antwort markiert -- Chris -- Donnerstag, 22. Juni 2017 10:59
-
Hallo Chris,
so z.B:
(Get-Acl $Verzeichnis.Fullname).Access | Where-Object {$_.IdentityReference -like '*Admin*'}
Beste Guresse
brima- Als Antwort markiert -- Chris -- Donnerstag, 22. Juni 2017 10:59
Alle Antworten
-
Ich kann mir zwar nicht vorstellen, was Du damit anfangen willst, aber versuch mal so:
$Verzeichnisse = Get-ChildItem c:\temp -Directory foreach($Verzeichnis in $Verzeichnisse) { $Access = get-acl $Verzeichnis.FullName foreach($x in $Access) { write-host $Verzeichnis.FullName -ForegroundColor Green Foreach($Reference in $x.access.IdentityReference){ if($Reference -like "*Administratoren") { $Reference } } } }
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join''- Als Antwort markiert -- Chris -- Donnerstag, 22. Juni 2017 10:59
-
so geht's Olaf, Danke
ganz schön verwirrend. Komisch dass man nicht gleich auf das Feld/Properties verweisen bzw. diese abfragen kann? In der Ausgabe kommt ja ein korrekter Wert zurück
PS H:\> $x.access.IdentityReference -like "*Administratoren"
VORDEFINIERT\Administratoren
Powershell das unbekannt Wesen!
thxs.
PS: der Hintergrund der Aktion, ich muss 1000 Profilverzeichnis auf "*USER*" überprüfen. Administrator ist nur ein Muster auf C:
Chris
-
muss müsste es eigentlich schon vorher filter können
$Access=get-acl$Verzeichnis.FullName |where$_.Access -like"*Admin*"
$Verzeichnisse = Get-ChildItem c:\temp -Directory foreach($Verzeichnis in $Verzeichnisse) { $Access = get-acl $Verzeichnis.FullName | where $_.Access -like "*Admin*" $access # foreach($x in $Access) # { # write-host $Verzeichnis.FullName -ForegroundColor Green # #$x.Access # # foreach($Reference in $x.Access.IdentityReference){ # if($Reference -eq "VORDEFINIERT\Administratoren") # { # $Reference # } # } # } }
Chris
-
Hallo,
zu "PowerShell das unbekannte Wesen".
Das Verhalten ist absolut logisch. $x.Access.Reference ist ein Array. Deshalb musst du auch entsprechend damit umgehen.
Wenn du einen Vergleichsoperator auf ein Array anwendest, werden alle Werte zurückgegeben, die die Bedingung erfüllen:
1,2,3,4 -ge 3
Machst du das als Bedingung für einen If-Block, wird der Ausdruck als $true interpretiert, wenn mindestens ein Wert zurückgegeben wird.
if(1,2,3,4 -ge 3){Write-Host "Richtig"}
Für deinen Code
if($x.access.IdentityReference -like "*Administratoren") { $x.Access }
heißt das, sobald es in dem Array eine Admin-Referenz gibt, wird das gesamte Array ausgeben, weil dann die Bedingung erfüllt ist und dein Code für diesen Fall die Ausgabe des gesamten Arrays vorsieht.
Wenn du filtern willst, wolltest du wie Chris schreibt, Where-Object benutzen.
Viele Grüße
Christoph
- Bearbeitet hpotsirhc Donnerstag, 22. Juni 2017 10:03
- Als Antwort markiert -- Chris -- Donnerstag, 22. Juni 2017 10:59
-
Christop, danke
wie müsste das Where aussehen?
das geht zb. nicht
$Access = get-acl $Verzeichnis.FullName | where Access -like "*Admin*"
obwohl das Array im Object dabei ist.
PS H:\> get-acl $Verzeichnis.FullName | fl
Path : Microsoft.PowerShell.Core\FileSystem::C:\temp\Neuer Ordner (5)
Owner : firma\xyz
Group : firma\Domain Users
Access : Jeder Allow Modify, Synchronize
VORDEFINIERT\Administratoren Allow FullControl
NT-AUTORITÄT\SYSTEM Allow FullControl
VORDEFINIERT\Benutzer Allow ReadAndExecute, Synchronize
NT-AUTORITÄT\Authentifizierte Benutzer Allow Modify, SynchronizeChris
-
Hallo Chris,
so z.B:
(Get-Acl $Verzeichnis.Fullname).Access | Where-Object {$_.IdentityReference -like '*Admin*'}
Beste Guresse
brima- Als Antwort markiert -- Chris -- Donnerstag, 22. Juni 2017 10:59