pixel0815
Goto Top

Liste mit Nachnamen - per PS Skript sollen daraus die SamAccountName ausgelesen werden

Hallo zusammen,
$users = Get-Content "C:\user.txt"  

foreach ($user in $users){
Get-ADUser -Filter "Name -eq '$user'" | Select-Object name, samaccountname  
}
ich dachte das so die SamAccountname ermittelt werden kann, aber irgendwie klappt das nicht.
Aus der Liste wird nur ein einziger NAme ermittelt. Das stimmt aber nicht.
Was mache ich da falsch?
Gruß
Heiko

Content-Key: 255252

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

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: colinardo
colinardo 19.11.2014 aktualisiert um 09:47:47 Uhr
Goto Top
Moin Heiko,
wenn du Nachnamen in deiner Textdatei stehen hast ist das Feld Name suboptimal nehme dazu im Filter Surname = Nachname.
Get-ADUser -Filter "Surname -eq '$user'" | Select-Object name, samaccountname   
Ansonsten hast du eventuell abschließende oder vorausgehende Leerzeichen in deiner Textdatei, die du dann noch mit trim() entfernen müsstest, denn bei -eq muss der Nachname exakt übereinstimmen (bis auf Groß- und Kleinschreibung, welche hier egal ist)

Grüße Uwe
Mitglied: pixel0815
pixel0815 19.11.2014 aktualisiert um 10:11:39 Uhr
Goto Top
Hallo Uwe,

das Feld war wirklich Suboptimal.
Es funktioniert. Jetzt wollte ich das ganze noch als csv raushauen aber da kommt gar nix außer die Überschriften?

$export = @()
$pathCSV = "C:\Test.csv"  
foreach ($user in $users){
    Get-ADUser -Filter "Surname -eq '$user'" -Properties name,SamAccountName | Select-Object name, samaccountname  
	$export += New-Object PSObject -Property @{'Name'=$user.Name;'SamAccountName'=$user.samaccountname;}  
}
$export | export-csv $pathCSV -Delimiter ";" -NoTypeInformation -Encoding UTF8  

Wenn ich beim Filter noch den FirstName hinzunehme, wie kann ich das am geschicktesten machen?
Mitglied: colinardo
colinardo 19.11.2014 aktualisiert um 11:29:05 Uhr
Goto Top
Zitat von @pixel0815:
Es funktioniert. Jetzt wollte ich das ganze noch als csv raushauen aber da kommt gar nix außer die Überschriften?
wohl noch keinen Kaffee gehabt face-smile
In der Variablen $user steht bei dir nur die Zeile deiner Textdatei, also der Name, sie ist also kein Objekt face-wink Das ist der Grund !!
Machst du bspw. so:
$export = @()
$pathCSV = "C:\Test.csv"  
foreach ($user in $users){
    Get-ADUser -Filter "Surname -eq '$user'" -Properties Name | %{  
        $export += New-Object PSObject -Property @{'Name'=$_.Name;'SamAccountName'=$_.samaccountname;}  
    }
}
$export | export-csv $pathCSV -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Wenn ich beim Filter noch den FirstName hinzunehme, wie kann ich das am geschicktesten machen?
Aus der Textdatei eine CSV-Datei machen in der Nachname und Vorname z.B. mit Semikolon getrennt sind:
Nachname;Vorname
Mustermann;Max
Musterfrau;Henriette
und dann so auslesen: (in diesem Fall ist $user dann ein Objekt face-wink, weil die Textdatei als Objekt mit Import-CSV eingelesen wurde und die Überschriften die Eigenschaften darstellen)
$csvdata = Import-CSV 'C:\Data.csv' -Delimiter ";"  
$pathExport = "C:\Export.csv"  
$export = @()
foreach ($user in $csvData){
    $vorname = $user.Vorname
    $nachname = $user.Nachname
    Get-ADUser -Filter {(Surname -eq $nachname) -and (GivenName -eq $vorname)} -Properties Name | %{
        $export += New-Object PSObject -Property @{'Name'=$_.Name;'Vorname'=$_.GivenName;'SamAccountName'=$_.samaccountname;}  
    }
}
$export | export-csv $pathExport -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Grüße Uwe

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci. Nicht das das hier wieder zu einem "Multi-Question-Thread" verkommt.
Mitglied: pixel0815
pixel0815 19.11.2014 um 10:59:59 Uhr
Goto Top
Kannst du dir diese Meldung erklären?
Die CSV Datei ist so aufgebaut wie du es beschrieben hast.
Get-ADUser : Eigenschaft "Nachname" wurde im Objekt vom Typ "System.Management.Automation.PSCustomObject" nicht gefunden.  
In C:\Name2SamAccount.ps1:5 Zeichen:5
+     Get-ADUser -Filter {(Surname -eq $user.Nachname) -and (GivenName -eq $user.V ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-ADUser], ArgumentException
    + FullyQualifiedErrorId : Eigenschaft "Nachname" wurde im Objekt vom Typ "System.Management.Automation.PSCustomObject" nicht gefunden.,Microsoft.ActiveDirectory.Management.Commands.GetADUser  
Mitglied: colinardo
colinardo 19.11.2014 aktualisiert um 11:01:29 Uhr
Goto Top
du hast sehr wahrscheinlich keine Überschriftenzeile in der CSV face-wink
Mitglied: pixel0815
pixel0815 19.11.2014 aktualisiert um 11:18:02 Uhr
Goto Top
Hmm..

eigentlich schon oder? Wenns so aussieht:

Nachname;Vorname
Nachname1;Vorname1

Wenn ich über den PowerGUI Skript Editor schaue im Debugmodus ob $user gefüllt ist, dann sehe ich dort das Nachname und Vorname korrekt gefüllt sind.
Wieso kann er das nicht in dem Filter benutzen? face-sad
Mitglied: colinardo
colinardo 19.11.2014 um 11:30:08 Uhr
Goto Top
Ah, sorry da musst du sie vorher Variablen zuweisen und dann diese benutzen. Im Filter lassen sich Eigenschaften nicht auflösen. Habs oben korrigiert.
Mitglied: pixel0815
pixel0815 19.11.2014 um 11:56:53 Uhr
Goto Top
Ja perfekt :o) Ich hab schon rumgespielt mit verschiedenen Hochkommas und " " ... aber ohne Variable geht halt nix.

Das klappt wunderbar.
Kann ich da einfach ein

Else{
  write-host 'User existiert nicht'  
}

an der stelle

foreach ($user in $csvData){
    $vorname = $user.Vorname
    $nachname = $user.Nachname
    Get-ADUser -Filter {(Surname -eq $nachname) -and (GivenName -eq $vorname)} -Properties Name | %{
        $export += New-Object PSObject -Property @{'Name'=$_.Name;'Vorname'=$_.GivenName;'SamAccountName'=$_.samaccountname;}  
    } <<<< Hier

setzen? Oder muss das alles umgebaut werden. Es wäre ja toll zu wissen welche Benutzer er nicht findet :o)))))))))))))))))))))))))))))
Mitglied: colinardo
Lösung colinardo 19.11.2014 aktualisiert um 16:06:49 Uhr
Goto Top
och mönsch, das habe hier im Forum schon so oft gepostet ....

Ausnahmsweise nochmal:
$csvdata = Import-CSV 'C:\Data.csv' -Delimiter ";"  
$pathExport = "C:\Export.csv"  
$export = @()
foreach ($user in $csvData){
    $vorname = $user.Vorname
    $nachname = $user.Nachname
    $obj = Get-ADUser -Filter {(Surname -eq $nachname) -and (GivenName -eq $vorname)} -Properties Name
    if ($obj){
        $export += New-Object PSObject -Property @{'Name'=$obj.Name;'Vorname'=$obj.GivenName;'SamAccountName'=$obj.samaccountname;}  
    } else {
       write-host "User '$vorname , $nachname' wurde nicht gefunden!" -ForegroundColor Red  
    }
}
$export | export-csv $pathExport -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Mitglied: pixel0815
pixel0815 19.11.2014 um 16:06:56 Uhr
Goto Top
Danke dir :o)