none
If, Else Problem RRS feed

  • Frage

  • Hi Leute kurze Frage, ist auch sicher nur ein Schusselfehler...

    Erstmal kurz das verwendete Script:

    $title = 'Neuer Nutzer'
    $msg   = 'Bitte Titel des neuen Nutzers eingeben:'
    
    
    # ÖFFNET DAS INPUT-FENSTER
    
    $usertitel = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
    
    if($usertitel -eq $Null){
    
    New-ADUser -Name "$name, $vorname" -Path 'ou=x,OU=xy,OU=xyz,DC=domäne,DC=domäne,DC=de'           
    -SamAccountName $account -OtherAttributes @{'extensionAttribute9'="0101";'extensionAttribute4'=$account;'extensionAttribute14'=$abtei;'extensionAttribute10'=$anrede} 
    
    } else
    {
     New-ADUser -Name "$name, $vorname" -Path 'ou=x,OU=xy,OU=xyz,DC=domäne,DC=domäne,DC=de'           
    -SamAccountName $account -OtherAttributes @{'extensionAttribute9'="0101";'extensionAttribute11'=$usertitel;'extensionAttribute4'=$account;'extensionAttribute14'=$abtei;'extensionAttribute10'=$anrede}
    }

    ist die Variable $usertitel nicht leer, funktioniert es, also Else wird ausgeführt. Ist der usertitel aber leer, kommt folgendes:

    Hab ich was übersehen?

    Dienstag, 20. März 2018 14:01

Antworten

  • So - und jetzt kommt noch was "Konstruktives" ... ;-)

    Wenn Du Deinen Code ein wenig übersichtlicher gestallten möchtest - gerade bei cmdlets mit vielen Parametern - kannst Du Splatting nutzen. Ungefähr so hier:

    $usertitel = Read-Host -Prompt 'Bitte Usertitel eingeben'
    
    $parms = @{
        Name            = "$name, $vorname"
        Path            = 'ou=x,OU=xy,OU=xyz,DC=domäne,DC=domäne,DC=de'
        SamAccountName  = $account
        OtherAttributes = @{
            extensionAttribute4  = $account
            extensionAttribute9  = '0101'
            extensionAttribute10 = $anrede
            extensionAttribute14 = $abtei
        }
    }
    if ($usertitel) {
        $parms.OtherAttributes.add('extensionAttribute11', $usertitel)
    }
    
    New-ADUser @parms


    Best regards,

    (79,108,97,102|%{[char]$_})-join''



    • Bearbeitet BOfH-666 Mittwoch, 21. März 2018 01:32
    • Als Antwort markiert antenne1988 Mittwoch, 21. März 2018 07:33
    Dienstag, 20. März 2018 23:57
  • Ja es kann auch ein leerer String sein ,da hast du recht. Leider kommt bei If (-not $usertitel) {} der selbe Fehler. Ist die Variable $Usertitel gefüllt, funktioniert es weiterhin. Ich kann nur nicht ganz nachvollziehen, warum ich eine variable nicht mit $Null vergleichen kann... 

    Jedenfalls hab ich die Lösung gefunden und sie könnte wohl einfacher nicht sein. Einfach If (!$usertitel). Ist die Variable leer, macht er Else. Danke für die vielen Antworten! P.S es geht auch andersrum mit If ($usertitel), für den Fall, dass Jemand das selbe Problem hat und auf diesen Thread hier Stößt. 

    • Als Antwort markiert antenne1988 Mittwoch, 21. März 2018 07:33
    Mittwoch, 21. März 2018 06:02

Alle Antworten

  • Könnte es sein, dass $usertitel im Zweifel gar nicht $Null ist, sondern eine leere Zeichenfolge, die aber eventuell für das gewünschte Attribut nicht erlaubt ist?

    Bau doch mal ein Write-Verbose oder Write-Debug in Deine Bedingung ein (... oder zur Not ein Write-Host) und prüfe, was genau in den benutzen Variablen enthalten ist.

    Ich kann's im Moment grad nicht testen, aber mit if( -not $usertitel) { ... } solltest Du beide Fälle "einfangen" können (also $null und '' (einen leeren String)).


    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Dienstag, 20. März 2018 15:05
    Dienstag, 20. März 2018 15:04
  • Könnte es sein, dass $usertitel im Zweifel gar nicht $Null ist, sondern eine leere Zeichenfolge, die aber eventuell für das gewünschte Attribut nicht erlaubt ist?

    So isses. Folgende Vergleiche sind alle falsch:

    "" -eq $null
    $false -eq $null
    0 -eq $null
    [DBNull]::Value -eq $null
    "" -eq $false
    [DBNull]::Value -eq $false
    "" -eq 0
    [DBNull]::Value -eq 0


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Dienstag, 20. März 2018 15:40
  • So - und jetzt kommt noch was "Konstruktives" ... ;-)

    Wenn Du Deinen Code ein wenig übersichtlicher gestallten möchtest - gerade bei cmdlets mit vielen Parametern - kannst Du Splatting nutzen. Ungefähr so hier:

    $usertitel = Read-Host -Prompt 'Bitte Usertitel eingeben'
    
    $parms = @{
        Name            = "$name, $vorname"
        Path            = 'ou=x,OU=xy,OU=xyz,DC=domäne,DC=domäne,DC=de'
        SamAccountName  = $account
        OtherAttributes = @{
            extensionAttribute4  = $account
            extensionAttribute9  = '0101'
            extensionAttribute10 = $anrede
            extensionAttribute14 = $abtei
        }
    }
    if ($usertitel) {
        $parms.OtherAttributes.add('extensionAttribute11', $usertitel)
    }
    
    New-ADUser @parms


    Best regards,

    (79,108,97,102|%{[char]$_})-join''



    • Bearbeitet BOfH-666 Mittwoch, 21. März 2018 01:32
    • Als Antwort markiert antenne1988 Mittwoch, 21. März 2018 07:33
    Dienstag, 20. März 2018 23:57
  • Ja es kann auch ein leerer String sein ,da hast du recht. Leider kommt bei If (-not $usertitel) {} der selbe Fehler. Ist die Variable $Usertitel gefüllt, funktioniert es weiterhin. Ich kann nur nicht ganz nachvollziehen, warum ich eine variable nicht mit $Null vergleichen kann... 

    Jedenfalls hab ich die Lösung gefunden und sie könnte wohl einfacher nicht sein. Einfach If (!$usertitel). Ist die Variable leer, macht er Else. Danke für die vielen Antworten! P.S es geht auch andersrum mit If ($usertitel), für den Fall, dass Jemand das selbe Problem hat und auf diesen Thread hier Stößt. 

    • Als Antwort markiert antenne1988 Mittwoch, 21. März 2018 07:33
    Mittwoch, 21. März 2018 06:02
  • Ich hab grad gesehen, bei Dir sieht man auch die von mir genannte Lösung. Hätte ich mal richtig hingeschaut :)
    Mittwoch, 21. März 2018 06:03
  • Super. Vielleicht markierst Du dann noch die richtigen Antworten als solche ... dann finden andere mit ähnlichen Fragen die Antwort schneller.

    Danke.


    Best regards,

    (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 21. März 2018 06:39
  • Dass du bei 

    If (-not $usertitel) {} 

    und

    If (!$usertitel) {} 

    unterschiedliche Ergebnisse erhälst, kann eigentlich nicht sein. Das sind nur unterschiedliche Schreibweisen für ein und denselben Operator. Siehe auch about_Logical_Operators.

    Alternative dazu ist

    if ([string]::IsNullOrWhiteSpace($usertitel)) {}
    was auch einen String mit Leerzeichen abfangen würde. Finde ich für diesen Fall auch besser lesbar, weil die Intention klarer ist (auch wenn's bisschen mehr Tipperei ist).


    Mittwoch, 21. März 2018 10:33
  • Kann nur sagen was mit -not passiert ist :) Hab von Powershell auch nicht viel Ahnung als das ich da jetzt weiter forschen könnte warum dies so ist.
    Mittwoch, 21. März 2018 11:39