pat.bat
Goto Top

PowerShell - Liste von Dokumenten in MessageBox ausgeben

Hallo zusammen,

ich stecke mal wieder an einem Projektchen fest und zwar habe ich eine MessageBox gebastelt die ein paar Informationen bereitstellt sobald diese aufgerufen wird.

Nun möchte ich noch eine Liste von Dokumenten aus einem bestimmten Ordner innerhalb der MessageBox anzeigen lassen.

Hier mal der Code soweit:

# Load assembly
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  


$DocList = Get-ChildItem -Path "K:\LUP\50_Bescheiddruck" -Filter *.pdf | Select-Object Name, CreationTime | Where-Object Name -like $env:USERNAME  
$AnzahlDocs = $DocList.Count

$oReturn=[System.Windows.Forms.MessageBox]::Show("Das Dokument wurde an die Druckerstraße übergeben. Die Versendung wird am folgenden Arbeitstag erfolgen. `n`n  
Wenn Sie das Dokument doch nicht übermitteln möchten, wenden Sie sich bitte an einer der folgenden Personen:`n`n
Max Mustermann  `t Durchwahl: 1111`n`n
Liste Ihrer Dokumente in der Druckstraße:`n $DocList",  
"Dokument an Druckerstraße übergeben!`n`n", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Exclamation)  

Die Anzahl der Dokumente haut super hin, aber ich bekomme nicht den Namen der Dokumente als Liste mit rein.

Content-ID: 510115

Url: https://administrator.de/contentid/510115

Ausgedruckt am: 19.12.2024 um 06:12 Uhr

141575
Lösung 141575 30.10.2019 aktualisiert um 11:53:51 Uhr
Goto Top
Du musst schon das Array mit entsprechendem String Delimiter versehen um es vernünftig in eine Messagebox einzubauen.

Beispiel mit Newline als Trenner zwischen den Dateinamen
Add-Type -A System.Windows.Forms
$doclist = Get-ChildItem -Path "K:\LUP\50_Bescheiddruck" -Filter *.pdf -File  
[System.Windows.Forms.MessageBox]::Show("Dateien:`n`n$($doclist.Name -join "`n")")  
141575
Lösung 141575 30.10.2019 aktualisiert um 12:11:02 Uhr
Goto Top
Btw.
$DocList = Get-ChildItem -Path "K:\LUP\50_Bescheiddruck" -Filter *.pdf | Select-Object Name, CreationTime | Where-Object Name -like $env:USERNAME
Das wird übrigens nicht funktionieren außer deine Datei hat genau den Namen des Users inkl. der erweiterung *.pdf . Ein User mit .pdf am Ende seines SAM wirds wohl bei dir nicht geben face-wink...Wenn dann so
$DocList = Get-ChildItem -Path "K:\LUP\50_Bescheiddruck" -Filter *.pdf -File | ?{$_.Basename -like "*$env:USERNAME*"}  
Pat.bat
Pat.bat 30.10.2019 um 12:12:00 Uhr
Goto Top
Ah ok Super, so funktioniert es.

Gibt es noch eine Möglichkeit, das die MessageBox breit genug ist, das der Name einer PDF Datei in einer Zeile ist? Wenn ich deinen Code so nehme, dann macht er das, aber wenn ich eine Where Bedingung hinten rann haue, dann macht er die MsgBox schmaler, sodass der Dateiname in 2 Zeilen steht.
141575
141575 30.10.2019 aktualisiert um 12:18:44 Uhr
Goto Top
Ist hier definitiv nicht so, kannst zwar mit Füllzeichen(Leerzeichen) aufüllen, aber ne Msgbox ist ne wahrlich schlechte Wahl für sowas vor allem wenn die Liste länger wird sieht man nicht mehr alles weil es aus dem Bildschirm raus läuft, schau dir stattdessen mal Out-Gridview an, oder bau dir ne eigene Form.
Pat.bat
Pat.bat 30.10.2019 um 12:20:32 Uhr
Goto Top
Werde ich machen, Perfekt wäre das dann, wenn man einzelne Dokumente in der Form auswählen und löschen könnte. Ich schaue mal ob ich das hinbekomme. Hab bis jetzt nur im FormEditor von VS und VB.Net "gebastelt"
Pat.bat
Pat.bat 30.10.2019 um 12:27:41 Uhr
Goto Top
@141575 Eine Sache noch, durch das einbinden von $DocList werden nun sämtliche Sonderzeichen uncodiert ausgegeben, also unschön. Wie bekomme ich das wieder als utf8 kodiert hin?
141575
Lösung 141575 30.10.2019 aktualisiert um 12:29:26 Uhr
Goto Top
Zitat von @Pat.bat:

Werde ich machen, Perfekt wäre das dann, wenn man einzelne Dokumente in der Form auswählen und löschen könnte. Ich schaue mal ob ich das hinbekomme. Hab bis jetzt nur im FormEditor von VS und VB.Net "gebastelt"
Das kannst du sogar mit Out-GridView in der Pipeline machen
Die zu löschenden Files markierst du (auch mehrere mit STRG usw.) dann einfach im Gridview und klickst auf OK. Das -whatif ist hier nur für deinen Testlauf.
gci d:\whatever\*.pdf -File | ogv -OutputMode Multiple | remove-item -WhatIf
141575
141575 30.10.2019 aktualisiert um 12:34:01 Uhr
Goto Top
Zitat von @Pat.bat:

@141575 Eine Sache noch, durch das einbinden von $DocList werden nun sämtliche Sonderzeichen uncodiert ausgegeben, also unschön. Wie bekomme ich das wieder als utf8 kodiert hin?
Nö, geht out of the Box :-P, du solltest mal dein Konsolenencoding prüfen...

screenshot
MrCount
MrCount 31.10.2019 um 09:24:32 Uhr
Goto Top