none
Verzeichnis auslesen und als Menü anzeigen RRS feed

  • Frage

  • Hallo,

    ich legen meine Powershell Scripte in einem Verzeichnis ab. Nun möchte ich nicht 30 Verknüpfungen auf meinem Desktop haben sondern nur noch eine. Das Script soll ein Verzeichnis auslesen und mir die Scriptnamen in dem Verzeichnis ausgeben und zur Auswahl anbieten. Dann möchte ich eine Auswahl treffen und dass das Script aus dem Verzeichnis dann gestartet wird. Zu Anfang frage ich noch den Computernamen ab.

    Das Abfragen, auslesen des Verzeichnis und der Aufbau des Menüs funktioniert schon. Nur das mit dem übergeben der Auswahl funktioniert leider nicht. Erkennt jemand wieso?

    cls
    $Quelle = "\\SRV0016\d$\Tools\Powershell_Scriptsammlung"
    $Auswahl = $nul
    
    # Auslesen des Ordners
    $Files = gci -name -Path $Quelle *.ps1 | foreach {$_ -replace ".ps1", ""}
    
    $Computername = Read-Host 'Bitte Computername eingeben'
    
    Write-Host "Computername: $Computername"
    Write-Host "-------------------------"
    
    # zählen der Namen imOrdner
    # (gci $Quelle -filter *.ps1).count
    
    #foreach ($i in $Files)
    # {Write-Host $i}
    
    If(@($Files).count -lt 1) {
        Write-host "Keine Script gefunden!"
        $a = Read-Host "beliebige Taste drücken"
        Exit
    }
    
    $Zähler = 1
    
    ForEach($i in $Files) {
    
        Write-Host "$Zähler : $i"
        
        # Zähler hochzählen
        $Zähler++
    }
    
    # user auswahl abfragen
    $Auswahl = Read-Host 'Bitte Auswahl treffen (oder E zum Ende)'
    
    # Usr möchten den zauber beenden und hat A eingegeben
    If($Auswahl -eq 'E') {
        Write-host 'Script beendet.'
        $a = Read-Host "beliebige Taste drücken"
        Exit
    } 
    
    # Auswahl ausführen
    Start-Process powershell.exe "$Quelle\$Files[$Auswahl].ps1 $computername"
    Write-host ""
    Write-host "-------------------------------------"
    Write-host "Auswahl:" $Files[$Auswahl]

    Wenn 10 Scripte gefunden werden, dann werden diese aus angezeigt. Wähle ich dann z.B. Punkt 9 aus, dann steht hinter Auswahl auch der Richtige Name. Nur wurde nicht das Script 9 gestartet sondern immer das Script 1 gestartet.

    Wieso steht hier: Write-host "Auswahl:" $Files[$Auswahl] der richtige Name und hinter Start-Prozess nicht?


    IT Berater

    Donnerstag, 14. November 2013 10:53

Antworten

  • Um solche Fehler zu finden sollte man IMMER zu 100% das ausgeben lassen was man auch benutzen will!

    # Auswahl ausführen
    Write-Host "Dies wird Ausgeführt siehst du den Fehler? ;-)"
    Write-Host "$Quelle\$Files[$Auswahl].ps1 $computername"
    Start-Process powershell.exe "$Quelle\$Files[$Auswahl].ps1 $computername"

    1. Du musst bei Werten die innerhalb eines Strings berechnet oder ausgeführt  werden sollen  eine Subexpression benutzen $().

    2. In der IT wird bei der 0 angefangen zu Zählen. Der erste Index eines Arrays ist die 0!

    Deine  Zeile: $Zähler = 1 ist falsch! $Zähler = 0 ist richtig!

    ändere die Zeile so:

    "$Quelle\$($Files[$Auswahl]).ps1 $computername"


    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, 14. November 2013 11:35
    • Als Antwort markiert NBC2009 Donnerstag, 14. November 2013 13:31
    Donnerstag, 14. November 2013 11:19

Alle Antworten

  • Um solche Fehler zu finden sollte man IMMER zu 100% das ausgeben lassen was man auch benutzen will!

    # Auswahl ausführen
    Write-Host "Dies wird Ausgeführt siehst du den Fehler? ;-)"
    Write-Host "$Quelle\$Files[$Auswahl].ps1 $computername"
    Start-Process powershell.exe "$Quelle\$Files[$Auswahl].ps1 $computername"

    1. Du musst bei Werten die innerhalb eines Strings berechnet oder ausgeführt  werden sollen  eine Subexpression benutzen $().

    2. In der IT wird bei der 0 angefangen zu Zählen. Der erste Index eines Arrays ist die 0!

    Deine  Zeile: $Zähler = 1 ist falsch! $Zähler = 0 ist richtig!

    ändere die Zeile so:

    "$Quelle\$($Files[$Auswahl]).ps1 $computername"


    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, 14. November 2013 11:35
    • Als Antwort markiert NBC2009 Donnerstag, 14. November 2013 13:31
    Donnerstag, 14. November 2013 11:19
  • Hallo Peter,

    vielen Dank für deine Hilfe.

    Write-Host und deine Zeile zeigt alles richtig an. Hinter Start-Process kommt leider ein Fehler:

    Write-Host "$Quelle\$($Files[$Auswahl]).ps1 $computername"
    Start-Process  "$Quelle\$($Files[$Auswahl]).ps1 $computername"

    \\SRV004\d$\Tools\Powershell_Scriptsammlung\Support.ps1 Client0007
    Start-Process : This command cannot be executed due to the error: Das System kann die angegebene Datei nicht finden.
    At \\SRV004\d$\Tools\Powershell_Scriptsammlung\Menue.ps1:52 char:14
    + Start-Process <<<<   "$Quelle\$($Files[$Auswahl]).ps1 $computername"
        + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOperationException
        + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand


    IT Berater

    Donnerstag, 14. November 2013 13:27
  • OMG - ich bin schon zu lange an dem Script dran :(. Wenn ich noch Powershell einfüge, dann funktioniert es prima.

    Vielen Dank


    IT Berater

    Donnerstag, 14. November 2013 13:31