Powershell AD auslesen Frage
Hallo zusammen,
ich habe derzeit folgendes Problem und hoffe das mir jemand helfen kann.
Ich habe eine GUI (WPF) mit einer mehrzeiligen Textbox wo untereinander die "Samaccountname" stehen die in ein Array geschrieben werden. Das funktioniert auch soweit.
In eine weitere Textbox (die disabled ist) soll dann angezeigt werden welchen account es gibt und welchen nicht.
ich habe schon so viele Varianten getestet, im großen und ganzen geht es um den Code unten.
$enguser.Text kommt aus der GUI
$info.Text ist die Ausgabebox
als Zusatzfrage vielleicht noch, wie kann ich das händeln wenn es einen User im AD mehrfach gibt bzw. MuellerTho und MuellerTho01? das ist am Anfang immer nicht ganz klar bei welchem wir mittlerweile sind. und ich würde erst mal nur MuellerTho eingeben was dann aber auf einen fehler laufen würde. Ich hoffe ihr versteht was ich meine?!
viele Grüße
Florian
ich habe derzeit folgendes Problem und hoffe das mir jemand helfen kann.
Ich habe eine GUI (WPF) mit einer mehrzeiligen Textbox wo untereinander die "Samaccountname" stehen die in ein Array geschrieben werden. Das funktioniert auch soweit.
In eine weitere Textbox (die disabled ist) soll dann angezeigt werden welchen account es gibt und welchen nicht.
ich habe schon so viele Varianten getestet, im großen und ganzen geht es um den Code unten.
$enguser.Text kommt aus der GUI
$info.Text ist die Ausgabebox
foreach ($var in $enguser.Text){
$erg += (Get-ADuser $var | Select-Object samaccountname)
if ($erg.samaccountname -eq ""){
$info.Text += 'kein ADuser vorhanden'
}
else {
$info.Text += $erg.samaccountname
}
}
als Zusatzfrage vielleicht noch, wie kann ich das händeln wenn es einen User im AD mehrfach gibt bzw. MuellerTho und MuellerTho01? das ist am Anfang immer nicht ganz klar bei welchem wir mittlerweile sind. und ich würde erst mal nur MuellerTho eingeben was dann aber auf einen fehler laufen würde. Ich hoffe ihr versteht was ich meine?!
viele Grüße
Florian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 489343
Url: https://administrator.de/contentid/489343
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
13 Kommentare
Neuester Kommentar
Hi,
wie lautet denn die erste Frage?
Zweite Frage:
Was willst Du da behandeln? MuellerTho und MuellerTho01 sind zwei verschiedene Benutzer. Wo kommt es da zum Konflikt?
Und was zum Geier willst Du denn wirklich realisieren? Was willst Du am Ende wissen? Was soll herauskommen? Was soll überprüft werden?
E.
wie lautet denn die erste Frage?
Zweite Frage:
Was willst Du da behandeln? MuellerTho und MuellerTho01 sind zwei verschiedene Benutzer. Wo kommt es da zum Konflikt?
Und was zum Geier willst Du denn wirklich realisieren? Was willst Du am Ende wissen? Was soll herauskommen? Was soll überprüft werden?
E.
Moin,
Was macht das + da? Wenn ein User gefunden wurde, dann steht er in $erg drin. Wenn Du nun mit += die Zuweisung machst, dann bleibt der erste User auf jeden Fall drin. Also nur ein =.
Außerdem solltest Du vor der Zuweisung die Variable leeren. Denn, wenn der Befehl get-aduser schief läuft, weil es den User nicht gibt, wird die Variable nicht überschrieben. Hier mal das Ganze als Beispiel:
Hier dann der korrigierte Code:
hth
Erik
Zitat von @ADMWoNh:
>
> foreach ($var in $enguser.Text){
>
> $erg += (Get-ADuser $var | Select-Object samaccountname)
> [...]
> if ($erg.samaccountname -eq "")
>
Was macht das + da? Wenn ein User gefunden wurde, dann steht er in $erg drin. Wenn Du nun mit += die Zuweisung machst, dann bleibt der erste User auf jeden Fall drin. Also nur ein =.
Außerdem solltest Du vor der Zuweisung die Variable leeren. Denn, wenn der Befehl get-aduser schief läuft, weil es den User nicht gibt, wird die Variable nicht überschrieben. Hier mal das Ganze als Beispiel:
PS H:\> $not = @()
PS H:\> $not += get-aduser user1
PS H:\> $not.samaccountname
user1
PS H:\> $not += get-aduser user2
PS H:\> $not.samaccountname
user1
user2
PS H:\> $not += get-aduser blah
get-aduser : Unter "*****" kann kein Objekt mit der ID "blah" gefunden werden.
In Zeile:1 Zeichen:8
+ $not = get-aduser blah
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (blah:ADUser) [Get-ADUser], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
icrosoft.ActiveDirectory.Management.Commands.GetADUser
PS H:\> $not.samaccountname
user1
user2
PS H:\> $not = ""
PS H:\> $not.samaccountname
PS H:\> $not = get-aduser blah
get-aduser : Unter "*****" kann kein Objekt mit der ID "blah" gefunden werden.
In Zeile:1 Zeichen:8
+ $not = get-aduser blah
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (blah:ADUser) [Get-ADUser], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
icrosoft.ActiveDirectory.Management.Commands.GetADUser
PS H:\> $not.samaccountname
PS H:\> $not = get-aduser user1
PS H:\> $not.samaccountname
user1
PS H:\> $not = get-aduser user2
PS H:\> $not.samaccountname
user2
PS H:\> $not = get-aduser blah
get-aduser : Unter "*****" kann kein Objekt mit der ID "blah" gefunden werden.
In Zeile:1 Zeichen:8
+ $not = get-aduser blah
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (blah:ADUser) [Get-ADUser], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
icrosoft.ActiveDirectory.Management.Commands.GetADUser
PS H:\> $not.samaccountname
user2
PS H:\> $not =""
PS H:\> $not = get-aduser blah
get-aduser : Unter "*****" kann kein Objekt mit der ID "blah" gefunden werden.
In Zeile:1 Zeichen:8
+ $not = get-aduser blah
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (blah:ADUser) [Get-ADUser], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
icrosoft.ActiveDirectory.Management.Commands.GetADUser
PS H:\> $not.samaccountname
PS H:\>
Hier dann der korrigierte Code:
foreach ($var in $enguser.Text){
$erg=""
$erg = (Get-ADuser $var | Select-Object samaccountname)
if ($erg.samaccountname -eq ""){
$info.Text += 'kein ADuser vorhanden'
}
else {
$info.Text += $erg.samaccountname
}
}
hth
Erik
Moin,
Wie der Kollege @emeriks schon sagte, wird wohl in Deiner Variablen kein Array, sondern ein String stehen, der erst aufgesplittet werden muss. Hilfreich wäre hier, wenn Du uns nicht nur Fragmente Deines Skripts, sondern das ganze posten könntest. Wir wissen so nämlich nicht, was denn in $enguser so drinsteht. Ansonsten wird das so in ein Array umgewandelt:
Dabei wird das Trennzeichen gelöscht. Also wenn die Daten z. B. so vorliegen:
Dann wäre der Split so:
Aufgepasst! Häufig muss man die Daten dann auch noch trimmen, um ungewünschte Leerzeichen oder Zeilenumbrüche am Ende des Datums zu entfernen.
hth
Erik
Zitat von @ADMWoNh:
Wie kann ich die Daten aus der Textbox denn als Array speichern? denn obwohl es alle Daten inne hat ist es kein Array.
Wie kann ich die Daten aus der Textbox denn als Array speichern? denn obwohl es alle Daten inne hat ist es kein Array.
> $enguser.Text -is [array]
> False
>
Wie der Kollege @emeriks schon sagte, wird wohl in Deiner Variablen kein Array, sondern ein String stehen, der erst aufgesplittet werden muss. Hilfreich wäre hier, wenn Du uns nicht nur Fragmente Deines Skripts, sondern das ganze posten könntest. Wir wissen so nämlich nicht, was denn in $enguser so drinsteht. Ansonsten wird das so in ein Array umgewandelt:
$array_from_string = $string.split("[Trennzeichen]")
Dabei wird das Trennzeichen gelöscht. Also wenn die Daten z. B. so vorliegen:
$string = "user1,user2,user3"
Dann wäre der Split so:
$array = $string.split(",")
Aufgepasst! Häufig muss man die Daten dann auch noch trimmen, um ungewünschte Leerzeichen oder Zeilenumbrüche am Ende des Datums zu entfernen.
hth
Erik
Moin,
Ja und das Array hat ein Element, in dem die drei Usernamen mit Zeilenumbruch dazwischen stehen. Du musst der PS schon sagen, an welchem Zeichen sie splitten soll.
hth
Erik
P. S.: Dass die PS da aber auch keine Fehlermeldung auswirft. Sowas wie "zu wenig Argumente für SPLIT()" ...
Zitat von @ADMWoNh:
Hier einmal wie es aus der Textbox kommt:
Dann der Splitt um es in ein array umzuwandeln
Hier einmal wie es aus der Textbox kommt:
> $enguser.Text
> user1
> user2
> user3
>
> $enguser.Text -is [array]
> False
>
> $erg = $enguser.text.split()
>
> $erg
> user1
>
> user2
>
> user3
>
> $erg -is [array]
> True
>
Ja und das Array hat ein Element, in dem die drei Usernamen mit Zeilenumbruch dazwischen stehen. Du musst der PS schon sagen, an welchem Zeichen sie splitten soll.
$erg = $erguser.text.split("`n")
hth
Erik
P. S.: Dass die PS da aber auch keine Fehlermeldung auswirft. Sowas wie "zu wenig Argumente für SPLIT()" ...
Ja, nicht bloß Fetzen liefern!
Jetzt ist es plötzlich Variable "$user". Gestern war es noch "$erg.samaccountname". Morgen ist es "$sonstwas".
Vollständiger Code-Block --> Aussicht auf zielgerichtete Hilfe
Jetzt ist es plötzlich Variable "$user". Gestern war es noch "$erg.samaccountname". Morgen ist es "$sonstwas".
Vollständiger Code-Block --> Aussicht auf zielgerichtete Hilfe
Moin,
ich dachte, ich hätte das hier schon erwähnt. War wohl ein anderer Thread.
Solche Inkonsistenzen in der Benennung der Variablen kann man mit einem einfachen
sehr leicht erkennen. Dann läuft das Skript nämlich nicht einfach durch und das foreach wird dabei nicht abgearbeitet (das Array ist ja nicht vorhanden), sondern es wird angehalten und eine Fehlermeldung ausgeworfen, die besagt, dass man eine nicht vorhandene Variable benutzen will.
hth
Erik
ich dachte, ich hätte das hier schon erwähnt. War wohl ein anderer Thread.
Zitat von @emeriks:
Zeilen 70 und 72!
Das Array landet im $erg. Also musst Du dieses auch beim Foreach benutzen.
Zeilen 70 und 72!
Das Array landet im $erg. Also musst Du dieses auch beim Foreach benutzen.
Solche Inkonsistenzen in der Benennung der Variablen kann man mit einem einfachen
set-psdebug -strict
sehr leicht erkennen. Dann läuft das Skript nämlich nicht einfach durch und das foreach wird dabei nicht abgearbeitet (das Array ist ja nicht vorhanden), sondern es wird angehalten und eine Fehlermeldung ausgeworfen, die besagt, dass man eine nicht vorhandene Variable benutzen will.
hth
Erik