lele679
Goto Top

Powershell Get-ADUser aus Array

Hallo zusammen,

ich habe folgende Befehle:

$a = Get-Aduser -Identity //Username// -properties *

$b=Get-ADUser($a.Manager)

$b.Name
//Nachname, Vorname//

Dieser Befehl gibt mir den Vorgesetzten eines Users als String aus.

Nun habe ich zwei Arrays, $User und $Manager, in $User stehen Usernamen, der Array $Manager ist leer und ich möchte den $User Array durchgehen, abfragen und die Antwort in $Manager schreiben.

Vorgestellt hatte ich es mir wie folgt:

$User = $User | Get-ADUser -Properties *

$b = Get-ADUser($User.Manager)

$Manger = $b.Name

Oder:

foreach{ $Manager in $User)
{
$User = $User | Get-ADUser -Properties *

$Manager = Get-ADUser($User.Manager)

$Manger = $Manager.Name
}

Will aber alles nicht funktionieren face-sad
Habt ihr vielleicht eine Idee?


PS: Ich hatte vorher mal diesen Befehl:
$Manager = $User | Get-ADUser -Properties * -ErrorAction SilentlyContinue | select manager
Der gibt mir allerdings ein Objekt und kein String zurück. Ich benötige die Ausgabe aber als String.

VG
lele

Content-ID: 611150

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

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

emeriks
emeriks 08.10.2020 aktualisiert um 11:05:16 Uhr
Goto Top
Hi,
in etwa so

$Manager=@{}
$Users = Get-ADUser -Filter * -Properties *
$Users | % {
  If($_.Manager) {
    $Manager[$_.Name] = (Get-ADUser $_.Manager).Name
  }
  Else {
    $Manager[$_.Name] = "kein"  
  }
}
$Manager

E.

Edit: Tippfehler korrigiert
lele679
lele679 08.10.2020 aktualisiert um 15:11:56 Uhr
Goto Top
Danke für deine Hilfe!

Funktioniert leider nicht. Wenn ich den Befehl (nahezu) 1:1 ausführe bekomm ich 20.000+ Fehlerzeilen. Mein $User Array ist zwar befüllt, trotzdem frägt der Befehl alle Einträge im AD ab.

Um den Befehl besser verstehen zu können, kannst du mir erklären was das "%" in Zeile 3 macht? Ich habe dazu nichts in meinem dicken "Windows PowerShell Cookbook" gefunden.
emeriks
emeriks 08.10.2020 aktualisiert um 16:13:46 Uhr
Goto Top
Zitat von @lele679:
Wenn ich den Befehl (nahezu) 1:1 ausführe
Prima. Sieht gut aus!
bekomm ich 20.000+ Fehlerzeilen.
Hm... Weil ein Fehler drin ist?
Mein $User Array ist zwar befüllt, trotzdem frägt der Befehl alle Einträge im AD ab.
Ja, ja. Fangeball.
Um den Befehl besser verstehen zu können, kannst du mir erklären was das "%" in Zeile 3 macht? Ich habe dazu nichts in meinem dicken "Windows PowerShell Cookbook" gefunden.
Unwahrscheinlich!

Klare Angaben, klare Fragen. Dann kannst Du auch Hilfe erwarten.

PS:
Ich will mal nicht so sein.
Was passiert denn, wenn Du ausnahmsweise mal meinen o.g. Code 1:1 ausführst?
lele679
lele679 09.10.2020 aktualisiert um 15:34:43 Uhr
Goto Top
Unwahrscheinlich!
face-sad


PS:
Ich will mal nicht so sein.
Was passiert denn, wenn Du ausnahmsweise mal meinen o.g. Code 1:1 ausführst?

Zehntausende Fehlerzeilen. Mit "(nahezu)" meinte ich, dass ich den Array "$Manager" mit runden anstatt mit geschweiften klammern anlege und mein Array für die User "$User" heißt und nicht "$Users". Sind aber kleinigkeiten die auch mit "(nahezu)" nicht erwähnenswert gewesen wären, sorry dafür.


Hier ein Beispiel für den Fehler (ist jedes mal der gleich):

Der Wert "//User//" kann nicht in den Typ "System.Int32" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:8 Zeichen:5
+     $Manager[$_.Name] = "kein"  
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) , RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger


Und um meine Frage nochmal klarer zu formulieren:

Ich habe folgenden funktionierenden Befehl:
$a = Get-Aduser -Identity //Username// -properties *

$b=Get-ADUser($a.Manager)

$b.Name
//Nachname, Vorname//

Nun möchte ich mir aber zu mehreren Usern den Manager als String ausgeben lassen und nicht jeden User manuell in meinen Befehl eintippen.
Meine Usernamen stehen in einem Array "$User".

Wie übergebe ich den Array "$User" an meinen Befehl, frage jedes einzelne Element des Arrays ab und speicher mir die Ausgabe in einem Array "$Manager"?
emeriks
emeriks 09.10.2020 um 15:56:06 Uhr
Goto Top
Ich helfe Dir erst weiter, wenn Du mir hier schreibst, was passiert, wenn Du meinen Code 1:1 unverändert ausführst.
filippg
filippg 10.10.2020 aktualisiert um 00:22:39 Uhr
Goto Top
Hallo,

emeriks Code liefert keinen Array mit Manager, sondern eine HashTable, bei der der User der Key ist und der Manager der Wert.
Hier liegt wohl auch der Fehler für "Der Wert "User" kann nicht in den Typ "System.Int32" konvertiert werden.". Ich könnte fast wetten, bei dir steht "$Manager=@()". Da hat Emeriks etwas anderes.
PS: Ich hatte vorher mal diesen Befehl:
$Manager = $User | Get-ADUser -Properties * -ErrorAction SilentlyContinue | select manager
Der gibt mir allerdings ein Objekt und kein String zurück. Ich benötige die Ausgabe aber als String.
Was willst du denn jetzt? Einen Array oder einen String? Aber wenn das dein einziges Problem ist, und der Befehl sonst funktioniert:
Mit
$Manager = $User  | Get-ADUser -Properties * -ErrorAction SilentlyContinue | select manager
sollte dir dann
$Manager.manager
einen Array liefern, und
$Manager.manager -join ", "  
einen String.

Ich würde das noch etwas Optimieren. So wie es da steht, hast du die Manager ggf Mehrfach enthalten. Aus dem "select manager" sollte man ein "select manager -unique" machen. Und am besten auch gleich nur die finden, die einen Manager gesetzt haben. Und gaaanz wichtig: nicht alle Properties abfragen, sondern nur das eine benötigte.
$Manager = $User |  %{Get-ADUser -Filter "manager -like '*' -and Name -eq '$_'" -Properties manager -ErrorAction SilentlyContinue} | select manager -unique  
Ungetestet.

Grüße

Filipp
emeriks
emeriks 12.10.2020 um 08:00:02 Uhr
Goto Top
@filippg
Dann hat er eine Liste von Managern, weiß aber nicht, wer wessen ist.
filippg
filippg 12.10.2020 um 23:19:40 Uhr
Goto Top
@emeriks: das ist mir sehr wohl bewusst. Aber die Problemstellung ist so offen formuliert, dass ich das als Fragestellung verstanden habe face-smile
However, lele scheint das Interesse verloren zu haben & hält es nicht für nötig, zu antworten.