Powershell - Oder Funktion über Text eingabe
Guten Morgen,
ich wollte kurz Fragen, ob die Möglichkeit besteht eine "oder" funktion in die Text eingabe zu legen.
Sprich: Werden Buchstaben einegeben, so soll eine Dokumenten suche öffnen, in der man auch die Datei öffnen kann.
Werden Zahlen einegen, so soll sich direkt das Dokument öffnen.
Mein aktueller Quellcode:
Die Batch Stop Killt PDFXEdit und startet das Powershell programm neu.
Grüße
Fabian
ich wollte kurz Fragen, ob die Möglichkeit besteht eine "oder" funktion in die Text eingabe zu legen.
Sprich: Werden Buchstaben einegeben, so soll eine Dokumenten suche öffnen, in der man auch die Datei öffnen kann.
Werden Zahlen einegen, so soll sich direkt das Dokument öffnen.
Mein aktueller Quellcode:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Gefahrstoff ausgabe'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(100,120)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = 'OK'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Bitte gib einen Namen ein oder Scanne den Barcode'
$form.Controls.Add($label)
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(15,70)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Das Geöffnete Dokument schließt nach 90 sek.'
$form.Controls.Add($label)
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$x = $textBox.Text
$x = Start-Process "C:\Program Files\Tracker Software\PDF Editor\PDFXEdit.exe" "C:\Users\Fabbi\Documents\$x.pdf"
$x = Start-Process "C:\Users\Fabbi\Desktop\Stop.bat"
}
Grüße
Fabian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 591683
Url: https://administrator.de/forum/powershell-oder-funktion-ueber-text-eingabe-591683.html
Ausgedruckt am: 04.04.2025 um 20:04 Uhr
13 Kommentare
Neuester Kommentar

if ($x -match '^\d+$'){
# barcode
}Else{
# suche
}
Moin.
Warum das? Lass das doch direkt alles vom Powershell-Script erledigen, dann ploppen da auch nicht ständig irgendwelche Fenster lästig hin und her.
Ich würde die Form erst gar nicht Enden lassten, sondern nur kurzzeitig das Fenster verstecken lassen.
Statt form.AcceptButton und Button.DialogResult einfach das Click-Event des Buttons nutzen:
Gruß Thomas
Warum das? Lass das doch direkt alles vom Powershell-Script erledigen, dann ploppen da auch nicht ständig irgendwelche Fenster lästig hin und her.
Ich würde die Form erst gar nicht Enden lassten, sondern nur kurzzeitig das Fenster verstecken lassen.
Statt form.AcceptButton und Button.DialogResult einfach das Click-Event des Buttons nutzen:
$okButton.Add_Click({
# Fenster verstecken
$Form.Hide()
# Prüfen, Ob Eingabe eine Nummer ist
if ( [int]::TryParse($TextBox.Text,[ref]$Null) ) {
# Dokument öffnen, falls es existiert
if (Test-Path "$HOME\Documents\$($Textbox.text).pdf") {
$Process = Start-Process -PassThru "C:\Program Files\Tracker Software\PDF Editor\PDFXEdit.exe" "$HOME\Documents\$($Textbox.text).pdf"
# warte 90 Sekunden
Start-Sleep 90
# Beende Dokument wieder
Stop-Process -Id $Process.Id
}
}
else {
# Eingabe ist ein Text, mache was auch immer...
}
# Textfeld leeren
$TextBox.Text = ""
# Fenster wieder zeigen
$Form.Show()
$Textbox.Select()
})
Gruß Thomas
Zusammengebaut (und imao etwas übersichtlicher gestaltet) sieht dein Skript hinterher so aus:
Gruß Thomas
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form -Property @{
Text = 'Gefahrstoff ausgabe'
Size = '300,200'
StartPosition = 'CenterScreen'
Topmost = $true
}
$label1 = New-Object System.Windows.Forms.Label -Property @{
Location = '10,20'
Size = '280,20'
Text = 'Bitte gib einen Namen ein oder Scanne den Barcode'
}
$label2 = New-Object System.Windows.Forms.Label -Property @{
Location = '15,70'
Size = '280,20'
Text = 'Das Geöffnete Dokument schließt nach 90 sek.'
}
$textBox = New-Object System.Windows.Forms.TextBox -Property @{
Location = '10,40'
Size = '260,20'
}
$okButton = New-Object System.Windows.Forms.Button -Property @{
Location = '100,120'
Size = '75,23'
Text = 'OK'
}
$okButton.Add_Click({
$Form.Hide()
if ( [int]::TryParse($TextBox.Text,[ref]$Null) ) {
if (Test-Path "$HOME\Documents\$($Textbox.text).pdf") {
$Process = Start-Process -PassThru "C:\Program Files\Tracker Software\PDF Editor\PDFXEdit.exe" "$HOME\Documents\$($Textbox.text).pdf"
Start-Sleep 90
Stop-Process -Id $Process.Id
}
}
else {
# Eingabe ist ein Text, mache was auch immer...
}
$TextBox.Text = ""
$Form.Show()
$Textbox.Select()
}) # Ende $okButton.Add_Click
$form.Controls.AddRange(@($label1,$label2,$textBox,$okButton))
[void]$form.ShowDialog()
Gruß Thomas
Moin Fabian.
Ich vermute mal, es wurde eine Zahl eingegeben, zu der kein passendes PDF existiert - in dem Fall öffnet sich dann einfach das Fenster wieder - in die vorhandene else-Anweisung kann er in dem Fall jedoch nicht reinspringen.
Du könntest dies ebenfalls noch mit einer else Anweisung abfangen.
Zitat von @Fabbise:
gerade ist mir Aufgefallen, das bei einer Zahlen eingabe das Programm zu else springt.
Bei einer reinen Zahleneingabe kann das nicht sein.gerade ist mir Aufgefallen, das bei einer Zahlen eingabe das Programm zu else springt.
Ich vermute mal, es wurde eine Zahl eingegeben, zu der kein passendes PDF existiert - in dem Fall öffnet sich dann einfach das Fenster wieder - in die vorhandene else-Anweisung kann er in dem Fall jedoch nicht reinspringen.
Du könntest dies ebenfalls noch mit einer else Anweisung abfangen.
if ( [int]::TryParse($TextBox.Text,[ref]$Null) ) {
if (Test-Path "$HOME\Documents\$($Textbox.text).pdf") {
$Process = Start-Process -PassThru "C:\Program Files\Tracker Software\PDF Editor\PDFXEdit.exe" "$HOME\Documents\$($Textbox.text).pdf"
Start-Sleep 90
Stop-Process -Id $Process.Id
}
else {
# Zu der eingegebenen Nummer existiert keine passende PDF-Datei...
}
}
else {
# Eingabe ist ein Text, mache was auch immer...
}
Zitat von @Fabbise:
Das ist echt merkwürdig. Hab gerade den zweiten else Befehl eingefügt.
Es wird trotzdem noch zur else (Eingabe Text) gesprungen.
Wie genau sieht deine Eingabe denn aus? Da sind wahrscheinlich noch andere Zeichen drin enthalten.Das ist echt merkwürdig. Hab gerade den zweiten else Befehl eingefügt.
Es wird trotzdem noch zur else (Eingabe Text) gesprungen.
Probier es selbst aus:
[int]::TryParse("6546548",[ref]$NULL)
Du hast den Befehl nicht so in das If-Statement geschrieben oder?! Das war nur zum überprüfen deiner Eingabe gedacht, du musst natürlich weiterhin die Variable $Textbox.Text mit TryParse überprufen lassen, sonst ist es ja egal was du eingibst.
Schreib doch bitte mal, was genau du da vorhin eingegeben hast, sodass er vorhin in die Else-Anweisung gesprungen ist...
Schreib doch bitte mal, was genau du da vorhin eingegeben hast, sodass er vorhin in die Else-Anweisung gesprungen ist...