Benutzer mit den meisten Antworten
If, Else Problem

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?
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
-
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
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
-
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.
-
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
-
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
-
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).- Bearbeitet Joachim Meyer Mittwoch, 21. März 2018 10:34