celiko
Goto Top

PowerShell - Get-ADUser - Informationen auslesen und kopieren

Schönen guten Tag liebe Administrator-Community,

um das Offboarding ein wenig zu erleichertn schreibe ich derzeit ein PS-Script, das einige Benutzerinformationen ausließt und kopiert.
Im späteren Verlauf sollen ebenfalls die ausgelesenen Daten beim Benutzer gelöscht werden und die Informationen sollen unter Telephones --> Notes eingefügt werden.

Dabei habe ich folgendes Problem:
Wenn bei einem Benutzer der Manager nicht hinterlegt ist erhalte ich eine Fehlermeldung.
Ich habe probeweise versucht eine IF-Abfrage ausführen, ob der Benutzer überhaupt einen Manager hat. Bislang leider ohne Erfolg :/

Vielleicht kann mir hier jemand einen Lösungsansatz nennen, damit keine Fehlermeldung auftritt, wenn kein Manager beim Benutzer hinterlegt ist...?

Hier das Script bis jetzt:

do{$inputusername = Read-Host -Prompt "Bitte geben Sie den pre Win2000 Benutzernamen ein!" #Eingabe des Usernames  
#Abfrage, ob der Bentuzer, der eingegeben wurde, exisitert. Wenn nicht wird das Script von vorne gestartet.
if (@(Get-ADUser -Filter { SamAccountName -eq $inputusername }).Count -eq 0) {
    Write-Warning -Message "Benutzer $inputusername existiert nicht. Geben Sie bitte einen Benutzer an, der existiert."  
    }
    else {
        Write-Host "Informationen des Benutzers '$inputusername' werden abgerufen"  
        ###ABFRAGE der Benutzerinformationen###
        $userresult = Get-ADUser -Identity $inputusername -Properties Telephonenumber,Mobilephone, EmailAddress, Pager, Initials, Manager | ForEach-Object {
            "###User-Informationen###`r`n"+  
            " Telefonnummer: "+$_.Telephonenumber+"`r`n"  
            "Mobilnummer: "+$_.Mobilephone+"`r`n"  
            "Pager: "+$_.Pager+"`r`n"  
            "Initialen: "+$_.Initials+"`r`n"  
            "Manager: "+((Get-ADUser (Get-ADUser $inputusername -Properties manager).manager -properties displayname).displayname)  
            }
        #Gruppen Mitgliedschaften
        $groupresult = (Get-ADPrincipalGroupMembership $inputusername).Name -join ";`r`n"  

        #Zusammenfügen der Informationen als $result
        $result = "$userresult`r`n`r`n###AD-Gruppen###`r`n$groupresult"  

        #Ausgeben in der PS (optional, fenster wird sowieso sofort geschlossen...!)
        Write-Host "$userresult`r`n`r`n###AD-Gruppen###`r`n$groupresult"  
        
        ###KOPIEREN###       
        #Kopieren in die Zwischenablage
        Set-Clipboard $result       
        Write-Host "Informationen wurden erfolgreich abgerufen und kopiert"  
           }}
while (@(Get-ADUser -Filter { SamAccountName -eq $inputusername}).Count -eq 0)

Content-Key: 614327

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

Printed on: April 25, 2024 at 11:04 o'clock

Member: SlainteMhath
Solution SlainteMhath Oct 20, 2020 at 09:41:08 (UTC)
Goto Top
Moin,

etwa so:

try {
  $manager = ((Get-ADUser (Get-ADUser $inputusername -Properties manager).manager -properties displayname).displayname)
}
catch {
  $manager = "ohne"  
}
$userresult = .... + "Manager: " + $manager  

lg,
Slainte
Member: emeriks
Solution emeriks Oct 20, 2020 updated at 09:48:59 (UTC)
Goto Top
Hi,
Zeile 15 ersetzen durch

If($_.manager) {
  "Manager: "+ ((Get-ADUser $_.manager -properties displayname).displayname)  
}
Else {
  "Manager: "  
}

E.
Member: Celiko
Celiko Oct 20, 2020 at 09:57:01 (UTC)
Goto Top
Hey SlainteMhath,

danke für den Try/Catch. habe garnicht daran gedacht ... face-sad

Habe die Abfrage direkt ganz nach oben gesetzt.
Dann habe ich bei der ForEach-Object-Abfrage einfach das Objekt für den Manager "Manager: " + $manager" benannt.
Danke! face-smile


Hier der vollständige Code, falls es später jemanden interessieren sollte.

do{$inputusername = Read-Host -Prompt "Bitte geben Sie den pre Win2000 Benutzernamen ein!" #Eingabe des Usernames  
#Abfrage, ob der Bentuzer, der eingegeben wurde, exisitert. Wenn nicht wird das Script von vorne gestartet.
if (@(Get-ADUser -Filter { SamAccountName -eq $inputusername }).Count -eq 0) {
    Write-Warning -Message "Benutzer $inputusername existiert nicht. Geben Sie bitte einen Benutzer an, der existiert."  
    }
    else {
        try {
        $manager = ((Get-ADUser (Get-ADUser $inputusername -Properties manager).manager -properties displayname).displayname)
        }
        catch {
        $manager = "ohne"  
        }
        Write-Host "Informationen des Benutzers '$inputusername' werden abgerufen"  
        ###ABFRAGE der Benutzerinformationen###
        $userresult = Get-ADUser -Identity $inputusername -Properties Telephonenumber,Mobilephone, EmailAddress, Pager, Initials, Manager | ForEach-Object {
            "###User-Informationen###`r`n"+  
            " Telefonnummer: "+$_.Telephonenumber+"`r`n"  
            "Mobilnummer: "+$_.Mobilephone+"`r`n"  
            "Pager: "+$_.Pager+"`r`n"  
            "Initialen: "+$_.Initials+"`r`n"  
            #Block für Manager
            "Manager: " + $manager  
            #End-Block für Manager
                }
        #Gruppen Mitgliedschaften
        $groupresult = (Get-ADPrincipalGroupMembership $inputusername).Name -join ";`r`n"  

        #Zusammenfügen der Informationen als $result
        $result = "$userresult`r`n`r`n###AD-Gruppen###`r`n$groupresult"  

        #Ausgeben in der PS (optional, fenster wird sowieso sofort geschlossen...!)
        Write-Host "$userresult`r`n`r`n###AD-Gruppen###`r`n$groupresult"  
        
        ###KOPIEREN###       
        #Kopieren in die Zwischenablage
        Set-Clipboard $result       
        Write-Host "Informationen wurden erfolgreich abgerufen und kopiert"  
           }}
while (@(Get-ADUser -Filter { SamAccountName -eq $inputusername}).Count -eq 0)