Benutzer mit den meisten Antworten
Powershell GUI Aktion beim klicken auf OK-Button

Frage
-
Hallo zusammen,
Erst einmal, ich bin eine Neuling was Powershell angeht.
Ich möchte eine Skript mit GUI machen bei dem die Gruppenmitglieder ausgelesen werden und in einem auswählbaren Ablageort abgelegt werden können.
Die Eingaben funktionieren, jetzt müsste nur noch das Get-ADGroupMember funktionieren sobald man auf den OKButton klickt.
Wie geht das?
LG Wirzu
Mein Code:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $objForm = New-Object System.Windows.Forms.Form $objForm.StartPosition = "CenterScreen" #TextBox Gruppe $objTextBoxGruppe = New-Object System.Windows.Forms.TextBox $objTextBoxGruppe.Location = New-Object System.Drawing.Size(100,50) $objTextBoxGruppe.Size = New-Object System.Drawing.Size(150,20) $objTextBoxGruppe.Text = "Bitte Gruppe eingeben" $objForm.Controls.Add($objTextBoxGruppe) #Ordner auswählen button $SelectButton = New-Object System.Windows.Forms.Button $SelectButton.Location = New-Object System.Drawing.Size(280,100) $SelectButton.Size = New-Object System.Drawing.Size(75,23) $SelectButton.Text = "Ordner auswählen" $SelectButton.Name = "Ordner auswählen" $SelectButton.Add_Click({$pfad = Read-FolderBrowserDialog; $objTextBoxSpeicherort.Text = $pfad[1] }) $objForm.Controls.Add($SelectButton) #TextBox Speicherort $objTextBoxSpeicherort = New-Object System.Windows.Forms.TextBox $objTextBoxSpeicherort.Location = New-Object System.Drawing.Size(100,100) $objTextBoxSpeicherort.Size = New-Object System.Drawing.Size(150,20) $objForm.Controls.Add($objTextBoxSpeicherort) #Label Gruppe $objLabelGruppe = New-Object System.Windows.Forms.Label $objLabelGruppe.Location = New-Object System.Drawing.Size(10,50) $objLabelGruppe.Size = New-Object System.Drawing.Size(100,20) $objLabelGruppe.Text = "Gruppe:" $objLabelGruppe.Name = "Gruppe" $objForm.Controls.Add($objLabelGruppe) #Label Speicherort $objLabelSpeicherort = New-Object System.Windows.Forms.Label $objLabelSpeicherort.Location = New-Object System.Drawing.Size(10,100) $objLabelSpeicherort.Size = New-Object System.Drawing.Size(100,20) $objLabelSpeicherort.Text = "Speicherort:" $objLabelSpeicherort.Name = "Speicherort" $objForm.Controls.Add($objLabelSpeicherort) #OKbutton $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(75,150) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = "OK" $OKButton.Name = "OK" $OKButton.Add_Click({ $Gruppe = $objTextBoxGruppe.Text #script Get-ADGroupMember -identity $Gruppe | Select distinguishedName |Export-csv -encoding utf8 -path $pfad[1]\$Gruppe.csv }) $objForm.Controls.Add($OKButton) function Read-FolderBrowserDialog() { Add-Type -AssemblyName System.Windows.Forms $openFolderDialog = New-Object System.Windows.Forms.FolderBrowserDialog $openFolderDialog.ShowNewFolderButton = $true $openFolderDialog.ShowDialog() return $openFolderDialog.SelectedPath } [void] $objForm.ShowDialog()
Antworten
-
Hier einmal komplett:
der Index [1] ist nun in die Order-öffnen-Funktion gewandert, dadurch bleibt die $pfad Variable sauber und du kannst unten den kompletten Pfad besser zusammenlegen.
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') $objForm = New-Object System.Windows.Forms.Form $objForm.StartPosition = 'CenterScreen' $objForm.Width = 420 $objForm.Height = 250 #TextBox Gruppe $objTextBoxGruppe = New-Object System.Windows.Forms.TextBox $objTextBoxGruppe.Location = New-Object System.Drawing.Size(100,50) $objTextBoxGruppe.Size = New-Object System.Drawing.Size(150,20) $objTextBoxGruppe.Text = 'Bitte Gruppe eingeben' $objForm.Controls.Add($objTextBoxGruppe) #Ordner auswählen button $SelectButton = New-Object System.Windows.Forms.Button $SelectButton.Location = New-Object System.Drawing.Size(280,100) $SelectButton.Size = New-Object System.Drawing.Size(110,23) $SelectButton.Text = 'Ordner auswählen' $SelectButton.Name = 'Ordner auswählen' $SelectButton.Add_Click({ $pfad = (Read-FolderBrowserDialog)[1]; $objTextBoxSpeicherort.Text = $pfad }) $objForm.Controls.Add($SelectButton) #TextBox Speicherort $objTextBoxSpeicherort = New-Object System.Windows.Forms.TextBox $objTextBoxSpeicherort.Location = New-Object System.Drawing.Size(100,100) $objTextBoxSpeicherort.Size = New-Object System.Drawing.Size(150,20) $objForm.Controls.Add($objTextBoxSpeicherort) #Label Gruppe $objLabelGruppe = New-Object System.Windows.Forms.Label $objLabelGruppe.Location = New-Object System.Drawing.Size(10,50) $objLabelGruppe.Size = New-Object System.Drawing.Size(100,20) $objLabelGruppe.Text = 'Gruppe:' $objLabelGruppe.Name = 'Gruppe' $objForm.Controls.Add($objLabelGruppe) #Label Speicherort $objLabelSpeicherort = New-Object System.Windows.Forms.Label $objLabelSpeicherort.Location = New-Object System.Drawing.Size(10,100) $objLabelSpeicherort.Size = New-Object System.Drawing.Size(100,20) $objLabelSpeicherort.Text = 'Speicherort:' $objLabelSpeicherort.Name = 'Speicherort' $objForm.Controls.Add($objLabelSpeicherort) #OKbutton $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(75,150) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = 'OK' $OKButton.Name = 'OK' $OKButton.Add_Click({ $Gruppe = $objTextBoxGruppe.Text #script $pfadkomplett = $pfad + $Gruppe Get-ADGroupMember -identity $Gruppe | Select-Object distinguishedName | Export-csv -encoding utf8 -path "$pfadkomplett.csv" }) $objForm.Controls.Add($OKButton) function Read-FolderBrowserDialog() { Add-Type -AssemblyName System.Windows.Forms $openFolderDialog = New-Object System.Windows.Forms.FolderBrowserDialog $openFolderDialog.ShowNewFolderButton = $true $openFolderDialog.ShowDialog() return $openFolderDialog.SelectedPath } [void] $objForm.ShowDialog()
Alle Antworten
-
Hallo,
du nutzt $path und auch $path[1] - instanziierst du das irgendwo vorher?
Versuch mal das auszuführen:
$path="" $path[1]
Diesen Pfad benutzt du auch beim ButtonClick. Da sollte also auch auf jeden Fall ne Abfrage drum, ob $path bereits belegt ist.
Kriegst du irgendeine Fehlermeldung? Geht der ButtonClick für den SelectButton?
Greetings,
David das Neves
Technology Specialist - Consulting Services
Computacenter AG & Co. oHG - München
Blog
Caution: This post may contain errors.
-
Hallo,
da Problem ist, dass $pfad beim auswählen vom Ordner auch das OK vom Button speichert. Ich habe dann herausgefunden, dass $pfad[1] nur den gewünschten Pfad ausgibt. Daher benutze ich $pfad[1] dann auch beim Button.
Fehlermeldung:
Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden. In Zeile:61 Zeichen:1 + Get-ADGroupMember -identity $Gruppe | Select distinguishedName |Export-csv -enco ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : NullArray
-
Hier einmal komplett:
der Index [1] ist nun in die Order-öffnen-Funktion gewandert, dadurch bleibt die $pfad Variable sauber und du kannst unten den kompletten Pfad besser zusammenlegen.
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') $objForm = New-Object System.Windows.Forms.Form $objForm.StartPosition = 'CenterScreen' $objForm.Width = 420 $objForm.Height = 250 #TextBox Gruppe $objTextBoxGruppe = New-Object System.Windows.Forms.TextBox $objTextBoxGruppe.Location = New-Object System.Drawing.Size(100,50) $objTextBoxGruppe.Size = New-Object System.Drawing.Size(150,20) $objTextBoxGruppe.Text = 'Bitte Gruppe eingeben' $objForm.Controls.Add($objTextBoxGruppe) #Ordner auswählen button $SelectButton = New-Object System.Windows.Forms.Button $SelectButton.Location = New-Object System.Drawing.Size(280,100) $SelectButton.Size = New-Object System.Drawing.Size(110,23) $SelectButton.Text = 'Ordner auswählen' $SelectButton.Name = 'Ordner auswählen' $SelectButton.Add_Click({ $pfad = (Read-FolderBrowserDialog)[1]; $objTextBoxSpeicherort.Text = $pfad }) $objForm.Controls.Add($SelectButton) #TextBox Speicherort $objTextBoxSpeicherort = New-Object System.Windows.Forms.TextBox $objTextBoxSpeicherort.Location = New-Object System.Drawing.Size(100,100) $objTextBoxSpeicherort.Size = New-Object System.Drawing.Size(150,20) $objForm.Controls.Add($objTextBoxSpeicherort) #Label Gruppe $objLabelGruppe = New-Object System.Windows.Forms.Label $objLabelGruppe.Location = New-Object System.Drawing.Size(10,50) $objLabelGruppe.Size = New-Object System.Drawing.Size(100,20) $objLabelGruppe.Text = 'Gruppe:' $objLabelGruppe.Name = 'Gruppe' $objForm.Controls.Add($objLabelGruppe) #Label Speicherort $objLabelSpeicherort = New-Object System.Windows.Forms.Label $objLabelSpeicherort.Location = New-Object System.Drawing.Size(10,100) $objLabelSpeicherort.Size = New-Object System.Drawing.Size(100,20) $objLabelSpeicherort.Text = 'Speicherort:' $objLabelSpeicherort.Name = 'Speicherort' $objForm.Controls.Add($objLabelSpeicherort) #OKbutton $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(75,150) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = 'OK' $OKButton.Name = 'OK' $OKButton.Add_Click({ $Gruppe = $objTextBoxGruppe.Text #script $pfadkomplett = $pfad + $Gruppe Get-ADGroupMember -identity $Gruppe | Select-Object distinguishedName | Export-csv -encoding utf8 -path "$pfadkomplett.csv" }) $objForm.Controls.Add($OKButton) function Read-FolderBrowserDialog() { Add-Type -AssemblyName System.Windows.Forms $openFolderDialog = New-Object System.Windows.Forms.FolderBrowserDialog $openFolderDialog.ShowNewFolderButton = $true $openFolderDialog.ShowDialog() return $openFolderDialog.SelectedPath } [void] $objForm.ShowDialog()
-
Vielleicht beißen sich da Systemvariablen, ich würde erstmal die Variable $pfad an allen Stellen umbenennen.
Es hilft auch an einer Stelle, an der du einer variable einen Wert zuweist, oder sie verwendest mit einem kurzen
Write-host $VariablenName
den Wert zu überprüfen.