none
openfiledialog funktioniert nur in Powershell Ise aber nicht per script

    Frage

  • Der grafische Dialog zum Öffnen blockiert mir den Skript, wohingegen per Ise kein Problem besteht

    Welche Ursache könnte das haben?

    #lade die Gui-Assembly
    Add-Type -AssemblyName System.Windows.Forms
    #[void] [reflection.assembly]::loadWithPartialName("system.windows.forms")

    Function openfile($initialDirectory)
    {
      $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
      #$OpenFileDialog.initialDirectory = $initialDirectory
      $OpenFileDialog.filter = "CSV (*.csv)| *.csv"
      $OpenFileDialog.ShowDialog()
      $OpenFileDialog.filename
    }

    Function savefile($initialDirectory)
    {
      $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
      $SaveFileDialog.initialDirectory = $initialDirectory
      $SaveFileDialog.filter = "CSV (*.csv)| *.csv"
      $SaveFileDialog.ShowDialog()
      $SaveFileDialog.filename
    }

    Function ersetze($str)
    {
      if ($str)
      {
        $s=$str.substring(0,1).toupper()+$str.substring(1).tolower()
        return $s   
      }  
    }

    write-host "Import"
    $f=openfile "h:\user\common\temp\hubert"
    $list=get-content -encoding UTF8 $f

    $endlist=@()
    foreach ($i in $list)
    {
      $row=$i.split(",")
      if ($row[1] -eq "") #wenn Nachname leer, dann Vor- und Nachname aus Mailadresse zusammenpicken
      {
        $help=$row[4].split("@") #Array aus Mailadresse
        $row[1]=$help[0].split(".")[1] #Nachname herausfischen
        $row[0]=$help[0].split(".")[0] #Vorname herausfischen
        $row[1]=ersetze $row[1] #Erster Buchstabe des Nachnamens Groß
        $row[0]=ersetze $row[0] #Erster Buchstabe des Vornamens Groß
        #write-host $row[0], $row[1]
        $subst=""
        foreach ($j in $row) #String aus array neu zusammenfügen
        {
          if ($subst)
          {
            $subst=$subst+","+$j
          }
          else
          {
            $subst=$j
          }
        }
        $endlist+=$subst
      }
      else
      {
        $endlist+=$i
      }
    }
    $files=savefile "c:\temp"
    foreach ($i in $endlist)
    {
      #write-host $i
      $i|out-file -append -encoding UTF8 $files
    }

    Mittwoch, 6. Dezember 2017 13:48

Antworten

Alle Antworten

  • Schau mal hier:
    http://www.workingsysadmin.com/open-file-dialog-box-in-powershell/

    Wichtig scheint folgende Ergänzung zu sein:

    $OpenFileDialog.ShowDialog() | Out-Null

    Mittwoch, 6. Dezember 2017 14:49
  • Das bringt leider auch nichts, |out-null hatte ich im ursprünglichen Skript

    Mittwoch, 6. Dezember 2017 21:20
  • Problem gelöst:

    Es ist ein Bug von Powershell

    OpenFileDialog.ShowHelp = $true ... löst das Problem

    Mittwoch, 6. Dezember 2017 22:15
  • Nicht ganz. Es ist ein Bug in .Net. :)

    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: 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.

    Donnerstag, 7. Dezember 2017 14:59
    Moderator