WSTools_SystemTrayApp.ps1
|
Import-Module WSTools $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) # Declare assemblies Add-Type -AssemblyName PresentationFramework -IgnoreWarnings [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | out-null [System.Reflection.Assembly]::LoadWithPartialName('presentationframework') | out-null [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') | out-null [System.Reflection.Assembly]::LoadWithPartialName('WindowsFormsIntegration') | out-null [System.Reflection.Assembly]::LoadWithPartialName('System.Xml') | out-null #Left click on sys tray icon to display this GUI. Right click will show menu. [xml]$xaml = @" <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStyle="None" Height="300" Width="200" ResizeMode="NoResize" ShowInTaskbar="False" AllowsTransparency="True" Background="Transparent"> <Border BorderBrush="Transparent" BorderThickness="1" Margin="10,10,10,10"> <TabControl> <TabItem Header="Admin Tools"> <Grid Background="#FFE5E5E5"/> </TabItem> <TabItem Header="Sites"> <Grid Background="#FFE5E5E5"/> </TabItem> <TabItem Header="VS Code"> <Grid Background="#FFE5E5E5"> <StackPanel HorizontalAlignment="Left" Height="209" Margin="10,10,0,0" VerticalAlignment="Top" Width="151"> <Button x:Name="VSCode_ButtonCopySettings" Content="Copy settings to profile"/> </StackPanel> </Grid> </TabItem> <TabItem Header="WSTools"> <Grid Background="#FFE5E5E5"/> </TabItem> </TabControl> </Border> </Window> "@ # GUI to load $window = [Windows.Markup.XamlReader]::Load((New-Object System.Xml.XmlNodeReader $xaml)) # XML Declare controls here $WSRestart = $window.findname("WSRestart") $WSRestart.Content = "Restart" $WSExit = $window.findname("WSExit") $WSExit.Content = "Exit" # Add an icon to the systray button $iconBase64 = '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' $iconBytes = [Convert]::FromBase64String($iconBase64) $stream = New-Object IO.MemoryStream($iconBytes, 0, $iconBytes.Length) $stream.Write($iconBytes, 0, $iconBytes.Length); #$iconImage = [System.Drawing.Image]::FromStream($stream, $true) $icon = [System.Drawing.Icon]::FromHandle((New-Object System.Drawing.Bitmap -Argument $stream).GetHIcon()) #$if = "$PSScriptRoot\WSTools.ico" #$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($if) # Create object for the systray $Systray_Tool_Icon = New-Object System.Windows.Forms.NotifyIcon # Text displayed when you pass the mouse over the systray icon $Systray_Tool_Icon.Text = "WSTools" # Systray icon $Systray_Tool_Icon.Icon = $icon $Systray_Tool_Icon.Visible = $true # Admin Tools menu item displayed in the Context menu $MenuAdmin = New-Object System.Windows.Forms.MenuItem $MenuAdmin.Text = "Admin Tools" #If ADSI Edit installed if ((Test-Path "$env:windir\System32\adsiedit.dll") -or (Test-Path "$env:windir\SysWOW64\adsiedit.dll")) { $MenuAdmin_ADSI = $MenuAdmin.MenuItems.Add("ADSI") $MenuAdmin_ADSI.Add_Click({ Open-ADSIEdit }) } #If AD Sites and Services installed if ((Test-Path "$env:windir\System32\dssite.msc") -or (Test-Path "$env:windir\SysWOW64\dssite.msc")) { $MenuAdmin_ADSites = $MenuAdmin.MenuItems.Add("AD Sites and Services") $MenuAdmin_ADSites.Add_Click({ dssite.msc }) } #If AD Users and Computers installed if ((Test-Path "$env:windir\System32\dsa.msc") -or (Test-Path "$env:windir\SysWOW64\dsa.msc")) { $MenuAdmin_ADUC = $MenuAdmin.MenuItems.Add("AD Users and Computers") $MenuAdmin_ADUC.Add_Click({ dsa.msc }) } #Computer Management $MenuAdmin_compmgmt = $MenuAdmin.MenuItems.Add("Computer Management") $MenuAdmin_compmgmt.Add_Click({ compmgmt.msc }) #If DHCP installed if ((Test-Path "$env:windir\System32\dhcpmgmt.msc") -or (Test-Path "$env:windir\SysWOW64\dhcpmgmt.msc")) { $MenuAdmin_DHCP = $MenuAdmin.MenuItems.Add("DHCP") $MenuAdmin_DHCP.Add_Click({ dhcpmgmt.msc }) } #Disc Management $MenuAdmin_diskmgmt = $MenuAdmin.MenuItems.Add("Disk Management") $MenuAdmin_diskmgmt.Add_Click({ diskmgmt.msc }) #If DNS installed if ((Test-Path "$env:windir\System32\dnsmgmt.msc") -or (Test-Path "$env:windir\SysWOW64\dnsmgmt.msc")) { $MenuAdmin_DNS = $MenuAdmin.MenuItems.Add("DNS") $MenuAdmin_DNS.Add_Click({ dnsmgmt.msc }) } #If GPO Mgmt installed if ((Test-Path "$env:windir\System32\gpmc.msc") -or (Test-Path "$env:windir\SysWOW64\gpmc.msc")) { $MenuAdmin_GPMC = $MenuAdmin.MenuItems.Add("Group Policy Management") $MenuAdmin_GPMC.Add_Click({ gpmc.msc }) } #If Local Admin Password Solution console installed if (Test-Path "$env:ProgramFiles\LAPS\AdmPwd.UI") { $MenuAdmin_LAPS = $MenuAdmin.MenuItems.Add("LAPS console") $MenuAdmin_LAPS.Add_Click({ Start-Process 'C:\Program Files\LAPS\AdmPwd.UI' }) } #Local Policy Editor if ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { $MenuAdmin_LPolicy = $MenuAdmin.MenuItems.Add("Local Policy Editor") $MenuAdmin_LPolicy.Add_Click({ gpedit.msc }) } # Sites menu item displayed in the Context menu $MenuSites = New-Object System.Windows.Forms.MenuItem $MenuSites.Text = "Sites" #If CM Library config item not blank if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).CMLibrary))) { $MenuSites_CMLibrary = $MenuSites.MenuItems.Add("CM Library") $MenuSites_CMLibrary.Add_Click({ Open-CMLibrary }) } #If Exchange Admin Console config item not blank if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).EAC))) { $MenuSites_EAC = $MenuSites.MenuItems.Add("Exchange Admin Console") $MenuSites_EAC.Add_Click({ Open-EAC }) } #If HomeAssistant config item not blank if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).HomeAssistant))) { $MenuSites_HomeAssistant = $MenuSites.MenuItems.Add("Home Assistant") $MenuSites_HomeAssistant.Add_Click({ Open-HomeAssistant }) } #If iLO config item not blank if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).iLO))) { $MenuSites_iLO = $MenuSites.MenuItems.Add("iLO") $MenuSites_iLO.Add_Click({ Open-iLO }) } #If LMC config item not blank (aka LexmarkManagementConsole) and print release if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).LMC))) { $MenuSites_LMC = $MenuSites.MenuItems.Add("Lexmark Management Console") $MenuSites_LMC.Add_Click({ Open-LexmarkManagementConsole }) } if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).PrintRelease))) { $MenuSites_PrintRelease = $MenuSites.MenuItems.Add("Lexmark Print Release") $MenuSites_PrintRelease.Add_Click({ Open-PrintRelease }) } #If Remedy config item not blank if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).Remedy))) { $MenuSites_EITSM = $MenuSites.MenuItems.Add("EITSM") $MenuSites_EITSM.Add_Click({ Open-EITSM }) } #If SDNManagement config item not blank if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).SDNMgmt))) { $MenuSites_SDNMgmt = $MenuSites.MenuItems.Add("SDN Management") $MenuSites_SDNMgmt.Add_Click({ Open-SDNMgmt }) } #If vCenter config item not blank if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).vCenter))) { $MenuSites_vCenter = $MenuSites.MenuItems.Add("vCenter") $MenuSites_vCenter.Add_Click({ Open-vCenter }) } #Visual Studio Code menu if (Test-Path "$env:ProgramFiles\Microsoft VS Code\Code.exe") { $vsci = $true $MenuVSCode = New-Object System.Windows.Forms.MenuItem $MenuVSCode.Text = "VS Code" if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).VSCodeSettingsPath))) { $MenuVSCode_VSCCSettings = $MenuVSCode.MenuItems.Add("Copy settings to profile") $MenuVSCode_VSCCSettings.Add_Click({ Copy-VSCodeSettingsToProfile }) } $MenuVSCode_VSCSnippets = $MenuVSCode.MenuItems.Add("Copy PS snippets to profile") $MenuVSCode_VSCSnippets.Add_Click({ Copy-PowerShellJSON }) $MenuVSCode_VSCESettings = $MenuVSCode.MenuItems.Add("Edit settings") $MenuVSCode_VSCESettings.Add_Click({ code "$env:APPDATA\Code\User\settings.json" }) if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).VSCodeExtRepo))) { $MenuVSCode_VSCExtensions = $MenuVSCode.MenuItems.Add("Update extensions from share") $MenuVSCode_VSCExtensions.Add_Click({ Copy-VSCodeExtensions }) } } else { $vsci = $false } # WSTools menu displayed in the Context menu $MenuWSTools = New-Object System.Windows.Forms.MenuItem $MenuWSTools.Text = "WSTools" #About $MenuWSTools_About = $MenuWSTools.MenuItems.Add("About") $MenuWSTools_About.Add_Click({ $i = Get-WSToolsVersion $version = $i.WSToolsVersion.ToString() $mdate = $i.Date [System.Windows.Forms.MessageBox]::Show("Version: $version`rDate: $mdate") }) #Set preferences $MenuWSTools_Preferences = $MenuWSTools.MenuItems.Add("Set preferences") $MenuWSTools_Preferences.Add_Click({ Set-Preferences }) #Set Remediation Values $MenuWSTools_Remediation = $MenuWSTools.MenuItems.Add("Set remediation values (admin)") $MenuWSTools_Remediation.Add_Click({ Start-Process powershell.exe -ArgumentList {Set-RemediationValues} -Verb RunAs }) #Server config - only if a DC or Server $pt = Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object ProductType -ExpandProperty ProductType if ('2','3' -contains $pt) { $MenuWSTools_ServerConfig = $MenuWSTools.MenuItems.Add("Set server config (admin)") $MenuWSTools_ServerConfig.Add_Click({ Start-Process powershell.exe -ArgumentList {Set-ServerConfig} -Verb RunAs }) } #Stop app services if (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).AppNames))) { $MenuWSTools_StopApps = $MenuWSTools.MenuItems.Add("Stop app services") $MenuWSTools_StopApps.Add_Click({ Stop-AppService }) } #Update Visio if ((Test-Path ([System.Environment]::GetFolderPath("MyDocuments") + "\My Shapes")) -and (!([string]::IsNullOrWhiteSpace(($Global:WSToolsConfig).Stencils)))) { $MenuWSTools_VisioSt = $MenuWSTools.MenuItems.Add("Visio - Update Stencils from share") $MenuWSTools_VisioSt.Add_Click({ Update-VisioStencils }) } # Restart menu item in the Context menu - This will kill the systray tool and launched it again in 10 seconds $Menu_Restart_Tool = New-Object System.Windows.Forms.MenuItem $Menu_Restart_Tool.Text = "Restart GUI" # Exit menu item in the Context menu - This will close the systray tool $Menu_Exit = New-Object System.Windows.Forms.MenuItem $Menu_Exit.Text = "Close" # Create the context menu for all base menus above $contextmenu = New-Object System.Windows.Forms.ContextMenu $Systray_Tool_Icon.ContextMenu = $contextmenu $Systray_Tool_Icon.contextMenu.MenuItems.AddRange($MenuAdmin) $Systray_Tool_Icon.contextMenu.MenuItems.AddRange($MenuSites) if ($vsci) {$Systray_Tool_Icon.contextMenu.MenuItems.AddRange($MenuVSCode)} $Systray_Tool_Icon.contextMenu.MenuItems.AddRange($MenuWSTools) #$Systray_Tool_Icon.contextMenu.MenuItems.AddRange($Menu_Restart_Tool) $Systray_Tool_Icon.contextMenu.MenuItems.AddRange($Menu_Exit) # Action after clicking on the systray icon - This will display the GUI mentioned above #$Systray_Tool_Icon.Add_Click({ # If ($_.Button -eq [Windows.Forms.MouseButtons]::Left) { # $window.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$window.Width) # $window.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$window.Height) # $window.Show() # $window.Activate() # } #}) # When Restart the tool is clicked, close everything and kill the PowerShell process then open again the tool $Menu_Restart_Tool.add_Click({ Start-Process powershell.exe -ArgumentList "`$host.ui.RawUI.WindowTitle = 'WSTools Taskbar App'; D:\OneDrive\Projects\Scripting\NeedToWorkOn\WSTools_GUI.ps1" $Systray_Tool_Icon.Visible = $false $window.Close() # $window_Config.Close() Stop-Process $pid $Global:Timer_Status = $timer.Enabled If ($Timer_Status -eq $true) { $timer.Stop() } }) $WSRestart.add_Click({ Start-Process powershell.exe -ArgumentList "`$host.ui.RawUI.WindowTitle = 'WSTools Taskbar App'; D:\OneDrive\Projects\Scripting\NeedToWorkOn\WSTools_GUI.ps1" $Systray_Tool_Icon.Visible = $false $window.Close() # $window_Config.Close() Stop-Process $pid $Global:Timer_Status = $timer.Enabled If ($Timer_Status -eq $true) { $timer.Stop() } }) # When Exit is clicked, close everything and kill the PowerShell process $Menu_Exit.add_Click({ $Systray_Tool_Icon.Visible = $false $window.Close() # $window_Config.Close() Stop-Process $pid $Global:Timer_Status = $timer.Enabled If ($Timer_Status -eq $true) { $timer.Stop() } }) $WSExit.add_Click({ $Systray_Tool_Icon.Visible = $false $window.Close() # $window_Config.Close() Stop-Process $pid $Global:Timer_Status = $timer.Enabled If ($Timer_Status -eq $true) { $timer.Stop() } }) # Make PowerShell Disappear $windowcode = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);' $asyncwindow = Add-Type -MemberDefinition $windowcode -name Win32ShowWindowAsync -namespace Win32Functions -PassThru $null = $asyncwindow::ShowWindowAsync((Get-Process -PID $pid).MainWindowHandle, 0) # Force garbage collection just to start slightly lower RAM usage. [System.GC]::Collect() # Create an application context for it to all run within. # This helps with responsiveness, especially when clicking Exit. $appContext = New-Object System.Windows.Forms.ApplicationContext [void][System.Windows.Forms.Application]::Run($appContext) |