Postfachordner mit Powershell Gui erstellen
Guten Morgen,
für verschiedene Anwendungsfälle ist es notwendig z.B. für freigegebene Postfächer, ab und an zusätzliche Ordner anzulegen.
Hierfür wollte ich mir gerne ein kleines Skript bauen.
Folgendes habe ich mir zusammengetragen
Das Skript funktioniert soweit auch wunderbar.
Was mir nur fehlt ist in 2. Dropdownfeld würde ich gerne die bereits vorhandenen Postfachordner des im Dropdownfeld 1 ausgewählten User anzeigen lassen.
Ich hatte gedacht, dies mit z.B. $test = Get-MailboxFolder -Identity $objCombobox.SelectedItem -GetChildren -MailFolderOnly abzufragen.
Dies schlägt natürlich fehl, da der Wert für $objCombobox.SelectedItem noch gar nicht da ist.
Zudem bekomme ich vom 2. Dropdownfeld einen Fehler, da in der Variable natürlich nichts drin ist.
Hat jemand von Euch eine Idee wie ich das 2. Dropdownfeld so abbilden kann, dass es die Postfachordner des ausgewählten Users aus Dropdownfeld 1 laden kann?
Alternative wäre natürlich jetzt ein Textfeld zu erstellen und den Postfachordner "händisch" einzugeben, allerdings finde ich das nicht so toll.
Würde mich freuen, wenn da jemand von Euch einen Tipp für mich hätte.
für verschiedene Anwendungsfälle ist es notwendig z.B. für freigegebene Postfächer, ab und an zusätzliche Ordner anzulegen.
Hierfür wollte ich mir gerne ein kleines Skript bauen.
Folgendes habe ich mir zusammengetragen
# Die ersten beiden Befehle holen sich die .NET-Erweiterungen (sog. Assemblys) für die grafische Gestaltung in den RAM.
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
# Die nächste Zeile erstellt aus der Formsbibliothek das Fensterobjekt.
$objForm = New-Object System.Windows.Forms.Form
# Position des Fensters festlegen
$objForm.StartPosition = "CenterScreen"
# Fenstergröße festlegen
$objForm.Size = New-Object System.Drawing.Size(800,800)
# Titelleiste festlegen
$objForm.Text = "Postfachordner erstellen"
#Globale Befehle abschicken um User aus dem AD in $user zu laden (siehe dropdown)
$user = Get-ADUser -Filter * -SearchBase "DC=contoso,DC=com" | Select -ExpandProperty SamAccountName
#Ordnerhirachie eines Postfachs auslesen
#$test = Get-MailboxFolder -Identity $objCombobox.SelectedItem -GetChildren -MailFolderOnly
#Button erstellen
#OK Button
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(550,720)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Name = "OK"
$OKButton.DialogResult = "OK"
$OKButton.Add_Click({New-MailboxFolder -Parent "$($objCombobox.SelectedItem):\$($objComboboxpostfach.SelectedItem)" -Name ($objTextBoxNeuerOrdner.Text)})
$objForm.Controls.Add($OKButton)
#Abbrechen Button
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(650,720)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Abbrechen"
$CancelButton.Name = "Abbrechen"
$CancelButton.DialogResult = "Cancel"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)
#Textfeld erstellen
#Neuer Ordner
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(28,175)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.Text = "Bitte den Namen des neues Ordners angeben"
$objLabel.Name = "Bitte den Namen des neues Ordners angeben"
$objForm.Controls.Add($objLabel)
$objTextBoxNeuerOrdner = New-Object System.Windows.Forms.TextBox
$objTextBoxNeuerOrdner.Location = New-Object System.Drawing.Size(30,195)
$objTextBoxNeuerOrdner.Size = New-Object System.Drawing.Size(200,20)
$objForm.Controls.Add($objTextBoxNeuerOrdner)
$objTextBoxNeuerOrdner.Text = "z.B. Projekte"
#############################################################################################################
#Drop Down Feld erstellen
#User aus dem Ad anzeigen
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(28,60)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.Text = "Bitte Benutzernamen wählen:"
$objForm.Controls.Add($objLabel)
$objCombobox = New-Object System.Windows.Forms.Combobox
$objCombobox.Location = New-Object System.Drawing.Size(30,80)
$objCombobox.Size = New-Object System.Drawing.Size(200,20)
$objCombobox.Height = 70
$objForm.Controls.Add($objCombobox)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
$objCombobox.Items.AddRange($user) #User werden aus der Variable geladen und angezeigt
$objCombobox.SelectedItem #ausgewählter Username wird übernommen
#Postfachordner werden ausgelesen und angezeigt
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(28,120)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.Text = "Postfachordner wählen:"
$objForm.Controls.Add($objLabel)
$objComboboxpostfach = New-Object System.Windows.Forms.Combobox
$objComboboxpostfach.Location = New-Object System.Drawing.Size(30,140)
$objComboboxpostfach.Size = New-Object System.Drawing.Size(200,20)
$objComboboxpostfach.Height = 70
$objForm.Controls.Add($objComboboxpostfach)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
$objComboboxpostfach.Items.AddRange($test) #User werden aus der Variable geladen und angezeigt
$objComboboxpostfach.SelectedItem #ausgewählter Username wird übernommen
######################################################################################################
# Laden des ActiveDirectoryModuls
Import-Module ActiveDirectory
# Ermitteln des Exchangenamens über das AD
$exchange_server = Get-ADObject -LDAPFilter 'objectClass=msExchExchangeServer' -SearchBase (([ADSI]"LDAP://RootDse").configurationNamingContext.ToString()) -Properties networkaddress | select -Expand networkaddress | ?{$_ -match 'ncacn_ip_tcp'} | %{$_.split(":")[1]} | select -First 1
if (!$exchange_server){Write-Host "Could not determine Exchange Server from AD" -ForegroundColor Red; return}
# Verbindung zum Exchange herstellen
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://$exchange_server/powershell" -Authentication Kerberos
Import-PSSession $session -DisableNameChecking -AllowClobber | out-null
# Load ActiveDirectory module
Import-Module ActiveDirectory
# Load Exchange environment
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
[void] $objForm.ShowDialog()
Das Skript funktioniert soweit auch wunderbar.
Was mir nur fehlt ist in 2. Dropdownfeld würde ich gerne die bereits vorhandenen Postfachordner des im Dropdownfeld 1 ausgewählten User anzeigen lassen.
Ich hatte gedacht, dies mit z.B. $test = Get-MailboxFolder -Identity $objCombobox.SelectedItem -GetChildren -MailFolderOnly abzufragen.
Dies schlägt natürlich fehl, da der Wert für $objCombobox.SelectedItem noch gar nicht da ist.
Zudem bekomme ich vom 2. Dropdownfeld einen Fehler, da in der Variable natürlich nichts drin ist.
Hat jemand von Euch eine Idee wie ich das 2. Dropdownfeld so abbilden kann, dass es die Postfachordner des ausgewählten Users aus Dropdownfeld 1 laden kann?
Alternative wäre natürlich jetzt ein Textfeld zu erstellen und den Postfachordner "händisch" einzugeben, allerdings finde ich das nicht so toll.
Würde mich freuen, wenn da jemand von Euch einen Tipp für mich hätte.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 334131
Url: https://administrator.de/contentid/334131
Ausgedruckt am: 17.11.2024 um 01:11 Uhr
4 Kommentare
Neuester Kommentar
Moin.
Benutze einfach das SelectedIndexChanged Event der ersten Combobox. Im Event holst du dir dann die Ordner und füllst damit die zweite Combobox
https://msdn.microsoft.com/de-de/library/system.windows.forms.combobox.s ...
Grüße Uwe
Benutze einfach das SelectedIndexChanged Event der ersten Combobox. Im Event holst du dir dann die Ordner und füllst damit die zweite Combobox
https://msdn.microsoft.com/de-de/library/system.windows.forms.combobox.s ...
$objCombobox.Add_SelectedIndexChanged({
# hier zweite Box befüllen. Natürlich vorher checken ob Index nicht -1 ist also nichts ausgewählt ist
})
Grüße Uwe
Das liegt am Variable-Scope!
Bitte dazu erst mal die Grundlagen lesen, dann verstehst du warum Variablen in Skriptblocks "{}" und "Funktionen" anders gehandhabt werden.
Folgende Seite ist sehr essentiell für das grundlegende Verstehen von Powershell-Variablen und deswegen solltest du sie sehr aufmerksam durchlesen und mit Üben verinnerlichen:
https://technet.microsoft.com/de-de/library/hh847849.aspx
Bei GUIs arbeitet man deswegen meist mit Globalen Variablen wenn sie aus allen Subexpressions angesprochen und beschrieben werden sollen ($global:varname).
Bitte dazu erst mal die Grundlagen lesen, dann verstehst du warum Variablen in Skriptblocks "{}" und "Funktionen" anders gehandhabt werden.
Folgende Seite ist sehr essentiell für das grundlegende Verstehen von Powershell-Variablen und deswegen solltest du sie sehr aufmerksam durchlesen und mit Üben verinnerlichen:
https://technet.microsoft.com/de-de/library/hh847849.aspx
Bei GUIs arbeitet man deswegen meist mit Globalen Variablen wenn sie aus allen Subexpressions angesprochen und beschrieben werden sollen ($global:varname).