Powershell Inputbox
Moin zusammen,
ich hänge gerade an folgendem Problem fest:
ich möchte eine Input-Box haben, mit der ich ein Datum abfrage. Das klappt auch ganz gut, nur habe ich noch ein Problem mit dem Rückgabewert:
Das ist das Eingabe Fenster:
allerdings liefert es mir als Rückgabe immer folgenden Wert:
Ich möchte aber nur das Datum haben.
Das bekomme ich auch mit folgendem kniff hin:
Ich würde das aber gerne direkt in der Funktion abstellen
Ich habe auch noch eine andere Lösung gebaut, die ebenfalls funktioniert, allerdings sieht es für mich so aus, als ob sich wegen der Abfrage immer wieder meine Powershell aufhängt. Deshalb möchte ich mal eine andere Variante probieren.
Hier meine andere Funktion
Viele Grüße
Nagus
ich hänge gerade an folgendem Problem fest:
ich möchte eine Input-Box haben, mit der ich ein Datum abfrage. Das klappt auch ganz gut, nur habe ich noch ein Problem mit dem Rückgabewert:
Das ist das Eingabe Fenster:
$datum = Get-Date -Format "dd.MM.yyyy"
function get-input2 ([String]$Advice,[String]$Boxname,$Hint)
{
$AdviceDate = Get-Date -Format "dd.MM.yyyy"
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
$Value = [Microsoft.VisualBasic.Interaction]::InputBox($Advice, $boxname, $AdviceDate)
return $Value
}
$CreationDate = get-input2 "Beschreibung" "Fenster Name" $datum
$creationDate
allerdings liefert es mir als Rückgabe immer folgenden Wert:
GAC Version Location
--- ------- --------
True v4.0.30319 C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.VisualBasic\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll
20.12.2023
Ich möchte aber nur das Datum haben.
Das bekomme ich auch mit folgendem kniff hin:
$creationDate=$CreationDate[1]
Ich habe auch noch eine andere Lösung gebaut, die ebenfalls funktioniert, allerdings sieht es für mich so aus, als ob sich wegen der Abfrage immer wieder meine Powershell aufhängt. Deshalb möchte ich mal eine andere Variante probieren.
Hier meine andere Funktion
function Get-Input ([String]$WindowName,$Textfeld,$Vorschlag)
{
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = $WindowName
$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(75,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)
$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)
$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 = $Textfeld
$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)
$textBox.Text = $Vorschlag
$form.Controls.Add($textBox)
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$x = $textBox.Text
$x
}
}
Viele Grüße
Nagus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82972768029
Url: https://administrator.de/contentid/82972768029
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
3 Kommentare
Neuester Kommentar
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
Add-Type -AssemblyName Microsoft.VisualBasic
Oder gleich das Laden des Assemblies aus der Funktion raus lassen und vorher einmal laden
$datum = Get-Date -Format "dd.MM.yyyy"
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
function get-input2 ([String]$Advice,[String]$Boxname,$Hint){
return [Microsoft.VisualBasic.Interaction]::InputBox($Advice, $boxname, $hint)
}
$CreationDate = get-input2 "Beschreibung" "Fenster Name" $datum
$creationDate
Eine Komfortablere Datumsauswahl wäre das hier:
function GetDateInput {
Add-Type -A System.Windows.Forms
$form = New-Object System.Windows.Forms.Form -P @{ClientSize = '200,80';Text = "Datum wählen"}
$dtpicker = New-Object System.Windows.Forms.DateTimePicker -P @{Location = '10,10';Size = '180,20';Anchor = 'Top,Left,Right'}
$btn = New-Object System.Windows.Forms.Button -P @{Text = "OK";Location = '10,40';Size = '180,30';Anchor = 'Bottom,Left,Right';add_Click = {$form.Close()}}
$form.Controls.AddRange(@($dtpicker,$btn))
[void]$form.ShowDialog()
$dtpicker.Value.Date
}
$creationDate = GetDateInput
$creationDate
[void] ist ein spezieller Typ und bedeutet einfach "nichts von dem Aufruf zurückgeben".
Es geht auch mit Out-Null
Das macht das Gleiche.
Wenn du mal mit c# programmierst siehst du oft sowas:
hier bedeutet das Keyword "void" ebenfalls das die Funktion "main" keinen Rückgabewert hat.
Powershell basiert auf dem NET-Framework. Deswegen ist C# hier sehr eng verwand.
Siehe Doku zu Add-Type
Macht aber nichts, Add-Type macht am Ende das Gleiche wie LoadWithPartialName nur etwas abgewandelt und es ist erst ab Powershell 3.0 vorhanden.
Es geht auch mit Out-Null
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | out-null
Wenn du mal mit c# programmierst siehst du oft sowas:
void main(){}
Powershell basiert auf dem NET-Framework. Deswegen ist C# hier sehr eng verwand.
Damit komme ich im Moment erstmal nicht zurecht. Bei wirft das noch immer den ganzen Rückgabewert aus ....
Kann ich nicht bestätigen. Add-Type gibt nichts zurück.Siehe Doku zu Add-Type
Ausgaben
None
Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.
None
Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.
Macht aber nichts, Add-Type macht am Ende das Gleiche wie LoadWithPartialName nur etwas abgewandelt und es ist erst ab Powershell 3.0 vorhanden.