none
Auswahlmenü erstellten RRS feed

  • Frage

  • Hallo Zusammen,

    ich versuche verzweifelt ein Auswahlmenü aus einer Variable generieren zu lassen.

    Beispiel:

    $WGS = Get-Printer | Select-Object Name | Format-Table -HideTableHeaders | Out-String

    In der Variable stehen jetzt die ganzen Druckernamen und ich will dazu automatisch ein Menü in der Konsole ausgeben, wie zum Beispiel so:

    1. Drucker1
    2. Drucker2
    3. Drucker3
    ...

    Das Problem dabei für mich ist die Aufzählung.
    Hat jemand eine Idee, wie ich das lösen könnte?

    Danke

    Sg,
    Michael

    Donnerstag, 26. September 2013 14:55

Antworten

  • Dein etwas ungelenker Code zeigt das du ein wichtiges Prinzip der PowerShell noch nichtmitbekommen hast:

    PowerShell produziert und verarbeitet Objekte keinen Text!

    Ich habe zum besseren Verständnis von Objekten einen kleinen Workshop mit dem Cmdlet Import-CSV erstellt.

    Diesen kannst du mal durch führen.

    http://www.admin-source.de/BlogDeu/963/import-csv-workshop

    Bitte meide das Format-Table und das Format-List Cmdlet, wenn du Daten zum weiter verarbeiten erzeugen willst! Die Format-xxx Cmdlets nur für die ausgabe am Bildschirm oder in eine Textdatei.

    Deinen Code kann man so abkürzen:

    $WGS = Get-Printer | Select-Object -ExpandProperty Name

    In der Variablen ist dann eine Liste ein Array.

    Jedes Mitglied in einem Array kann man mit den ForEach schleifen verarbeiten.

    Es gibt in der PowerShell 2 Verschiedene ForEach konstrukte.

    Lies bitte dazu meinen Artikel in meinem Blog:

    http://www.admin-source.de/BlogDeu/905/powershell-foreach-und-foreach-object

    $Printers = Get-Printer

    If(@($Printers).count -lt 1) {
        Write-host 'Kein Drucker gefunden! Und tschüss ....'
        Exit
    }

    # drucker gefunden Menü erzeugen

    $Zähler = 0
    # für jeden Drucker im Array einen Eintrag erzeugen
    ForEach($Printer in $Printers) {

        Write-Host "$Zähler : $($Printer.Name)"
        
        # Zähler hochzählen
        $Zähler++
    }

    # user auswahl abfragen
    $Auswahl = Read-Host 'Die Nummer deiner Wahl (oder A zum beenden)'

    # Usr möchten den zauber beenden und hat A eingegeben
    If($Auswahl -eq 'A') {
        Write-host 'und tschüss....'
        Exit
    }

    # auswahl anzeigen
    $Auswahl

    # OBJEKT des ausgewählten Drucker anzeigen
    $Printers[$Auswahl]

    Schau mal in meiner Signatur habe ich viele Links um PowerShell zu lernen!

    Gruss Peter


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Bearbeitet Peter Kriegel Donnerstag, 26. September 2013 17:31 fcxcxvc
    • Als Antwort markiert Michael.David Freitag, 27. September 2013 06:17
    Donnerstag, 26. September 2013 17:22

Alle Antworten

  • Dein etwas ungelenker Code zeigt das du ein wichtiges Prinzip der PowerShell noch nichtmitbekommen hast:

    PowerShell produziert und verarbeitet Objekte keinen Text!

    Ich habe zum besseren Verständnis von Objekten einen kleinen Workshop mit dem Cmdlet Import-CSV erstellt.

    Diesen kannst du mal durch führen.

    http://www.admin-source.de/BlogDeu/963/import-csv-workshop

    Bitte meide das Format-Table und das Format-List Cmdlet, wenn du Daten zum weiter verarbeiten erzeugen willst! Die Format-xxx Cmdlets nur für die ausgabe am Bildschirm oder in eine Textdatei.

    Deinen Code kann man so abkürzen:

    $WGS = Get-Printer | Select-Object -ExpandProperty Name

    In der Variablen ist dann eine Liste ein Array.

    Jedes Mitglied in einem Array kann man mit den ForEach schleifen verarbeiten.

    Es gibt in der PowerShell 2 Verschiedene ForEach konstrukte.

    Lies bitte dazu meinen Artikel in meinem Blog:

    http://www.admin-source.de/BlogDeu/905/powershell-foreach-und-foreach-object

    $Printers = Get-Printer

    If(@($Printers).count -lt 1) {
        Write-host 'Kein Drucker gefunden! Und tschüss ....'
        Exit
    }

    # drucker gefunden Menü erzeugen

    $Zähler = 0
    # für jeden Drucker im Array einen Eintrag erzeugen
    ForEach($Printer in $Printers) {

        Write-Host "$Zähler : $($Printer.Name)"
        
        # Zähler hochzählen
        $Zähler++
    }

    # user auswahl abfragen
    $Auswahl = Read-Host 'Die Nummer deiner Wahl (oder A zum beenden)'

    # Usr möchten den zauber beenden und hat A eingegeben
    If($Auswahl -eq 'A') {
        Write-host 'und tschüss....'
        Exit
    }

    # auswahl anzeigen
    $Auswahl

    # OBJEKT des ausgewählten Drucker anzeigen
    $Printers[$Auswahl]

    Schau mal in meiner Signatur habe ich viele Links um PowerShell zu lernen!

    Gruss Peter


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Bearbeitet Peter Kriegel Donnerstag, 26. September 2013 17:31 fcxcxvc
    • Als Antwort markiert Michael.David Freitag, 27. September 2013 06:17
    Donnerstag, 26. September 2013 17:22
  • Hallo Peter,

    erstmal vielen Dank für die spitzen Erklärung und Lösung meines Problems, sowas würde man sich echt öfters wünschen.
    Deine Links werde ich mir gerne anschauen, so wie ich Zeit dazu finde.

    Zu meiner Verteidigung muss ich sagen, dass mir das Funktionsprinzip von Powershell durchaus bekannt ist, ich allerdings noch meine Schwierigkeiten damit habe es richtig anzuwenden.
    Ich habe im Breich Programmierung bzw. Scripting so gut wie 0 Erfahrung und habe erst kürzlich angefangen, mich in Powershell einzuarbeiten.
    Ansonsten kenne ich nur QBASIC und simple Batches.

    Danke nochmal!

    Schöne Grüße,
    Michael

    Freitag, 27. September 2013 06:16
  • Eine Warnung noch Michael!

    Das Cmdlet Get-Printer gibt es nur unter Windows 8 und Server 2012!

    Möchtest du etwas habe das auf fast allen Betiebsystemversion läuft musst du dich mit WMI beschäftigen.

    WMI und CIM spielen auch in Zukunft bei Microsoft eine große rolle. Es lohnt sich also auch dies zu lernen!

    http://www.wiegehtdas.ch/how-to/windows-7/druckerverwaltung-mit-powershell/


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Freitag, 27. September 2013 12:39