none
set-ADUser fragt nach Bestätigung, obwohl -confirm:$false gesetzt ist

    Frage

  • Hallo,

    ich werde beim Ausführen meines Skriptes zum automatisierten Import und Anpassung von neuen ADUsern jedes Mal nach einer Bestätigung für den Vorgang "Set" gefragt. In meinem Skript gibt es nur eine Befehlszeile, die diesen Befehl "Set" enthält:

    set-ADUser -Identity $SamAccountName -Replace @{PrimaryGroupID=$PrimaryGroupID} -Confirm:$false

    Dort habe ich aber auch den Parameter "-confirm" auf $false gesetzt, was ja die Nachfrage durch das Skript eigentlich unterdrücken sollte und automatisch mit "Yes" beantworten sollte.

    Leider scheint es nicht zu funktionieren. Der -force Parameter wird von Set-ADUser leider nicht erkannt. Meine PowerShell-Version ist die 4.0

    Hat jemand eine Idee, wie ich diese Nachfrage unterdrücken kann? Sonst macht es das Skript nervig, wenn jedes Mal jemand davor sitzen muss und klicken muss bei jedem einzelnen User...

    Viele Grüße!

    Mittwoch, 15. Mai 2019 06:46

Antworten

  • Hallo,

    ja, ich habe den Fehler gefunden!

    Im weiteren Verlauf meines Skriptes, verwende ich das cmdlet "Remove-ADGroupMember".  Hier entferne ich die vorherige primäre Standardgruppe "Domänen-Benutzer bzw. "Domain Users" für die neuen User.

    Offenbar ist auch das ein "Set"-Vorgang für Powershell. Und hierbei MUSS ich wohl den Parameter -confirm:$false setzen.

    Jetzt werde ich im Skript nicht mehr nach Bestätigung gefragt.

    Mittwoch, 15. Mai 2019 07:31

Alle Antworten

  • Hallo Philipp,

    ich kann Dein Problem leider nicht nachvollziehen. Ich habe es gerade mal mit einem Test-User probiert und ich kann die PrimaryGroupID ohne Probleme ersetzen ... gänzlich ohne den Parameter -Confirm.


    Live long and prosper!

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

    Mittwoch, 15. Mai 2019 07:19
  • Hallo,

    ja, ich habe den Fehler gefunden!

    Im weiteren Verlauf meines Skriptes, verwende ich das cmdlet "Remove-ADGroupMember".  Hier entferne ich die vorherige primäre Standardgruppe "Domänen-Benutzer bzw. "Domain Users" für die neuen User.

    Offenbar ist auch das ein "Set"-Vorgang für Powershell. Und hierbei MUSS ich wohl den Parameter -confirm:$false setzen.

    Jetzt werde ich im Skript nicht mehr nach Bestätigung gefragt.

    Mittwoch, 15. Mai 2019 07:31
  • ja, ich habe den Fehler gefunden!

    Super.

    Na dann - maximale Erfolge noch!  ;-) :-D


    Live long and prosper!

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

    Mittwoch, 15. Mai 2019 07:32
  • Parameter werden eigentlich ohne ":" angegeben, also
    ... -confirm true .....
    und nicht
    ... -confirm:true .....
    Mittwoch, 15. Mai 2019 10:55
  • Doch, bei Switches schon...

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Mittwoch, 15. Mai 2019 11:57
  • Ich habs ausprobiert, den Doppelpunkt kann man machen, muss man aber nicht:

    -option:xxx
    -option: xxx
    -option xxx

    -option :xxx => der Doppelpunkt gehört zum Wert

    Mittwoch, 15. Mai 2019 14:45
  • Ich habs ausprobiert, den Doppelpunkt kann man machen, muss man aber nicht:

    -option:xxx
    -option: xxx
    -option xxx

    -option :xxx => der Doppelpunkt gehört zum Wert

    Falsch. Du hast irgendeinen Parametertyp, also im Zweifel [object] benutzt.

    Bei [switch] ist es anders:

    • Du kannst ihm ohne Doppelpunkt gar keinen Wert übergeben, zulässig sind aber nur $true oder $false
    • Wenn der Parameter angegeben ist, ist der Wert $true
    • Wenn er nicht angegeben ist, ist der Wert (leider) nicht $false, sondern $null
    • Wenn der Erzeuger des Cmdlets aber bei der Prüfung nicht etwa if (!$switch) { action } verwendet hat, sondern, wie er auch sollte, if ($false -eq $switch) { action }, ist die Bedingung bei weggelassenem Switch nicht erfüllt

    Siehe hier:


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Mittwoch, 15. Mai 2019 14:58
  • > Wenn er nicht angegeben ist, ist der Wert (leider) nicht $false, sondern $null

    Wie kommst du darauf?
     

    function Test {
        param(
            [switch]$switch
        )
        $switch -eq $false
        (!($switch))
    }
    
    Test 

    Blog: http://www.bytecookie.de

    Powershell Code Manager: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 21. Mai 2019 08:07
    Moderator
  • > Wenn er nicht angegeben ist, ist der Wert (leider) nicht $false, sondern $null

    Wie kommst du darauf?

    Muss wohl bei einer der früheren Versionen so gewesen sein. Ich habe es mir mal so gemerkt und danach nie wieder angeschaut.

    Was ist die richtige Erklärung für das Verhalten von -Confirm? Wenn man $Confirm.IsPresent auswerten würde, hätten wir das Problem doch nicht...

    Was auch interessant ist: wenn man Test -Switch:$false absetzt, ist $Switch.IsPresent auch False.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Dienstag, 21. Mai 2019 10:27
  • > Ich habe es mir mal so gemerkt und danach nie wieder angeschaut.
     
    Kenn ich. :)
     
    > wenn man Test -Switch:$false  absetzt, ist $Switch.IsPresent auch False

    Ja das ist leider nicht gut gelöst. Ich kann etwas die Logik die wohl dahinter steht, verstehen, denn eigentlich ist -Switch:$false nur ein umständlicher Weg zu sagen das der Schalter eben NICHT betätigt werden soll. Andererseits ist die Erklärung für IsPresent eindeutig: "Returns true if the parameter was specified on the command line". Hätte man vielleicht besser isSwitchedOn gennant. :)

    Einem Switchparameter explizit einen Wert zuzuweisen, macht aber eh eigentlich nur für den Fall Sinn, dass man ihm einen anderen Defaultstate ($true) zugewiesen hat, den man nun explizit überschreiben will.


    Blog: http://www.bytecookie.de

    Powershell Code Manager: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 21. Mai 2019 10:58
    Moderator