oesi1989
Goto Top

OU an eine Variable übergeben

Hallo, ich würde gerne alle OUs an eine Variable übergeben und danach einen Teil per .remove entfernen.
Das Anzeigen klappt auch nur mit "| Format-Table Name -A". Wieso??
Nur das funktioniert nicht.
$ous = @(Get-ADOrganizationalUnit -Filter 'Name -like "*"' -SearchBase $searchbase -Properties Name | Format-Table Name -A )  
foreach($ou in $ous)
{    $ou.Remove(5,5) }

Content-Key: 372198

Url: https://administrator.de/contentid/372198

Ausgedruckt am: 19.03.2024 um 11:03 Uhr

Mitglied: emeriks
emeriks 25.04.2018 um 16:32:28 Uhr
Goto Top
Hi,
ich würde gerne alle OUs an eine Variable übergeben und danach einen Teil per .remove entfernen.
Du willst also die einfachen Namen der OUs haben?

$OUs = (Get-ADOrganizationalUnit -Filter * -SearchBase $searchbase -Properties Name).Name

E.
Mitglied: oesi1989
oesi1989 25.04.2018 um 16:50:05 Uhr
Goto Top
Ja genau.
Und wie kann ich z.B. nur die erste OU nehmen und nicht noch die Unter-OUs? Geht das mit -SearchScope?
Wie kann ich bei den einzelnen OUs ab der 5. Stelle bis zum Ende alle Zeichen entfernen? Ich muss ja 2 Werte angeben, oder?
Mitglied: emeriks
emeriks 25.04.2018 um 16:55:58 Uhr
Goto Top
Und wie kann ich z.B. nur die erste OU nehmen und nicht noch die Unter-OUs? Geht das mit -SearchScope?
Ja. Da musst Du dann "OneLevel" nehmen.

Wie kann ich bei den einzelnen OUs ab der 5. Stelle bis zum Ende alle Zeichen entfernen? Ich muss ja 2 Werte angeben, oder?
Du willst bloß die ersten 4 Zeichen der Namen der OU's haben?
$OUs = (Get-ADOrganizationalUnit -Filter * -SearchBase $searchbase -Properties Name).Name.SubString(0,4)

Fehler kommt dann, wenn ein OU-Name weniger als 4 Stellen hat.
Mitglied: oesi1989
oesi1989 25.04.2018 um 17:04:16 Uhr
Goto Top
Das mit dem Substring kannte ich nicht.

Wie kann ich jetzt pro OU (1 OU ist eine Abt) eine eigene .csv-Datei erstellen, in der alle Nutzer und deren Gruppen drin sind?
Bis jetzt habe ich nur eine kpl. .csv-Datei mit allen Nutzern und deren Gruppen.

#Import-Module ActiveDirectory

$searchbase = "OU=Neues_FS,..."  
#$path = "C:\temp\$ou.csv" 

$ous = (Get-ADOrganizationalUnit -Filter "Name -notlike '*Test*' -and Name -notlike '*999*'" -SearchBase $searchbase -Properties Name -SearchScope OneLevel -ErrorAction SilentlyContinue).Name.SubString(0,4)  


foreach($ou in $ous)
{ 
    $alleGruppen = get-adgroup -filter * -SearchBase $searchbase
    foreach($Gruppe in $alleGruppen)
    {
        $Members = get-adgroupmember -identity $Gruppe|Select-Object Name,SamAccountName,GroupName|Foreach-Object {
        $_.GroupName = $Gruppe
        $_    
        }| Export-CSV $path -Append -NoTypeInformation -Encoding UTF8
    }
}
(Get-Content $path) -replace "CN=","" | out-file $path   
(Get-Content $path) -replace '(?s),OU=.+' | out-file $path   
(Get-Content $path) | Foreach-Object { If ($_ -match "_C_")  { $_ + "`",`"Ändern`""}  else { $_ } }| Set-Content $path  
(Get-Content $path) | Foreach-Object { If ($_ -match "_R_")  { $_ + "`",`"Lesen`""}  else { $_ } }| Set-Content $path  
(Get-Content $path) -replace "_C_","_" | out-file $path   
(Get-Content $path) -replace "_R_","_" | out-file $path  

Dann müsste ja $path jetzt in der ForEach-Schleife stehen, oder?
Mitglied: erikro
erikro 25.04.2018 um 17:07:18 Uhr
Goto Top
Moin,

läuft das mit dem Löschen nicht gegen die Wand, weil OUs im Standard gegen Löschen geschützt sind?

LG

Erik
Mitglied: emeriks
emeriks 25.04.2018 um 17:22:29 Uhr
Goto Top
Wie kann ich jetzt pro OU (1 OU ist eine Abt) eine eigene .csv-Datei erstellen, in der alle Nutzer und deren Gruppen drin sind?
Bis jetzt habe ich nur eine kpl. .csv-Datei mit allen Nutzern und deren Gruppen.
Verlinke bitte die alte Frage dazu mit dieser! Sonst antworten Dir die Kollegen noch "umsonst" parallel.

Erkläre mir bitte zuerst das mit der Beschränkung auf die ersten 4 Zeichen. Was hat das mit der Erstellung dieser einzelnen CSV zu tun?
Mitglied: colinardo
Lösung colinardo 25.04.2018 aktualisiert um 18:39:19 Uhr
Goto Top
Servus oesi.
Zitat von @oesi1989:
Wie kann ich jetzt pro OU (1 OU ist eine Abt) eine eigene .csv-Datei erstellen, in der alle Nutzer und deren Gruppen drin sind?
Bis jetzt habe ich nur eine kpl. .csv-Datei mit allen Nutzern und deren Gruppen.
$exportpath = 'C:\temp'  
$searchbase = "OU=Neues_FS,..."   
Get-ADOrganizationalUnit -F * -Searchbase $searchbase -SearchScope Onelevel | %{
    Get-ADuser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel | select SamAccountName, @{n='Groups';e={(Get-ADPrincipalGroupMembership $_.SamAccountName).Name -join ','}} | export-csv "$exportpath\$($_.Name).csv" -NoType -Delimiter ";" -Encoding UTF8  
}
Grüße Uwe
Mitglied: oesi1989
oesi1989 26.04.2018 um 08:02:30 Uhr
Goto Top
Habe das andere mal als gelöst gesetzt.
Mitglied: oesi1989
oesi1989 26.04.2018 aktualisiert um 12:20:10 Uhr
Goto Top
Hallo Uwe,
vielen Dank, das Script funktioniert.
Wie kann ich das noch formatieren, das pro Zeile jeweils der Nutzer und 1 Ordner von ihm angezeigt werden und dahinter das Recht steht, was er hat?

Hier nochmal der Code, der auch oben schon dabei ist, der alles formatiert.
(Get-Content $path) -replace "CN=","" | out-file $path   
(Get-Content $path) -replace '(?s),OU=.+' | out-file $path   
(Get-Content $path) | Foreach-Object { If ($_ -match "_C_")  { $_ + "`",`"Ändern`""}  else { $_ } }| Set-Content $path  
(Get-Content $path) | Foreach-Object { If ($_ -match "_R_")  { $_ + "`",`"Lesen`""}  else { $_ } }| Set-Content $path  
(Get-Content $path) -replace "_C_","_" | out-file $path   
(Get-Content $path) -replace "_R_","_" | out-file $path  

Es soll quasi so aussehen pro Zeile:
User1,"PersNr","Abt1_Ordner1","Ändern"
User1,"PersNr","Abt1_Ordner2","Ändern"
User2,"PersNr","Abt2_Ordner1","Ändern"
User2,"PersNr","Abt2_Ordner2","Ändern"


Jede OU (z.B. 24_01) hat 2 Unter-OUs. Einmal 1 Gruppen-OU und 1 Nutzer-OU
Mitglied: oesi1989
oesi1989 26.04.2018 um 08:18:38 Uhr
Goto Top
Ja, die OUs sind natürlich geschützt. Aber wo steht denn was von Löschen?!
Mitglied: erikro
erikro 26.04.2018 um 08:24:48 Uhr
Goto Top
Zitat von @oesi1989:

Ja, die OUs sind natürlich geschützt. Aber wo steht denn was von Löschen?!

Das habe ich wohl falsch verstanden. Ich dachte, Du willst die OU löschen und nicht einen Teil des Namens in der Ausgabe. ;)
Mitglied: emeriks
emeriks 26.04.2018 um 08:39:54 Uhr
Goto Top
Wie kann ich das noch formatieren, das pro Zeile jeweils der Nutzer und 1 Ordner von ihm angezeigt werden und dahinter das Recht steht, was er hat?
Gibt man dem Teufel den kleinen Finger ....

Was kommt danach? Und danach? Und noch nicht mal alle Fragen beantwortet, welche vorher gestellt wurden ....
Mitglied: oesi1989
oesi1989 26.04.2018 um 08:52:26 Uhr
Goto Top
Zitat von @emeriks:
Erkläre mir bitte zuerst das mit der Beschränkung auf die ersten 4 Zeichen. Was hat das mit der Erstellung dieser einzelnen CSV zu tun?

Die OUs heißen unterschiedlich: 01_01,...40_01_Controlling.
Das war dann mehr nice to know
Mitglied: oesi1989
oesi1989 26.04.2018 um 08:53:51 Uhr
Goto Top
Zitat von @emeriks:
Wie kann ich das noch formatieren, das pro Zeile jeweils der Nutzer und 1 Ordner von ihm angezeigt werden und dahinter das Recht steht, was er hat?
Gibt man dem Teufel den kleinen Finger ....
Was kommt danach? Und danach? Und noch nicht mal alle Fragen beantwortet, welche vorher gestellt wurden ....

Ja entschuldigung. Ich habs ja mit dem Script, was ich oben noch mal geschrieben habe, probiert, aber es ging leider nicht, deswegen die Frage.
Mitglied: oesi1989
oesi1989 26.04.2018 um 16:08:58 Uhr
Goto Top
Hat evtl. jmd noch einen Tipp, wie ich die Ausgabe formatieren kann?
Mitglied: 136037
136037 26.04.2018 aktualisiert um 16:40:44 Uhr
Goto Top
Niemals editiert man eine CSV aus Powershell nochmal mit Get-Content das ist absoluter Schwachfug und macht man nicht, das macht man immer vorher mit der Modifikation und Hinzufügen der Objekte wenn man es vernünftig macht, hier siehst du wie man sowas macht: Csv-Datei mit neuen Feldern und Werten ergänzen !
Du hättest mehr Erfolg wenn du dein gesamtes Vohaben erst mal vernünftig in ganzen Sätzen formulieren würdest und nicht so schemenhaft in Brocken hier hin wirfst! So versteht das keine Sau. Irgend ein Ordner hinzufügen ? Welcher? und Zugriff? Welcher von wo?

=> Wie Du eine Frage richtig stellst
Mitglied: emeriks
emeriks 26.04.2018 um 22:58:53 Uhr
Goto Top
Zitat von @136037:
Du hättest mehr Erfolg wenn du dein gesamtes Vohaben erst mal vernünftig in ganzen Sätzen formulieren würdest
DIE Grundvoraussetzung des Programmierens.
Mitglied: oesi1989
oesi1989 27.04.2018 aktualisiert um 08:15:33 Uhr
Goto Top
Hallo,
ich habe bis jetzt ein Script, der in 1 csv-Datei alle Nutzer, die Gruppen und das Zugriffsrecht steht.
Es sieht so aus:

User1,"PersNr","Abt1_Ordner1","Ändern"
User1,"PersNr","Abt1_Ordner2","Lesen"
User2,"PersNr","Abt2_Ordner1","Ändern"
User2,"PersNr","Abt2_Ordner2","Ändern"

Der Code dazu:
Import-Module ActiveDirectory
$path = "C:\temp\AnlageA\test.csv"  
$alleGruppen = get-adgroup -filter * -SearchBase "OU=Neues_FS,OU=01_Benutzer_Gruppen,DC=bwkrhs,DC=kob,DC=zsanbw,DC=de"  
foreach($Gruppe in $alleGruppen)
{
    $Members = get-adgroupmember -identity $Gruppe|Select-Object Name,SamAccountName,GroupName|Foreach-Object {
    $_.GroupName = $Gruppe
    $_    
    }| Export-CSV $path -Append -NoTypeInformation -Encoding UTF8
}

(Get-Content $path) -replace "CN=","" | out-file $path   
(Get-Content $path) -replace '(?s),OU=.+' | out-file $path   
(Get-Content $path) | Foreach-Object { If ($_ -match "_C_")  { $_ + "`",`"Ändern`""}  else { $_ } }| Set-Content $path  
(Get-Content $path) | Foreach-Object { If ($_ -match "_R_")  { $_ + "`",`"Lesen`""}  else { $_ } }| Set-Content $path  
(Get-Content $path) -replace "_C_","_" | out-file $path   
(Get-Content $path) -replace "_R_","_" | out-file $path  

Ich würde aber gerne pro OU (=1 Abteilung) eine csv-Datei erstellen lassen, damit das filtern nicht mehr solange dauert.
Dazu hat der Nutzer "colinardo" bereits folgendes Script erstellt:

$exportpath = 'C:\temp'  
$searchbase = "OU=Neues_FS,..."    
Get-ADOrganizationalUnit -F * -Searchbase $searchbase -SearchScope Onelevel | %{ Get-ADuser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel | select SamAccountName, @{n='Groups';e={(Get-ADPrincipalGroupMembership $_.SamAccountName).Name -join ','}} | export-csv "$exportpath\$($_.Name).csv" -NoType -Delimiter ";" -Encoding UTF8   
}

Die Dateien werden auch pro OU erstellt, aber ich würde gerne die .csv-Datei so formatieren/aussehen lassen wie oben.
Im Moment wird es so angezeigt, dass alle Rechte in eine Zeile geschrieben werden, was ein bisschen unübersichtlich wird.
Mitglied: oesi1989
oesi1989 27.04.2018 aktualisiert um 08:19:31 Uhr
Goto Top
Zitat von @136037:
Niemals editiert man eine CSV aus Powershell nochmal mit Get-Content das ist absoluter Schwachfug und macht man nicht, das macht man immer vorher mit der Modifikation und Hinzufügen der Objekte wenn man es vernünftig macht, hier siehst du wie man sowas macht: Csv-Datei mit neuen Feldern und Werten ergänzen !

Ja, das kann ja vielleicht sein, aber ich habe dieses Script nicht geschrieben und soll es jetzt modifizieren.
Mitglied: 136037
136037 27.04.2018 um 08:24:05 Uhr
Goto Top
Zum Geier was für Rechte?? WOHER? Und deine CSV stimmt überhaupt nicht mit deinem Skript überein, du Exportierst da Name und Samaccountname und in deiner CSV steht da PersNr.???
Also mehr durcheinander geht nicht!
Mitglied: 136037
136037 27.04.2018 aktualisiert um 08:26:02 Uhr
Goto Top
Ja, das kann ja vielleicht sein, aber ich habe dieses Script nicht geschrieben und soll es jetzt modifizieren.
Aha Azubi ABM Massnahme .... Hol dir ein Buch und bring es dir von Anfang an bei, da hast du mehr davon und gaukelst deinem Vorgesetzten auch nicht nicht vorhandenes Wissen vor.
Mitglied: emeriks
emeriks 27.04.2018 aktualisiert um 08:30:36 Uhr
Goto Top
Im Moment wird es so angezeigt, dass alle Rechte in eine Zeile geschrieben werden, was ein bisschen unübersichtlich wird.
Das sind keine Rechte, was @colinardo Dir da exportieren lässt, sondern Gruppenmitgliedschaften. Wenn Du diese als Indiz für Berechtigungen auf irgendeine Ressource interpretieren kannst/willst, dann ist das Deine Sache.

Weiterhin sehe ich es weiter so: Wir kommen vom Hundertstel ins Tausendstel. Und das wird wohlmöglich immer weiter so gehen ...
Warscheinlich wäre es viel einfacher, wenn Du eine Frage als gelöst gennzeichnest, wenn Sie beantwortet ist, und dann - für Dein nächstes Detail (Level) - eine neue Frage eröffnest.

So wie es jetzt ist, ist das nur ein Rumführen an der Stange!