Powershell Gui
Moin Zusammen,
ich bin gerade bissel am Powershell basteln.
Jetzt möchte ich z.B. sowas:
in einer Messagebox ausgeben, aber die Ausgabe ist leer. In einer PS direkt geht es problemlos.
Mache ich es ohne das select bekomme ich nur meine Laufwerke ausgegeben in der Messagebox.
Jemand eine Idee wie ich solche gefilterten Ergebnisse ausgeben kann?
Danke, Grüße
ich bin gerade bissel am Powershell basteln.
Jetzt möchte ich z.B. sowas:
Get-BitLockerVolume | select MountPoint, ProtectionStatus
in einer Messagebox ausgeben, aber die Ausgabe ist leer. In einer PS direkt geht es problemlos.
Mache ich es ohne das select bekomme ich nur meine Laufwerke ausgegeben in der Messagebox.
Jemand eine Idee wie ich solche gefilterten Ergebnisse ausgeben kann?
Danke, Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667433
Url: https://administrator.de/contentid/667433
Ausgedruckt am: 19.12.2024 um 03:12 Uhr
10 Kommentare
Neuester Kommentar
Moin,
dein Wert ist vermutlich/ scheinbar ein Array.
Probiere es einmal so:
https://community.spiceworks.com/topic/1974262-textbox-format-text-each- ...
Gruß
em-pie
dein Wert ist vermutlich/ scheinbar ein Array.
Probiere es einmal so:
https://community.spiceworks.com/topic/1974262-textbox-format-text-each- ...
$computers = (PC-1, PC-2, PC-3)
$outputBox.AppendText( ($computers | foreach {$_ + "`n" } ) )
Gruß
em-pie
Servus
Du musst aus den Objects einen String machen, Objekte mit diversen Eigenschaften und Typen stellt eine Messagbox verständlicherweise nicht dar 😉
Alternativ ohne Messagebox sondern gleich als GridView
Grüße Uwe
Du musst aus den Objects einen String machen, Objekte mit diversen Eigenschaften und Typen stellt eine Messagbox verständlicherweise nicht dar 😉
$bitlockerstatus = Get-BitLockerVolume | ft MountPoint, ProtectionStatus -AutoSize | out-string
Get-BitLockerVolume | select MountPoint, ProtectionStatus | ogv
Hab's es mal so hingerotzt (hoffe, @colinardo erschlägt mich nicht )
du kannst das mit der function aber auch seinlassen und stattdessen direkt ein
Formatieren müsstest du es dann noch selbst
function GetBitlockerInfo(){
$bitlockerstatus = Get-BitLockerVolume | select MountPoint, ProtectionStatus
$objTextBox.AppendText(( $bitlockerstatus ) )
return $bitlockerstatus
}
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$objForm = New-Object System.Windows.Forms.Form
$objForm.Backcolor="white"
$objForm.StartPosition = "CenterScreen"
$objForm.Size = New-Object System.Drawing.Size(800,500)
$objForm.Text = "Settingschecker"
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(300,60)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.Text = "Bitte geben sie einen Text ein:"
$objForm.Controls.Add($objLabel)
$objTextBox = New-Object System.Windows.Forms.TextBox
$objTextBox.Location = New-Object System.Drawing.Size(300,100)
$objTextBox.Size = New-Object System.Drawing.Size(300,40)
$objForm.Controls.Add($objTextBox)
#OK Button anzeigen lassen
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(500,420)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Name = "OK"
#$OKButton.DialogResult = "OK" # Ansonsten wird Fenster geschlossen
$OKButton.Add_Click{GetBitlockerInfo}
$objForm.Controls.Add($OKButton)
[void] $objForm.ShowDialog()
du kannst das mit der function aber auch seinlassen und stattdessen direkt ein
$OKButton.Add_Click{$objTextBox.AppendText(( Get-BitLockerVolume | select MountPoint, ProtectionStatus ) )}
Formatieren müsstest du es dann noch selbst
> [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
> [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
>
> $OKButton.Add_Click({$bitlockerstatus=Get-BitLockerVolume | select MountPoint, ProtectionStatus
> [void] [Windows.Forms.MessageBox]::Show($bitlockerstatus)
> })
>
Wie soll die arme MessageBox auch ein PSCustomObject anzeigen?
Dafür kann ich in der Dokumentation keine passende Methode entdecken. Des weiteren kann ich nur dazu raten, den Event Handler in eine Function auszulagern. Das macht vieles klarer.
By the way den alten Hut hatten wir hier gefühlt schon hundert mal ...
PowerShell - Liste von Dokumenten in MessageBox ausgeben
Powershell Ausgabe in Messagebox
Powershell : DNS Abfrage : Ausgabe in Textbox
Usw.
Also immer daran denken mit der PS arbeitet man objektorientiert und typisiert, auch wenn einem die Shell viele Konvertierungen automatisch abnimmt muss man die Typen immer im Hinterkopf behalten, sonst stellen die einem gerne ein Bein.
Schönen Abend.
PowerShell - Liste von Dokumenten in MessageBox ausgeben
Powershell Ausgabe in Messagebox
Powershell : DNS Abfrage : Ausgabe in Textbox
Usw.
Also immer daran denken mit der PS arbeitet man objektorientiert und typisiert, auch wenn einem die Shell viele Konvertierungen automatisch abnimmt muss man die Typen immer im Hinterkopf behalten, sonst stellen die einem gerne ein Bein.
Schönen Abend.
Servus,
Hast du eine Idee woran das scheitern könnte?
Ja, erstens ist Add_Click ein Methodenaufruf, ergo werden dort normale Klammern () verwendet. Des weiteren ist der Inhalt des Parameters für das Click-Event ein Objekt vom Typ "Scriptblock" und kein String (man könnte das zwar als String übergeben und mit Invoke-Expression ausführen aber ehrlich gesagt murks):[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#Bitlockerstatus abrufen
function GetBitlockerInfo(){
$bitlockerstatus = Get-BitLockerVolume | ft MountPoint, ProtectionStatus | out-string
return $bitlockerstatus
}
#Fenster erstellen
$objForm = New-Object System.Windows.Forms.Form
$objForm.Backcolor="white"
$objForm.StartPosition = "CenterScreen"
$objForm.Size = New-Object System.Drawing.Size(800,500)
$objForm.Text = "Settingschecker"
function New-Button {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$Location,
[Parameter(Mandatory=$true)]
[string]$Size,
[Parameter(Mandatory=$true)]
[string]$Text = '',
[Parameter(Mandatory=$true)]
[scriptblock]$Add_Click
)
$x = New-Object System.Windows.Forms.Button
$x.Location = $Location
$x.Size = $Size
$x.Text = $Text
$x.Add_Click($Add_Click)
return $x
}
$button = New-Button -Location '250,30' -Size '130,23' -Text 'Bitlockerstatus' -Add_Click {
$status = GetBitlockerInfo
[void][System.Windows.Forms.MessageBox]::Show($status)
}
$objForm.Controls.Add($button)
[void] $objForm.ShowDialog()