The estimated reading time 3 minutes

Powershell ISE Menü mit eigenen Funktionen erweitern

Da ich immer wieder projektbezogen in verschiedenen Umgebungen agiere, habe ich mich gefragt ob es möglich ist meine bereits angepasst ISE (mit ISE Steroids) zu erweitern.  Immer wieder benötige ich Remotepowershell in den Umgebungen und musste die Befehle für die Remote Session jedes mal von neuem in meine ISE einbinden.

Deshalb habe ich etwas recherchiert und auch innerhalb von ISE Steroids einiges gefunden was mich weiter gebracht hat.

Sollte natürlich überlegt werden welche Verbindungen / Funktionen hinterlegt werden sollen. In meinem Bespiel ist dies relativ simpel.

Menüstruktur:

|  Remotepowershell

|->Exchange Online

|->DC02

Natürlich müssen für die Verbindung zu Exchange Online bzw. zum DC02 andere Skripts ausgeführt werden.  Aus diesem Grund habe ich für den jeweiligen Menüpunkt eigene Skripts geschrieben.

Zunächst aber mal das Ergebnis:

Durch ISESteroids sieht meine ISE Umgebung etwas anders aus, das Anlegen der Menüstruktur funktioniert trotzdem genau gleich!

Das ISE Menü lässt sich (keiner hätte es für möglich gehalten) per Powershell anpassen /ansteuern.

Zunächst wird nur der Punkt “RemotePowershell” erstellt.

$parent = $psise.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add('RemotePowershell', $null, $null)

Um nun einen Unterpunkt innerhalb von Powershell zu erstellen kann folgender Befehl verwendet werden.

$parent.Submenus.Add('Open-ExchangeOnline',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\RemotePS\ExchangeOnline.ps1"}, $null)

In meinem Fall führe ich ein weiteres Powershell Skript aus, welches sich hinter dem Button verbirgt.

Dieses liegt im gleichen Ordner wie das Profil Powershell Skript siehe hierzu Infos: Technet Blog 

Mit “Invoke-Expression” wird das Powershell Skript im Pfad beim draufklicken ausgeführt. Hier ist natürlich ebenfalls die Execution Policy zu beachten.

Nun noch ein Blick auf das hinterlegte Powershell Skript, welches aber eigentlich auch nicht besonders ist.

Dies ist Standard und kann ebenfalls im Technet gefunden werden siehe Link.

$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session

Ebenfalls ein Blick auf meine Demo-DC-Powershell-Verbindung

$spwd = ConvertTo-SecureString "XXXXXX" -AsPlainText -Force
$username = "user@domain.com"
$mycred = New-Object System.Management.Automation.PSCredential($username, $spwd)
$remserver = "server.domain.com" 
Enter-PSSession -ComputerName "$remserver" -credential $mycred
$mycred = $null

import-module ActiveDirectory

Innerhalb meiner Demoumgebung habe ich das Passwort im Klartext hinterlegt, vor die Kommentare kommen, das soll man nicht in Produktivumgebungen machen.

Hier noch ein Ausschnitt aus meinem Profil Skript welches dann in ISE die Verknüpfungen anlegt.

$parent = $psise.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add('RemotePowershell', $null, $null)
$parent.Submenus.Add('Open-ExchangeOnline',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\RemotePS\ExchangeOnline.ps1"}, $null)
$parent.Submenus.Add('Open-DC02',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\RemotePS\RemoteAD-DC02-demo01-it-koehler.ps1"}, $null)

Somit werden bei jedem Start der ISE meine Buttons ins Menü geladen und ich kann bequem Exchange Online oder meinen lokalen DC per Remotepowershell ansteuern.

Viel Spaß.

Print Friendly, PDF & Email
  • Was this Helpful ?
  • yes   no