Jump to content

lisaluft

Members
  • Gesamte Inhalte

    6
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von lisaluft

  1. Bin eigentlich erst bei meinen Anfägnen bei Powershell Skripting und wollte jetzt zur aktuelle PowerShell Core 7 wechseln. Ein Unterschied zur Windows Powershell ist u.a. das PSSnapin fehlt. Im konkreten Fall habe ich bisher für Exchange-Verwaltungsaufgaben für meinen Exchange mit Code

     

    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

    wunderbar Exchange-Befehle verwenden können. In der Core-Version ist dies so nicht möglich, ich finde auch sonst nix womit ich dann wieder an das SnapIn komme. Ist das in der Core-Version schlicht nicht mehr möglich und ich sollte als Windows-Benutzer noch auf der Windows-Powershell bleiben? Oder gibt es eine Möglichkeit zur Einbindung?

  2. vor 54 Minuten schrieb BOfH_666:

    OK.

    Als erstes hast Du ihn Deinem MyMain einen Klammerfehler im switch-Statement. Das sollte so aussehen: 

    
    Function MyMain {
    
        #Hauptmenue
        cls
        Write-Host
        Write-Host "Hauptmenue"
        Write-Host "=================================================="
        Write-Host "1":" Benutzerverwaltung"
        Write-Host "2":" Gruppenverwaltung"
        Write-Host "--------------------------------------------------"
        Write-Host "0":" EXIT"
        Write-Host "=================================================="
        $input = Read-Host "Auswahl"
    
        Switch ($input) {
            0 { exit }
            1 {
                . $m_benutzer
                MyBenutzer
            }
            2 {
                . $m_gruppen
                MyGruppen
            }
            3 {
                MyMain
            }
            DEFAULT { exit }
        }
    }
    MyMain

    Darf ich fragen, welchen Code-Editor Du benutzt? Sowohl die Powershell_ISE als auch VSCode würden diesen Syntaxfehler entsprechend markieren.  ... oder ist das nur ein Copy-&-Paste-Fehler hier im Forum?  ;-) 

     

    SORRY, Copy&Paste Fehler weil ich schon soviel rumprobiert habe, Klammer ist schon da.

     

    vor 54 Minuten schrieb BOfH_666:

     

    Jetzt wo die Klammern stimmen, solltest Du, auch wenn es vielleicht im Moment funktioniert, dringend die Variable $Input ändern. $Input ist eine für Powershell reservierte Variable, die nicht für eigene Zwecke benutzt/missbraucht werden sollte, ;-) 

     

    Hab ich jetzt geändert.

     

    vor 54 Minuten schrieb BOfH_666:

     

    Hmm ... das switch-Statement wird von oben nach unten abgearbeitet. Wenn Du die Option 1 wählst, bist Du über die 0 schon drüber. Das kann also nicht funktionieren. ;-)  ... und der Default-Zweig wird nur ausgeführt, wenn keine der zur Verfügung stehenden Optionen passt. 

     

    DAS verstehe ich nicht, ich bekomme doch das Menü, wähle dann aus und je nachdem geht er in die geswitchte Variabe, ist doch egal ob 0 vorher oder nachher kommt, den Code geht er doch mit der eingegebenen Auswahl durch, dann müsste er doch bei 0 exit machen?

     

    vor 54 Minuten schrieb BOfH_666:

    Wenn Du immer wieder in Dein Hauptmenü zurück möchtest, wirst Du eine while oder do Schleife benutzen müssen. 

     

    Es macht übrigens nicht wirklich viel Sinn, die "extenen" Scripte erst mittels dot-Sourcing in Dein Hauptscript einzubinden, wenn der entsprechende Menüeintrag gewählt wird. Einfacher wäre es, wenn Du am Anfang Deines Scriptes einfach mittels: 

    
    Get-ChildItem $PSScriptRoot -Filter *.ps1 |
        ForEach-Object {
            . $_.FullName
        }

    alle weiteren Funktionen in den Scope Deines Hauptscriptes importiertest. Somit brauchst Du im Code nur noch mit den Funktionsnamen zu arbeiten.

     

    Hab ich jetzt so gemacht, aber dann kommt nicht einmal mehr mein Hauptmenü, sondern es wird sofort das Menü vom anderen Skript für die Benuzterverwaltung (Funktion MyBenutzer) sofort geöffnet, ich bekomme das Hauptmenü gar nicht her.

     

    #Einbindung Module
    Get-ChildItem $PSScriptRoot -Filter *.ps1 | ForEach-Object {. $_.FullName}
    
    Function MyMain
    {
    
    #Hauptmenue
    cls
    Write-Host
    Write-Host "Hauptmenue"
    Write-Host "=================================================="
    			Write-Host "1":" Benutzerverwaltung"
                Write-Host "2":" Gruppenverwaltung"
    Write-Host "--------------------------------------------------"
                Write-Host "0":" exit"
    Write-Host "=================================================="
    $auswahl = Read-Host "Auswahl"
    
    Switch ($auswahl)
    {
    "0" {exit}
    "1" 
    {
    MyBenutzer
    }
    "2"
    {
    MyGruppen
    }
    DEFAULT {exit}
    }
    
    }
    MyMain

     

    vor 54 Minuten schrieb BOfH_666:

     

    Damit wären wir beim nächsten Thema: Funktionsnamen.

    Wenn Du irgendwann mal Deine Scripte in Module umwandelst und diese vielleicht auch an Kollegen weitergeben möchtest, empfiehlt es sich, besonders für Funktionen, die direkt aufgerufen werden sollen, die gleiche Schreibweise zu benutzen, wie bei den eingebauten cmdlets - also <Verb>-<Nomen>. Das macht im Zweifel ihre Funktion direkt erkennbar und erleichtert das Verstehen und Debuggen. Empfehlenswerte Lektüre dazu ist The Unofficial PowerShell Best Practices and Style Guide.

     

     

     

    Danke für den Tipp, das werde ich mir anschauen.

     

    Hmm, hab jetzt nochmal getestet, ich bekomme dann mein Hauptmenue nicht mehr weil ich in den sonstigen *.ps1-Skripten die Funktionen gleich aufrufe, beim laden/einbinden schaut er sich die an und ruft dann gleich die Fuktion auf. Ich glaube ich muss hier mal an meinem Ablaufplan ein wenig arbeiten...

  3. #Einbindung Skripte
    $m_benutzer = $PSScriptRoot + "\m_benutzer.ps1"
    $m_gruppen = $PSScriptRoot + "\m_gruppen.ps1"
    
    Function MyMain
    {
    
    #Hauptmenue
    cls
    Write-Host
    Write-Host "Hauptmenue"
    Write-Host "=================================================="
    			Write-Host "1":" Benutzerverwaltung"
                Write-Host "2":" Gruppenverwaltung"
    Write-Host "--------------------------------------------------"
                Write-Host "0":" EXIT"
    Write-Host "=================================================="
    $input = Read-Host "Auswahl"
    
    Switch ($input)
    0 {exit}
    {
    1 
    {
    . $m_benutzer
    MyBenutzer
    }
    2
    {
    . $m_gruppen
    MyGruppen
    }
    3
    {
    MyMain
    }
    DEFAULT {exit}
    }
    
    }
    MyMain

     

    0 oder DEFAULT funktionieren nicht nachdem ich zuvor auf 1 oder 2 war

     

    Beispiel 1 schaut so aus damit ich auch wieder zurückkomme:

     

    #Einbindung Skripte
    $m_benutzer_neuanlage = $PSScriptRoot + "\m_benutzer_neuanlage.ps1"
    $m_benutzer_namensaenderung = $PSScriptRoot + "\m_benutzer_namensaenderung.ps1"
    
    Function MyBenutzer
    {
    cls
    Write-Host
    Write-Host "Benutzerverwaltung"
    Write-Host "=================================================="
    			Write-Host "1":" Neuanlage"
                Write-Host "2":" Namensänderung"
    Write-Host "--------------------------------------------------"
                Write-Host "0":" zurück"
    Write-Host "=================================================="
    $input = Read-Host "Auswahl"
    
    Switch ($input)
    {
    0 {MyMain}
    1 
    {
    . $m_benutzer_neuanlage
    MyBenutzerNeuanlage
    }
    2 
    {
    . $m_benutzer_namensaenderung
    MyBenutzerAenderung
    }
    }
    }
    
    MyBenutzer

     

    So komme ich mit 0 wieder zurück zum "Hauptmenü", aber dann geht dort 0 nicht, ich komme immer wieder zum Menü der Benutzer, dann wieder zurück und dann geht 0 im Hauptmenü, aber es sollte generell beim Hauptmenü funktionieren, oder was übersehe ich?

  4. Versuche mit PS ein paar Admin-Aufgaben zu erledigen, dazu habe ich ein Skript.ps1 mit Menü, welches dann ja nach Auswahl per Dot-Sourcing andere Skripts einbindet und davon Funktionen ausführt. Evtl. gibt es hier elegantere Wege, ich hab mal so angefangen, damit ich einen gewissen Überblick für die verschiedenen Bereiche bekomme.

     

    Es ist nur "Kosmetik" aber mich interessiert weshalb bei mir im Skript.ps1 ein "exit" nach Switch-Auswahl nicht funktioniert. 

     

    Write-Host "Hauptmenue"
    Write-Host "=================================================="
    Write-Host "1":" Benutzerverwaltung"
    Write-Host "2":" Gruppenverwaltung"
    Write-Host "--------------------------------------------------"
    Write-Host "0":" zurück"
    Write-Host "=================================================="
    $input = Read-Host "Auswahl"

     

    Bei 0 sollte er dann aus dem "Programm" gehen...:

    Ich hätte es verschieden versucht, beim Switch mit: 

    DEFAULT {exit}

    oder eben explizit bei EIngabe von "0":

    0 {exit}

     

    Ich habe auch schon debugged, pause davor, was $input für einen Wert hat, alles passt, nur geht er bei allen anderen und vorallem auch nicht bei "0" komischer weise auf die Seite/Funktion welche eigentlich unter "1" geführt ist. Dies passiert aber nur wenn ich auch vorher irgendwo hinspringe, wenn ich das Skript öffne, die 0 drücke wird es sauber beendet mit exit, nur wenn ich vorher z.B. 1 drücke (hier kann ich dann mit 0 auch zurück zum Hauptmenue), dann geht hier das "exit" nicht und ich finde nicht heraus wieso.

     

    Hat hier jemand Rat?

     

     

     

     

  5. Nach Einstellung eines max Kennwortalters (90 Tage) werden die User vor Ablauf ab Win7 nicht mehr per Logon-Meldung gewarnt, stimmt das? Die Meldung ist jetzt einen Info Rechts unten am Desktop, wieviele Tage vorher beginnt diese Meldung?

     

    Kann ich diese fehlende Logon Meldung mit der GPO "interaktive Anmeldung: Anwender vor Ablauf Kennwort zum ändern auffordern" wiederherstellen? Ich finde dazu auch keinen Screenshot wie diese Meldung aussieht bei Google. Hat jemand Erfahrungen mit dieser Einstellung ob das so funktioniert das dann eine vernünftige Meldung beim Anmeldebildschirm kommt?

×
×
  • Neu erstellen...