Benutzer mit den meisten Antworten
Auswahlmenü erstellten

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
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
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
-
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 -
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)