From fc32b7797dee8f769d4c6b96ca2746cdbb9ceeeb Mon Sep 17 00:00:00 2001 From: Richard Tracy Date: Sun, 15 Jul 2018 09:54:49 -0400 Subject: [PATCH 1/2] fixed original version --- .gitignore | 3 - App/AdminMenu.ps1 => AdminMenu.ps1 | 240 +- ...minMenu.ps1.config => AdminMenu.ps1.config | 21 +- AdminMenu.ps1.names | 10 + App/Assembly/README.md | 3 - App/Configs/AdminMenu.prereqs | 15 - App/Modules/Put Powershell Modules here.txt | 1 - App/Resources/WindowsIcons-license.txt | 62 - App/Scripts/DiskSpaceReport/DiskSpace.jpg | Bin 277102 -> 0 bytes .../DiskSpaceReport/DiskSpace4Blog.ps1 | 143 - .../DiskSpaceReport/DiskUsage_Blog.html | Bin 223362 -> 0 bytes App/Scripts/DiskSpaceReport/SQLAgentJob.jpg | Bin 56451 -> 0 bytes App/Scripts/DiskSpaceReport/ServerList.jpg | Bin 127019 -> 0 bytes App/Scripts/DiskSpaceReport/ServerList.txt | 19 - .../LazyWinAdmin-v0.4/LazyWinAdmin-v0.4.ps1 | 13119 ---------------- App/Scripts/LazyWinAdmin-v0.4/computers.txt | 5 - .../scripts/WmiExplorer.readme.txt | 1 - .../scripts/sydi-server.readme.txt | 1 - .../tools/ADExplorer.readme.txt | 1 - .../LazyWinAdmin-v0.4/tools/paexec.readme.txt | 57 - .../LazyWinAdmin-v0.4/tools/psexec.readme.txt | 32 - App/Scripts/PoshCAT_0.2/Commands.xml | 60 - App/Scripts/PoshCAT_0.2/PoshCAT.log | 1 - App/Scripts/PoshCAT_0.2/SharedFunctions.ps1 | 92 - App/Scripts/PoshCAT_0.2/Start-PoshCAT.ps1 | 893 -- App/Scripts/PoshCAT_0.2/WorkerFunctions.ps1 | 1309 -- App/Utilities/README | 9 - Assembly/MahApps.Metro.dll | Bin 0 -> 849408 bytes Assembly/System.Windows.Interactivity.dll | Bin 0 -> 39936 bytes .../Extensions => Extensions}/ADFunctions.ps1 | 60 +- .../AdminMenuExtensions.ps1 | 63 +- .../AdminMenuPrereqOptions.ps1 | 2008 +-- .../AdminMenuPrereqOptions.ps1.config | 0 .../ExchangeLyncFunctions.ps1 | 632 +- .../ImageBase64Resources.ps1 | 1690 +- .../SCCMFunctions.ps1 | 3730 ++--- .../SystemFunctions.ps1 | 1508 +- .../TabControl/AdminMenu-Tab1.ps1 | 1256 +- .../TabControl/AdminMenu-Tab2.ps1 | 1188 +- .../TabControl/AdminMenu-Tab3.ps1 | 1060 +- .../TabControl/AdminMenu-Tab4.ps1 | 1054 +- .../TabControl/AdminMenu-Tab5.ps1 | 1094 +- .../TabControl/AdminMenu-Tab6.ps1 | 998 +- .../TabControl/AdminMenu-Tabs.prereq | 32 +- .../Tools}/BypassCAC.vbs | 0 .../Tools}/ClipboardHistoryViewer.ps1 | 0 .../Tools}/Connect-Mstsc.ps1 | 0 .../Tools}/Convert-Image.ps1 | 0 .../Tools}/DiskSpaceTool.ps1 | 0 .../Tools}/Generate-Password.ps1 | 0 .../Tools}/Get-SystemInfo.ps1 | Bin .../Tools}/GetDiskSpaceMultipleComputers.ps1 | Bin .../Tools}/Invoke-Runspace.ps1 | 0 .../Tools}/NetworkPing.ps1 | Bin Extensions/Tools/PSObjectBrowser.ps1 | 5842 +++++++ .../Tools}/PowerCopy.ps1 | 0 .../Tools}/Show-PSHelpTree.ps1 | 0 .../Tools}/ThumbnailPhotoManager.ps1 | Bin LICENSE.md | 674 - App/license.txt => License.txt | 80 +- README.md | 53 - {App/Resources => Resources}/About.xaml | 66 +- .../AppHide-MahApps.xaml | 145 +- {App/Resources => Resources}/AppHide.xaml | 102 +- .../AppOpen-MahApps.xaml | 147 +- {App/Resources => Resources}/AppOpen.xaml | 104 +- {App/Resources => Resources}/BureauBlue.xaml | 7672 ++++----- .../CredentialWindow.xaml | 112 +- {App/Resources => Resources}/Icons.xaml | 10264 ++++++------ .../ListboxWindow.xaml | 74 +- .../MainWindow-MahApps.xaml | 1882 +-- {App/Resources => Resources}/MainWindow.xaml | 1618 +- .../QuickAccessVertical.xaml | 120 +- {App/Resources => Resources}/icon_48px.ico | Bin {App/Resources => Resources}/icon_512px.ico | Bin Utilities/CMTrace.exe | Bin 0 -> 678584 bytes Utilities/NetCalc.exe | Bin 0 -> 32768 bytes Utilities/putty.exe | Bin 0 -> 531368 bytes 78 files changed, 25376 insertions(+), 36049 deletions(-) delete mode 100644 .gitignore rename App/AdminMenu.ps1 => AdminMenu.ps1 (84%) rename App/Configs/AdminMenu.ps1.config => AdminMenu.ps1.config (94%) create mode 100644 AdminMenu.ps1.names delete mode 100644 App/Assembly/README.md delete mode 100644 App/Configs/AdminMenu.prereqs delete mode 100644 App/Modules/Put Powershell Modules here.txt delete mode 100644 App/Resources/WindowsIcons-license.txt delete mode 100644 App/Scripts/DiskSpaceReport/DiskSpace.jpg delete mode 100644 App/Scripts/DiskSpaceReport/DiskSpace4Blog.ps1 delete mode 100644 App/Scripts/DiskSpaceReport/DiskUsage_Blog.html delete mode 100644 App/Scripts/DiskSpaceReport/SQLAgentJob.jpg delete mode 100644 App/Scripts/DiskSpaceReport/ServerList.jpg delete mode 100644 App/Scripts/DiskSpaceReport/ServerList.txt delete mode 100644 App/Scripts/LazyWinAdmin-v0.4/LazyWinAdmin-v0.4.ps1 delete mode 100644 App/Scripts/LazyWinAdmin-v0.4/computers.txt delete mode 100644 App/Scripts/LazyWinAdmin-v0.4/scripts/WmiExplorer.readme.txt delete mode 100644 App/Scripts/LazyWinAdmin-v0.4/scripts/sydi-server.readme.txt delete mode 100644 App/Scripts/LazyWinAdmin-v0.4/tools/ADExplorer.readme.txt delete mode 100644 App/Scripts/LazyWinAdmin-v0.4/tools/paexec.readme.txt delete mode 100644 App/Scripts/LazyWinAdmin-v0.4/tools/psexec.readme.txt delete mode 100644 App/Scripts/PoshCAT_0.2/Commands.xml delete mode 100644 App/Scripts/PoshCAT_0.2/PoshCAT.log delete mode 100644 App/Scripts/PoshCAT_0.2/SharedFunctions.ps1 delete mode 100644 App/Scripts/PoshCAT_0.2/Start-PoshCAT.ps1 delete mode 100644 App/Scripts/PoshCAT_0.2/WorkerFunctions.ps1 delete mode 100644 App/Utilities/README create mode 100644 Assembly/MahApps.Metro.dll create mode 100644 Assembly/System.Windows.Interactivity.dll rename {App/Extensions => Extensions}/ADFunctions.ps1 (97%) rename {App/Extensions => Extensions}/AdminMenuExtensions.ps1 (94%) rename {App/Extensions => Extensions}/AdminMenuPrereqOptions.ps1 (97%) rename {App/Extensions => Extensions}/AdminMenuPrereqOptions.ps1.config (100%) rename {App/Extensions => Extensions}/ExchangeLyncFunctions.ps1 (94%) rename {App/Extensions => Extensions}/ImageBase64Resources.ps1 (98%) rename {App/Extensions => Extensions}/SCCMFunctions.ps1 (97%) rename {App/Extensions => Extensions}/SystemFunctions.ps1 (97%) rename {App/Extensions => Extensions}/TabControl/AdminMenu-Tab1.ps1 (97%) rename {App/Extensions => Extensions}/TabControl/AdminMenu-Tab2.ps1 (96%) rename {App/Extensions => Extensions}/TabControl/AdminMenu-Tab3.ps1 (96%) rename {App/Extensions => Extensions}/TabControl/AdminMenu-Tab4.ps1 (96%) rename {App/Extensions => Extensions}/TabControl/AdminMenu-Tab5.ps1 (96%) rename {App/Extensions => Extensions}/TabControl/AdminMenu-Tab6.ps1 (95%) rename {App/Extensions => Extensions}/TabControl/AdminMenu-Tabs.prereq (98%) rename {App/Scripts => Extensions/Tools}/BypassCAC.vbs (100%) rename {App/Scripts => Extensions/Tools}/ClipboardHistoryViewer.ps1 (100%) rename {App/Scripts => Extensions/Tools}/Connect-Mstsc.ps1 (100%) rename {App/Scripts => Extensions/Tools}/Convert-Image.ps1 (100%) rename {App/Scripts => Extensions/Tools}/DiskSpaceTool.ps1 (100%) rename {App/Scripts => Extensions/Tools}/Generate-Password.ps1 (100%) rename {App/Scripts => Extensions/Tools}/Get-SystemInfo.ps1 (100%) rename {App/Scripts => Extensions/Tools}/GetDiskSpaceMultipleComputers.ps1 (100%) rename {App/Scripts => Extensions/Tools}/Invoke-Runspace.ps1 (100%) rename {App/Scripts => Extensions/Tools}/NetworkPing.ps1 (100%) create mode 100644 Extensions/Tools/PSObjectBrowser.ps1 rename {App/Scripts => Extensions/Tools}/PowerCopy.ps1 (100%) rename {App/Scripts => Extensions/Tools}/Show-PSHelpTree.ps1 (100%) rename {App/Scripts => Extensions/Tools}/ThumbnailPhotoManager.ps1 (100%) delete mode 100644 LICENSE.md rename App/license.txt => License.txt (96%) delete mode 100644 README.md rename {App/Resources => Resources}/About.xaml (98%) rename {App/Resources => Resources}/AppHide-MahApps.xaml (94%) rename {App/Resources => Resources}/AppHide.xaml (96%) rename {App/Resources => Resources}/AppOpen-MahApps.xaml (62%) rename {App/Resources => Resources}/AppOpen.xaml (98%) rename {App/Resources => Resources}/BureauBlue.xaml (98%) rename {App/Resources => Resources}/CredentialWindow.xaml (98%) rename {App/Resources => Resources}/Icons.xaml (99%) rename {App/Resources => Resources}/ListboxWindow.xaml (96%) rename {App/Resources => Resources}/MainWindow-MahApps.xaml (98%) rename {App/Resources => Resources}/MainWindow.xaml (99%) rename {App/Resources => Resources}/QuickAccessVertical.xaml (98%) rename {App/Resources => Resources}/icon_48px.ico (100%) rename {App/Resources => Resources}/icon_512px.ico (100%) create mode 100644 Utilities/CMTrace.exe create mode 100644 Utilities/NetCalc.exe create mode 100644 Utilities/putty.exe diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 23c5338..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -Assembly -Modules -Utilities diff --git a/App/AdminMenu.ps1 b/AdminMenu.ps1 similarity index 84% rename from App/AdminMenu.ps1 rename to AdminMenu.ps1 index d2ee6f7..bc51c39 100644 --- a/App/AdminMenu.ps1 +++ b/AdminMenu.ps1 @@ -1,4 +1,4 @@ -#======================================================================== +#======================================================================== # # Title: Admin Run-As Menu # Created: 2016-11-03 @@ -161,6 +161,7 @@ Start-Log -FilePath "$env:LocalAppData\AdminMenu\Logs\$(Get-Date -Format yyyyMMd ## Variables: Script Name and Script Paths [string]$scriptPath = $MyInvocation.MyCommand.Definition [string]$scriptName = [IO.Path]::GetFileNameWithoutExtension($scriptPath) +[string]$scriptFileName = Split-Path -Path $scriptPath -Leaf [string]$scriptRoot = Split-Path -Path $scriptPath -Parent [string]$invokingScript = (Get-Variable -Name 'MyInvocation').Value.ScriptName @@ -180,17 +181,17 @@ Else { [string]$XamlPath = Join-Path -Path $scriptRoot -ChildPath 'Resources' [string]$ModulesPath = Join-Path -Path $scriptRoot -ChildPath 'Modules' [string]$UtilPath = Join-Path -Path $scriptRoot -ChildPath 'Utilities' -[string]$ConfigPath = Join-Path -Path $scriptRoot -ChildPath 'Configs' -[string]$MenuScriptsPath = Join-Path -Path $scriptRoot -ChildPath 'Scripts' # When Using Executable Command Line If ($ConfigCommandLine){ [string]$ConfigFile = Join-Path -Path $scriptRoot -ChildPath $ConfigCommandLine } Else{ - [string]$ConfigFile = Join-Path -Path $ConfigPath -ChildPath 'AdminMenu.ps1.config' + [string]$ConfigFile = Join-Path -Path $scriptRoot -ChildPath 'AdminMenu.ps1.config' } -[string]$NameFile = Join-Path -Path $ConfigPath -ChildPath 'AdminMenu.prereqs' +[string]$NameFile = Join-Path -Path $scriptRoot -ChildPath 'AdminMenu.ps1.names' + +[string]$appAuthor = 'Richard Tracy' #======================================================= # PARSE CONFIG FILE #======================================================= @@ -205,7 +206,6 @@ Else{ [Xml.XmlElement]$xmlMenuOptions = $xmlConfig.Menu_Options [boolean]$AppOptionRequireAdmin = [boolean]::Parse($xmlMenuOptions.Option_RequireAdmin) [boolean]$AppOptionRSATCheck = [boolean]::Parse($xmlMenuOptions.Option_RSATCheck) -[boolean]$AppPrereqCheck = [boolean]::Parse($xmlMenuOptions.Option_PrereqCheck) [boolean]$AppOptionDebugeMode = [boolean]::Parse($xmlMenuOptions.Option_DebugMode) [string]$AppOptionAccent = $xmlMenuOptions.Option_Accent [string]$AppOptionTheme = $xmlMenuOptions.Option_Theme @@ -215,6 +215,7 @@ Else{ [boolean]$AppUIHideButtons = [boolean]::Parse($xmlUIControls.Control_HideUnusedButtons) [boolean]$AppUIHideCredManager = [boolean]::Parse($xmlUIControls.Control_HideCredManager) [boolean]$AppUIHideQuickAccess = [boolean]::Parse($xmlUIControls.Control_HideQuickAccess) +[string]$AppUIQuickAccessPosition = $xmlUIControls.Control_QuickAccessPosition [boolean]$AppUIDisableOptionMenu = [boolean]::Parse($xmlUIControls.Control_DisableUserOption) # Get Menu Configurations [Xml.XmlElement]$xmlMenuConfigs = $xmlConfig.Menu_Configs @@ -224,8 +225,8 @@ Else{ #check if remote config will be used and path is accessible If (($AppUseRemoteConfig) -and (Test-Path $AppRemotePath) -and (!$ForceLocal)){ - [string]$remoteConfig = Join-Path -Path $AppRemotePath -ChildPath '\Configs\AdminMenu.ps1.config' -ErrorAction SilentlyContinue - [string]$remoteNames = Join-Path -Path $AppRemotePath -ChildPath '\Configs\AdminMenu.prereqs' -ErrorAction SilentlyContinue + [string]$remoteConfig = Join-Path -Path $AppRemotePath -ChildPath 'AdminMenu.ps1.config' -ErrorAction SilentlyContinue + [string]$remoteNames = Join-Path -Path $AppRemotePath -ChildPath 'AdminMenu.ps1.names' -ErrorAction SilentlyContinue If (-not (Test-Path $remoteConfig -ErrorAction SilentlyContinue) -and (-not (Test-Path $remoteNames -ErrorAction SilentlyContinue)) ){ If ($AppOptionDebugeMode){Write-Log -Message "Remote config files were not found at: $AppRemotePath; local config will be processed instead" -Severity 2 -OutputHost} [boolean]$AppUseRemoteConfig = $False @@ -595,7 +596,7 @@ $notifyicon.BalloonTipText = $BalloonMsg #Call the balloon notification $ExitItem = New-Object System.Windows.Forms.MenuItem -$ExitItem.Text = "Exit Tool" +$ExitItem.Text = "Exit" # When Exit is clicked, close everything and kill the PowerShell process $ExitItem.add_Click({ $App.Close() @@ -606,103 +607,108 @@ $ExitItem.add_Click({ If(!$envRunningInISE){Stop-Process $pid} }) + $DebugItem = New-Object System.Windows.Forms.MenuItem $DebugItem.Text = "Show Debug Console" -$DebugItem.Add_Click({ - If (Show-PSConsole){ - Hide-PSConsole - $DebugItem.Text = 'Show Debug Console' - } - Else { - Show-PSConsole - $DebugItem.Text = 'Hide Debug Console' - write-host "Use the 'Hide Debug button' from the context menu in the taskbar icon to close this debug window. - `nIf closed with the X button, it will close the menu as well" -ForegroundColor Yellow -BackgroundColor Black - } -}) +$DebugItem.Add_Click({Toggle-PSConsole}) + +$PSOBItem = New-Object System.Windows.Forms.MenuItem +$PSOBItem.Text = "Object Browser" +$PSOBItem.Add_Click({Start-ButtonProcess -ProcessCall ps1 -File "PSObjectBrowser.ps1" -CreateNoWindow}) $AboutItem = New-Object System.Windows.Forms.MenuItem $AboutItem.Text = "About" $AboutItem.Add_Click({Open-AboutWindow}) -$QuickItem = New-Object System.Windows.Forms.MenuItem -$QuickItem.Text = "Quick Access" +#$SeperatorItem = New-Object System.Windows.Forms.SplitContainer +$SeperatorItem1 = New-Object System.Windows.Forms.MenuItem +$SeperatorItem1.Text = "-" -$SeperatorItem = New-Object System.Windows.Forms.MenuItem -$SeperatorItem.Text = "──────────────────" -$SeperatorItem.Enabled = $false +$SeperatorItem2 = New-Object System.Windows.Forms.MenuItem +$SeperatorItem2.Text = "-" -If (!$AppUIHideQuickAccess){ - $contextmenu = New-Object System.Windows.Forms.ContextMenu - $notifyicon.ContextMenu = $contextmenu - If ($AppOptionDebugeMode -and !$envRunningInISE){ - $notifyicon.contextMenu.MenuItems.AddRange(@($DebugItem,$QuickItem,$SeperatorItem,$AboutItem,$ExitItem)) - } - Else { - $notifyicon.contextMenu.MenuItems.AddRange(@($QuickItem,$SeperatorItem,$AboutItem,$ExitItem)) - } - $quickitem.add_Click({Launch-QuickMenu}) -} -Else{ - $contextmenu = New-Object System.Windows.Forms.ContextMenu - $notifyicon.ContextMenu = $contextmenu - If ($AppOptionDebugeMode -and !$envRunningInISE){ - $notifyicon.contextMenu.MenuItems.AddRange(@($DebugItem,$SeperatorItem,$AboutItem,$ExitItem)) - } - Else { - $notifyicon.contextMenu.MenuItems.AddRange(@($AboutItem,$ExitItem)) - } +$contextmenu = New-Object System.Windows.Forms.ContextMenu +$notifyicon.ContextMenu = $contextmenu +If ($AppOptionDebugeMode -and !$envRunningInISE){ + $notifyicon.contextMenu.MenuItems.AddRange(@($DebugItem,$PSOBItem,$SeperatorItem2,$AboutItem,$SeperatorItem1,$ExitItem)) +} +Else { + $notifyicon.contextMenu.MenuItems.AddRange(@($PSOBItem,$SeperatorItem2,$AboutItem,$SeperatorItem1,$ExitItem)) } -# Add a left click that makes the Window appear -# part of the screen, above the notify icon. -$notifyicon.add_Click({ - #if ($_.Button -eq [Windows.Forms.MouseButtons]::Left) { - $App.Add_Closing({$_.Cancel = $True}) - $App.Hide() # ensures the window isn't already open - $App.Add_Closing({$_.Cancel = $False}) - $App.Show() - #} -}) - - +$notifyicon.add_Click({Show-Menu}) +$notifyicon.add_DoubleClick({Show-Menu}) ##*============================== ##* LOAD FORM - Open / Hide App Button ##*============================== -$OApp.Hide() -# reposition each time, in case the resolution or monitor changes $OApp.Topmost = $True -$OApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$OApp.Width)-20 -$OApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$OApp.Height)-15 - - -$OAppbtnOpenApp.add_Click({ - $OApp.Hide() - $HApp.Show() - $HApp.Activate() - - $App.Add_Closing({$_.Cancel = $False}) - $App.Show() -}) - - -$HApp.Show() -# reposition each time, in case the resolution or monitor changes $HApp.Topmost = $True -$HApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$OApp.Width)-20 -$HApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$OApp.Height)-15 -$HAppbtnHideApp.add_Click({ - $HApp.Hide() - $OApp.Show() - $OApp.Activate() +Switch ($AppUIQuickAccessPosition) + { + "BottomLeft" + { + $OApp.Left = 20 + $OApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$OApp.Height)-15 + $HApp.Left = 20 + $HApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$HApp.Height)-15 + } + "BottomCenter" + { + $OApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$OApp.Width)/2 + $OApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$OApp.Height)-15 + $HApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$HApp.Width)/2 + $HApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$HApp.Height)-15 + } + "BottomRight" + { + $OApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$OApp.Width)-20 + $OApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$OApp.Height)-15 + $HApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$HApp.Width)-20 + $HApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$HApp.Height)-15 + } + "TopLeft" + { + $OApp.Left = 20 + $OApp.Top = 30 + $HApp.Left = 20 + $HApp.Top = 30 + } + "TopCenter" + { + $OApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$OApp.Width)/2 + $OApp.Top = 30 + $HApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$HApp.Width)/2 + $HApp.Top = 30 + } + "TopRight" + { + $OApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$OApp.Width)-20 + $OApp.Top = 30 + $HApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$HApp.Width)-20 + $HApp.Top = 30 + } + "LeftCenter" + { + $OApp.Left = 20 + $OApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$OApp.Height)/2 + $HApp.Left = 20 + $HApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$HApp.Height)/2 + } + "RightCenter" + { + $OApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$OApp.Width)-20 + $OApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$OApp.Height)/2 + $HApp.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$HApp.Width)-20 + $HApp.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$HApp.Height)/2 + } + + } - $App.Add_Closing({$_.Cancel = $True}) - $App.Hide() - #$notifyicon.ShowBalloonTip(5) -}) +$OAppbtnOpenApp.add_Click({Show-Menu}) +$HAppbtnHideApp.add_Click({Hide-Menu}) ##*============================== ##* LOAD FORM - APP CONTENT AND BUTTONS @@ -710,7 +716,7 @@ $HAppbtnHideApp.add_Click({ #$App.Opacity = 0.95 #create Local directory for user settings -New-Item "$envLocalAppData\AdminMenu" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null +New-Item "$env:LocalAppData\AdminMenu" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null Write-OutputBox -OutputBoxMessage "Loading $AppTitle [ver. $AppVersion]" -Type "START: " -Object tab1 If ($AppOptionDebugeMode){Get-FormVariables} @@ -759,27 +765,11 @@ Else{ #$WPFbtnOptions.Add_Click({$WPFFlyOutContent.IsOpen = $true}) } -$WPFbtnHide.Add_Click({ - $HApp.Hide() - $OApp.Show() - $OApp.Activate() - - $App.Add_Closing({$_.Cancel = $True}) - $App.Hide() - $notifyicon.ShowBalloonTip(5) -}) +$WPFbtnHide.Add_Click({Hide-Menu -ShowTip}) # Hide the window if it loses focus If ($AppUIHideApp){ - $App.Add_Deactivated({ - $HApp.Hide() - $OApp.Show() - $OApp.Activate() - - $App.Add_Closing({$_.Cancel = $True}) - $App.Hide() - $notifyicon.ShowBalloonTip(5) - }) + $App.Add_Deactivated({Hide-Menu -ShowTip}) } #App Window (top right) Exit button @@ -804,21 +794,10 @@ $App.Add_KeyDown({ Change-TabItem -increment 1 } "UP" { - $OApp.Hide() - $HApp.Show() - $HApp.Activate() - - $App.Add_Closing({$_.Cancel = $False}) - $App.Show() + Show-Menu -OnTop } "DOWN" { - $HApp.Hide() - $OApp.Show() - $OApp.Activate() - - $App.Add_Closing({$_.Cancel = $True}) - $App.Hide() - $notifyicon.ShowBalloonTip(5) + Hide-Menu -ShowTip } Default {$Null} } @@ -863,32 +842,29 @@ $App.Icon = $AppBitmap # Allow input to window for TextBoxes, etc [Void][System.Windows.Forms.Integration.ElementHost]::EnableModelessKeyboardInterop($App) -# Make PowerShell Window Disappear -If(!$envRunningInISE){Hide-PSConsole} # hide the console at start when running exe +If(!$envRunningInISE){ + #Hide-PSConsole # hide the console at start when running exe + # 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) +} -<# -$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) -#> +Show-Menu -OnTop +# Force garbage collection just to start slightly lower RAM usage. [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() -# This makes it pop up -$App.Show() -# This makes it the active window -$App.Activate() | Out-Null - Try{ $AppWindowState = [System.Windows.Forms.FormWindowState]::Normal $App.WindowState = $AppWindowState } Catch { $ErrorMessage = $_.Exception.Message - Write-Host "Unable to set WindosState. May be unsupported in OS version" + Write-Host "Unable to set WindowsState. May be unsupported in OS version" } # 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 -[System.Windows.Forms.Application]::Run($appContext) +[System.Windows.Forms.Application]::Run($appContext) \ No newline at end of file diff --git a/App/Configs/AdminMenu.ps1.config b/AdminMenu.ps1.config similarity index 94% rename from App/Configs/AdminMenu.ps1.config rename to AdminMenu.ps1.config index 382696a..029494a 100644 --- a/App/Configs/AdminMenu.ps1.config +++ b/AdminMenu.ps1.config @@ -6,19 +6,18 @@ Richard Tracy Admin Run-As Menu 3.9.9.3 - 07/14/2018 + 12/8/2016 True True - True True @@ -30,7 +29,12 @@ False False False - True + True + TopCenter + True @@ -52,7 +56,7 @@ AdminMenuExtensions.ps1 AdminMenuPrereqOptions.ps1 - scripts\Invoke-Runspace.ps1 + Tools\Invoke-Runspace.ps1 ImageBase64Resources.ps1 SystemFunctions.ps1 ADFunctions.ps1 @@ -64,9 +68,7 @@ True - + Extensions\TabControl\AdminMenu-Tabs.prereq 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

OTOqMnrPG)@U=X`BMh3^b~$b!zCA0Yl)E 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 literal 0 HcmV?d00001 diff --git a/App/Extensions/ADFunctions.ps1 b/Extensions/ADFunctions.ps1 similarity index 97% rename from App/Extensions/ADFunctions.ps1 rename to Extensions/ADFunctions.ps1 index eb8f44a..5d85232 100644 --- a/App/Extensions/ADFunctions.ps1 +++ b/Extensions/ADFunctions.ps1 @@ -1,31 +1,31 @@ -Function Get-AllDomainControllers{ - If (($IsMachinePartOfDomain) -and ($WPFtxtRSAT.Text -eq 'Yes')){ - Try{ - Import-Module ActiveDirectory - } - Catch { - Write-OutputBox -OutputBoxMessage "Unable to import Active Directory Module" -Type "ERROR: " -Object Tab2 - Return - } - - $domain = [System.Directoryservices.Activedirectory.Domain]::GetCurrentDomain() - $domain | ForEach-Object {$_.DomainControllers} | - ForEach-Object { - $hostEntry= [System.Net.Dns]::GetHostByName($_.Name) - New-Object -TypeName PSObject -Property @{ - Name = $_.Name - IPAddress = $hostEntry.AddressList[0].IPAddressToString - OS = $_.OSVersion - Roles = $_.Roles - Site = $_.SiteName - } - } | Select Name, OS, IPAddress, Site, Roles | Out-GridView -OutputMode Single - - $SelectedDC = $domain | Out-GridView -Title "Domain Controllers [$domain]" -OutputMode Single - $WPFtxtTab2Name1.Text = $SelectedDC.Name - - } - Else{ - Write-OutputBox -OutputBoxMessage "RSAT tools are not installed" -Type "ERROR: " -Object Tab2 - } +Function Get-AllDomainControllers{ + If (($IsMachinePartOfDomain) -and ($WPFtxtRSAT.Text -eq 'Yes')){ + Try{ + Import-Module ActiveDirectory + } + Catch { + Write-OutputBox -OutputBoxMessage "Unable to import Active Directory Module" -Type "ERROR: " -Object Tab2 + Return + } + + $domain = [System.Directoryservices.Activedirectory.Domain]::GetCurrentDomain() + $domain | ForEach-Object {$_.DomainControllers} | + ForEach-Object { + $hostEntry= [System.Net.Dns]::GetHostByName($_.Name) + New-Object -TypeName PSObject -Property @{ + Name = $_.Name + IPAddress = $hostEntry.AddressList[0].IPAddressToString + OS = $_.OSVersion + Roles = $_.Roles + Site = $_.SiteName + } + } | Select Name, OS, IPAddress, Site, Roles | Out-GridView -OutputMode Single + + $SelectedDC = $domain | Out-GridView -Title "Domain Controllers [$domain]" -OutputMode Single + $WPFtxtTab2Name1.Text = $SelectedDC.Name + + } + Else{ + Write-OutputBox -OutputBoxMessage "RSAT tools are not installed" -Type "ERROR: " -Object Tab2 + } } \ No newline at end of file diff --git a/App/Extensions/AdminMenuExtensions.ps1 b/Extensions/AdminMenuExtensions.ps1 similarity index 94% rename from App/Extensions/AdminMenuExtensions.ps1 rename to Extensions/AdminMenuExtensions.ps1 index 072f4ea..758e4e0 100644 --- a/App/Extensions/AdminMenuExtensions.ps1 +++ b/Extensions/AdminMenuExtensions.ps1 @@ -25,7 +25,7 @@ [string]$envLocalAppData = [Environment]::GetFolderPath('LocalApplicationData') [string[]]$envLogicalDrives = [Environment]::GetLogicalDrives() [string]$envProgramFiles = [Environment]::GetFolderPath('ProgramFiles') -[string]$envProgramFilesX86 = ${env:ProgramFiles(x86)} +[string]$envProgramFilesX86 = [Environment]::GetEnvironmentVariable("ProgramFiles(x86)") [string]$envProgramData = [Environment]::GetFolderPath('CommonApplicationData') [string]$envPublic = $env:PUBLIC [string]$envSystemDrive = $env:SYSTEMDRIVE @@ -150,6 +150,20 @@ public static extern IntPtr GetConsoleWindow(); [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow); ' +function Toggle-PSConsole { + if (!($DebugItem.Checked)) { + $DebugItem.Checked = $true + $DebugItem.Text = 'Hide Debug Console' + [System.Windows.Forms.MessageBox]::Show("Use the 'Hide Debug button' in the menu from the taskbar icon to close this debug window.`n`nIf closed with the Exit button, it will close the Admin Run-As Menu as well","Console Warning", + [System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Warning) + Show-PSConsole + } + else { + $DebugItem.Checked = $false + $DebugItem.Text = "Show Debug Console" + Hide-PSConsole + } +} function Show-PSConsole { $consolePtr = [Console.Window]::GetConsoleWindow() @@ -163,6 +177,36 @@ function Hide-PSConsole { return } +function Show-Menu { + Param( + [Parameter(Mandatory=$false)] + [switch]$OnTop = $true + ) + $OApp.Hide() + $HApp.Topmost = $True + $HApp.Show() + $HApp.Activate() + + $App.Add_Closing({$_.Cancel = $False}) + $App.Show() + If($OnTop){$App.Activate()| Out-Null} +} + +function Hide-Menu { + Param( + [Parameter(Mandatory=$false)] + [switch]$ShowTip = $false + ) + $HApp.Hide() + $OApp.Topmost = $True + $OApp.Show() + $OApp.Activate() + + $App.Add_Closing({$_.Cancel = $True}) + $App.Hide() + If($ShowTip){$notifyicon.ShowBalloonTip(5)} +} + Function Get-ErrorInformation { Param($Component) @@ -1094,7 +1138,7 @@ function Start-ButtonProcess{ [Parameter(Mandatory=$false)] $Function, [Parameter(Mandatory=$true)] - [Alias('FilePath')] + [Alias('File')] [ValidateNotNullorEmpty()] [string]$Path, [Alias('Arguments')] @@ -1121,7 +1165,7 @@ function Start-ButtonProcess{ ) Begin { $originalPath = $Path - $ExtensionScriptsPath = Join-Path -Path $ExtensionPath -ChildPath "\Scripts" + $ExtensionScriptsPath = Join-Path -Path $ExtensionPath -ChildPath "\Tools" Switch ($ProcessCall) { @@ -1174,7 +1218,7 @@ function Start-ButtonProcess{ #START PUTTING IT TOGETHER IN HASH #Hash table: dynamically add Param if not null - $ProcessHash = @{FilePath = "$Path"} + $ProcessHash = @{File = "$Path"} # Build Run message $runmsg = "Starting" @@ -1233,7 +1277,7 @@ function Start-ButtonProcess{ } Process { If (($ProcessCall -ne "registry") -and !(Test-Path -LiteralPath $Path -PathType 'Leaf' -ErrorAction 'Stop') ) { - Write-OutputBox -OutputBoxMessage $errmsg -Type "ERROR: " -Object $OutputTab -LogOutput + If ($OutputTab){Write-OutputBox -OutputBoxMessage $errmsg -Type "ERROR: " -Object $OutputTab -LogOutput} Return } Else { @@ -1254,7 +1298,7 @@ function Start-ButtonProcess{ } "invoke" { - $Results = Invoke-Expression -Command $Path + $Results = & $Path Write-Log -Message "Invoking expression to with command [$Path]:" $Results -Severity 1 } @@ -1309,7 +1353,7 @@ function Start-ButtonProcess{ Catch{ $ErrorMessage = $_.Exception.Message If ($AppOptionDebugeMode){Write-Log -Message "failed to start [$ProcessCall] process. The error message was [$ErrorMessage]" -Severity 3 -OutputHost} - Write-OutputBox -OutputBoxMessage "failed to start process. The error message was [$ErrorMessage]" -Type "ERROR: " -Object $OutputTab -LogOutput + If ($OutputTab){Write-OutputBox -OutputBoxMessage "failed to start process. The error message was [$ErrorMessage]" -Type "ERROR: " -Object $OutputTab -LogOutput} } } } @@ -1424,6 +1468,7 @@ Function Save-ComputerList { $SavedPath = "$envLocalAppData\AdminMenu\SAVEDLIST.$TabObject" [scriptblock]$AddBtnScript = { If ((-NOT [string]::IsNullOrEmpty($inputTextBox.text))) { + $Exists = Compare-Object -ReferenceObject $inputTextBox.text (Get-Content $SavedPath) -IncludeEqual -passThru | Where-Object { $_.SideIndicator -eq '==' } if ($inputTextBox.text.split('.')[0].Length -gt 15) { [System.Windows.Forms.MessageBox]::Show('System name cannot be more than 15 characters.','To Long', [System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error) @@ -1433,6 +1478,10 @@ Function Save-ComputerList { [System.Windows.Forms.MessageBox]::Show('System name is invalid, please correct the computer name.','Invalid Characters', [System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error) } + elseif ($Exists){ + [System.Windows.Forms.MessageBox]::Show('System name already exists.','Already Exists', + [System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error) + } else{ $listbox.Items.Add($inputTextBox.text) $inputTextBox.text | Out-File $SavedPath -Append diff --git a/App/Extensions/AdminMenuPrereqOptions.ps1 b/Extensions/AdminMenuPrereqOptions.ps1 similarity index 97% rename from App/Extensions/AdminMenuPrereqOptions.ps1 rename to Extensions/AdminMenuPrereqOptions.ps1 index 15113c4..b46b84b 100644 --- a/App/Extensions/AdminMenuPrereqOptions.ps1 +++ b/Extensions/AdminMenuPrereqOptions.ps1 @@ -1,1005 +1,1005 @@ -# ========================================== -# Functions -# ========================================== -function Load-ComboBox { - <# - .SYNOPSIS - This functions helps you load items into a ComboBox. - - .DESCRIPTION - Use this function to dynamically load items into the ComboBox control. - - .PARAMETER ComboBox - The ComboBox control you want to add items to. - - .PARAMETER Items - The object or objects you wish to load into the ComboBox's Items collection. - - .PARAMETER DisplayMember - Indicates the property to display for the items in this control. - - .PARAMETER Append - Adds the item(s) to the ComboBox without clearing the Items collection. - - .EXAMPLE - Load-ComboBox $combobox1 "Red", "White", "Blue" - - .EXAMPLE - Load-ComboBox $combobox1 "Red" -Append - Load-ComboBox $combobox1 "White" -Append - Load-ComboBox $combobox1 "Blue" -Append - - .EXAMPLE - Load-ComboBox $combobox1 (Get-Process) "ProcessName" - #> - Param ( - [ValidateNotNull()] - [Parameter(Mandatory=$true)] - [System.Windows.Forms.ComboBox]$ComboBox, - [ValidateNotNull()] - [Parameter(Mandatory=$true)] - $Items, - [Parameter(Mandatory=$false)] - [string]$DisplayMember, - [switch]$Append - ) - - if(-not $Append) - { - $ComboBox.Items.Clear() - } - - if($Items -is [Object[]]) - { - $ComboBox.Items.AddRange($Items) - } - elseif ($Items -is [Array]) - { - $ComboBox.BeginUpdate() - foreach($obj in $Items) - { - $ComboBox.Items.Add($obj) - } - $ComboBox.EndUpdate() - } - else - { - $ComboBox.Items.Add($Items) - } - - $ComboBox.DisplayMember = $DisplayMember -} - -# ========================================== -# Load Option Config -# ========================================== -$global:Confpath = Join-Path -Path $ExtensionPath -ChildPath 'AdminMenuPrereqOptions.ps1.config' - - - - -# ========================================== -# Prereq Section -# ========================================== -$InstallPaths = $HashPrereq.InstalledPath -$PrereqPaths = @() -$InstallPaths.Keys | % { - $key = $_ - $InstallPath = $InstallPaths.$key - $obj = New-Object PSobject - $obj | Add-Member Noteproperty Name $key - $obj | Add-Member Noteproperty Path $InstallPath - $PrereqPaths += $obj -} - - - -function Show-UserOptions{ -#region File Recovery Data (DO NOT MODIFY) -<#RecoveryData: -SsoAAB+LCAAAAAAABADtfWmPm1qz7vcrnf/QysfjnI2Z4So7ErMHbDOYyV+2GA0282RjnR9/cQ/Z -3Ul3Ynd3chO9JFJiFqtYQ9UqiodnFZ8U381av+xYu7Y//9f/ubn5tCqjbZTaMR/F/tJO/M+rvI6y -tPorD4JPwDdnb2XOR7pfVn29z+Bf0CfgccHdVZ2d79Y3dZf7f39Qu6r2k7+MKPWyQ/UXn5XJ3b8f -b5479fHm/lJ/I3+Nz38/3jBNXDel/3fqN3Vpxx9vpMaJI3fud+ts76d/Ozhuoy6KgSSM+GOC/HCT -9p39+0PQXw/8cOOGUeyVfb0PTJbWZRZXH2672XdUKrPcL+vuXoByXT+v6aaus/ShTl9L8QO/l3f9 -+2rObYV/VvMPN8DDlYCHS71wacbu5eNLL207WVlfc/U48tNajU7+h88IgXy8QQjyh0Ln6aaz0vNL -te7iXpKPjr7HRnacbX8ovLCPUdK3R2fHXtCOK//HIlF6rcjZ6D58vtXjD+uqtV3WUlZFZwP+8Jnp -J6QfmVv6fvpD2bV/rD/c2/5z1bm2v9qjaWPirPK9+57982/JJ+C25nNiYmb3Aueqt6X/nI+/qv7j -ZSOUWZP38/fTl8723JCTHeHvLZ9v51HMXPtu+kHo4w2M4t9M5Us6/tLgBRL3do6BH2+IS1pY2840 -9fze6r5dFM/WVussf8lEXzIe7tibW+8rb9ZZP0XPif1YvXfu4acr987JQN9X7bfjpG13z2RxVn74 -vC7ttMrtXrR+ZqTPi541nHrTxN76j1vpK9P9PabsPkc6vVIO47mwzaj+z1LVQk7b9r/o/fl4w1BW -/x/LYZa+OxfQgkevNY6iRGEVSLWyP/SFDL1T+dmy/zFh++MdRVCUBKrnE3J/OjD7a60Ssf9JoH2B -4B5P0lSH++P5yohZGaRlWyDHDrzMHJjaqtqSnU7ozoE2uSNoFMXtJulmA+v82uSzQGpND8vc8YGK -5wJctn2vZ/geRHlrs91YzJZld4txpQoRFfK8MssilWe57ZKXZ/yGqxRK00VqMqO22UIJeZ05tkpt -i2XRESQgdqPRqnJG0InEUxwXYckIXWpfuG2MuoJ6EOQulA7bU+diiqBo5rqiphQ9SRhqLtMLfW9j -Jk7jDM3OOgLi04jvqJjgqIDGDPHAuEtJXiD0igZGQc6neTCdZAlFKQm+QPuLKzyyRWZaI4ulI0X5 -1o67YyIwetJGIc25zWxlCAq77rslznfJMskl0Z4e10lagdLGahCdcDaLqRZw0Xw0ZU4rNGUOCnyc -H5UsO8RqGy1HoqVTyIk6UJpqHEyXj2bTnaUsrH3ANXKENBqFcNuZCU9cvTttN1TLxfBsphJA6B4X -Km3KXhzhHrgsbDkI9pu5fqApkaUYq0zcOB2DsKrVq01LHyi+AQhjLUZQPeMVxxrXjj1esvJp0UKF -JpEgAZFzeFnzfpgijeHKZTAScRsgxmFGWYtuZpfSKeqghsnYlSizUzioo/FpS23nauYcYbPFM2m9 -PrSRPKObDDq6+saIQ8E8nKYqD8gSoI0mLSa0beLupQaTiJr2VgG/sKyCEgvEmXfjeO1G6QaTT4bS -YchmNBnRxARINZ/eC65PYcHhuOTDaZLsFrXIiYZzHFnzRtgTqzyAU7REWEIa5QsD5bNUHdG8bCEd -BU60Qp7gNd1t55zKKiNC9wBs2bbt9jCdoCiiFusIlgD8FJAbQoiRyGATgEJPkZaFC0QldguTJNYS -V1A0pW2ZeU5Nuj3lYRTNWpRdbRnwQAs4JQARy9HUTN8uDJVS8y016mQat2gqpxfedkZmdKFRri2v -lxntevTstOVP2VJE6AKhDIwdQZS2ntKpRdsEva1kWuDCxV6lUYbTVVpSQ+KwpRNZajRhpPU9YVyd -YRRK4vYzdCzYmcAUbFHwWEGn2GSXzVLLb+SpJJvGdpFkm1FI4jTDdUzhUGpJac7hcLKYwKblEa27 -1JygK4xnRpTnMqZL0SN+NWJPBGsiy91hLiFSyk0pmVOKKAq3EbuQeULzo/0k4nbYcRLlVD8tfK44 -hSI1crLIysVUIBWBlnlFczdZclTSIpR5qgHpUvN1a14oISh4No1pa0+xsHADcm4/DGgK7gMnE2GZ -87ecR9sYx0O0s5/DWTeKHGyRjufEUaAOywyBjoc0jKY7fpaIhsVVh9GabpOJYPVrGtscoPmRiEOy -pGFjQrQcUzI8xJSV5h83OE1DVFsJCqHmyOJ4wMttNqFG5g5rqYkreAcZDmcpJ/pMQsxqRMARMkVg -6ZAHoRCwwWiVIkw7ZuRZsl3j1DYMmTUz20/jbKMf9gFDEbPZdDbPlNJKaIVBj1NcUP3pEUnWvTzX -qFM/UUxup8wYPqdHexlTTrnY7ONEOxnTXaNmxJYhtmi3APbMSJmgO1nhD/sdoyLTutKESClmrLXf -RY2q+Fosqao5BzdzdB/68qzzG3UBzpC5Os75LknASZELRbLWoqXqklPN1pd5MIo1TBHzKTkz87m3 -r9iZvUiQzpntmaRf7Dy0FuZyyKf+jLF0DtKOWX+t/Vqnjnoyyvm1PTU0fLRjYzrdGPo+JhKhMxwR -rCI/DqF4upbrJHTrUN/MV2PEyUuwD+XXnC3HaRdYcak1QlydRHGjn+KVNOXdBOw8yPA7T4phf71G -nWDmETkAUnRuMyk3j+TcoQPEFpkTLxZa3cTlXOdVhGhb253OR1lOR0mjr7sMmhNIjqkVOhe0MlZj -j+vtMk8SfB65/SCagNugRmZEVgEwuhqbK7vtYgYVPWyejpk2bwNlo2u6vgaN0C7hYrsqmKTc2AVf -jIy8tWXYYFb7BWmWoNtqHqnvl/xhTOzW2JJHUCQx81WY2BGq40vJBVHR6GrXxmojJ22tzjsohu3G -y1qIOkLdLpNWQj4WUr3BBB4SnFJspHrs+CXjhzoWmRnseyZoweA8KHBSCkiKcgy6PrDLbEFvjzN6 -jwmGZddhtBI8YRFM4W63LpZpWJcC527wk9gsADSzEkG16lnm1qR2rNfOcjkaQ4ACL07jUxwnS0gF -T1WZ4CPZOYntwuwA1XQ3Tm3CzmSbiOEGn+hZFURbzNBn3qgDTdFWq0UBFqVhZwq9keWDGkZm6U2M -U205JUduWtw41vTEmogBevIceVmnULSCNbeB43RlLDsiqMFVZ3mtDmXAZjwCdzgF2Du2yFbrqSuE -hL/CMrQ6ds5EVT0v79Q0G+NSqkHuyMXrU7tolhFemgsMnRaIX+6NhoJ6Gy74BjQwCV6aLkceHVhw -SZE9GX5+Oin9Hchf4d1E4lUimaFLs136cY2WgNSQ6gSlpVobnU4QGEjxCHbwg4n7QdmSk+Ikmwve -Gft7CRBhwgMqgF1SK4OWDlZHJQuGOcxaerYXYtmM6WDBaMisDafEqpJRlFX7G164KibMeIYcOofN -qpV9GJmsSYjiYSzvdtFEU8Buqk/L3i/oE6sQmSwvIjQ2kJLEOjfq4woxO/hmYZDztNVjT5sX4NJI -EUzZCRMhnYb8EXEmkywmT4CSLndsipSnyG6WiaFiVWsfU4fzoJXZ2Bbh5sj4JECEYR41IoYYs1rn -4crjokqdncImZcpGHanSTCr2jb0GNgtpZpJzRiNzlTDiY2H76CI97NOEtN08h4yExYIyD/1kZ0Mn -A+f3pw4IwiWkU4Jddc1W0cYuqbUgPWk4DYmTJDA2EjqLqgobq5DHWm1zIici5OGnRG38EQbbIF8a -Ro0T8fq0bIxlaS5tHSd8IxzBbeKzo8xmWGXhSGvLh/drKxZPeQ53a0AUCR1t2SXsmnNar0R6FyCl -EOc6E+15AqlqHbLJMQSyffCfTWq0f3CoU6KyQs8T11ZeRuHIJKZFExRLbO3rMHyyOYfcZUu190zk -6sTh/qnhPbasVvE4MdGNvcQBx+kD4ZXYEUWAa+mmGulRoumeWc18RMeVribneFMs5zmkl1C7LrqR -6S/dMWiXhtiQXooEPgnIQRWQpanPPVcH8QN6YMkuJ7Fday/pomCj6WoTogQX7wxBCmrk2CZopSVZ -4UjhKZooGTmZqEhNJn3fkymST1S+DHmInZHL/iFk55NuO6qLZe+MHGwF8grBHpH1JO3bHgHwwd0A -O0l1rRmYA2OpC+scVs1apj1fGZ8mVuJlKKSY1jJt5RHkLWuIhEcZKUjhGMvTIkNFs8FI6hSuF8Jm -DXmnE4F56omA3RMeApNQWi8AkjlyptNqArlF+wUZI6ONiOdyTa5TMBXJ2pNSk0erclYgXZl6blXC -5tgAVBiA1kcNaChUYyee3Zbm2q8cWJbEkCAWI/ngSViCEaBY48fGdBoSaZ2tu9od0s0k23scjrP1 -2gOlpi0j0zeAEKisCUZ5PIv1ccjuqAbL9aEa4ZJjr4wMCybmIsAmBxdod8BKSAFIJawW79x5mjOB -znXFmt1IiQZ5SWoHbcuPUW8124xSiU+seYCaozqw0d43BUEqEaVJQFbqRHQA8DlJimZVAJKkFJDd -+I3FoApGrntnu+BxSAlgCRH9ZQ3j7cFDF6Lhj454VwHYBM+AZnciXCEFuVEAbDU2kSSiqdbZ+Pys -R8UHlY9P/Q+R64+Z46KPQgtXOJ9q9ZnC8ZrKNSCY1tMxyGk0wOCYYZ02tgCJCpknqxSCiFEEHkna -WvaBTDw9TassyswAIlgeF1hkHkHKZlOhRLwpV2t25awSt8VVXUmK/ab/s493vNs/ESOj1j6NKjdR -JiyOECvePQBwKgKrRl5Twclr9qylYhA52xVwwpljtw8RFW7Doprv4noRB5uyXS3HqxPscvi+akTC -WVhTsjDX3dzg4Nlh7+xZKZNdpEFHsxAN5uhJTpkc2HTH7XiTtEthUSRZzMSBcoDoGTONfckzZH2q -cKXPKETissUa4kVa30z0uOw6XWgaXPWstjdrwSdAbSdnuWDbGqRkK8G1xh7dcF3MbjgO7ZfKPnQj -1rOLPDPIDoXBEy9jJbkcuyPUGrWJJ3YoxocLHUT0hAHIw9pDRhLL75G+IxaGulvM1ed2BOwRHGuO -e2CpK56cx8Zu46PSngF5mHYsG7UjzxGdjJzFM5JKaCBM4trkssJQxjESBEBldmsiznZYtZcycTPi -LWvhbg+OwK6wzuby43LDuIBp0cUMYzlrkYZV6QFEPA3lfsrlbIHN4iMiYyK0V02sU+AW3q1dxhCB -3VxY1cdIs5dQF9mbBoJNdhXp2FI7YvNlBS2YCGtkjXUS5GRsjukYm6XhVIC7vTOeNLvF3rLX6Bwy -IiATE+eAyzY73qwSIJ4aTbFS7dlUns/yWuSZRTLNLI82VVCXmGwfxpOxEy3B3UwaBTMaL5pe45U1 -3xViYoeSEcERodYcnpOdNKmWOhoTjB7IGyPXpknV+jOq79IsF4iTJKIjsCqPmJWZSwVyx9osX0En -spH5fGXvc6i/SUluxTobP9FIw8etyT6bpqLqyTYzqtPN8RTUmI0je7jQhdwOdg1sOMrBo4nphJDR -pdjfgrN50sdeoNgB0/Ek9OlWFwp8v/dZIYCnlQ6erP2qodHtbgySRlBrdgMJpwI0K0p2Ct3arMYK -uDYKJ5iMY2oM1rZXExLDsb6yAujUdSJ1vTHmnT5KFxGoIUQxy63NEVn4iGpu13Bb1Rmn8ul0H4zT -w24C6LC8TDBZzKmAEoIVtxq3S7s6ewBK1fSVMkcZazr9+xNwDzI9wqheAVyJdpc19QO4fNEV+Niu -H/D1/udlMlm/aO+Qtntg7iKxf9FXBCQ/3iDQRVJ3+Os9JniRxB3+Co8/3kDYRQL/ArDPwbXf1tcq -X4+qxo5vJ+4R7vgSJPsV1s7Ekbv/MqZ/bg+fYu1n9d/hsb8tPvvdN1cDPjvgswM+O+CzAz474LMD -PjvgswM+O+CzAz474LMDPjvgswM+O+CzAz474LMDPvt747MgejU++y0L+p3x2cvqvys+C74fPntm -4v4KdnTdt+NkR+JahPZfA8CxXv/PsZFf0v9Dk9cYAIz3FjC+0gKeM8o/QBfk23SBXGb4T3Rxmfre -ootnyfCv0IVoO3780zURn1sBx29QRD9Fl3m4Oz3cN3iFGsDx2Sk+N63fU8Nlb8XutgEsozK2m9QN -/fL//oHau3pTwBPtIZe5p8fau+aN4+u0h1yhvX6Oo/RuH0d1gfq+PvzN3iDe7lC7ZvsO1dvt+TZO -Z7148vFGibbhcxHR13J3e8YUv+q7++Hzan6ByL92A5NEbznoc2r6Xij0z0XN3BkOjr5gNy9bzXNe -5YVdY5f048WIaV02z+4xejFc6sf9XMD0u5sid8xvtzT+CnN85JOQV5nWXWd/pnldtBHtfl/ZhX15 -RxO7a/NPNLMo+XVm9iavB6Loq0zzboA/0zSfu4c/b5rTS/vyjqZ5N/4/0TQru/V/tf+DYOxVVnbu -68+0sYt27d5FZLkfnYPpbzdl/1QzO0/A+xjZL9+y/YMQ/jsuCf54AxKXKPLplu3nQviXtmz34wOx -izzMdyGpd9qzrTLM4g/Yqf2DTfgDE3BgAg5MwIEJODABBybgwAQcmIADE3BgAg5MwIEJODABBybg -wAQcmIADE3BgAg5MwN+WCUh8vAEvJDU8xugvk3gDFfAyLse7UgHhP5YK+Cba05kLeKF6nhDQrqI+ -vY6B9mwTvzuJCXm9Lm5VcT2L6TKO0VtYTJeRDe9eazCJwuiRf3g/CtovXk3YGxfT+DIzf7KYLlt/ -b1lLz772+r2XEv62lTS+JgPJXYM/fSFd1sI9mbP/XeW267/XOmJC393/ioXknhs63yKuVeBtD8+p -zV94Z/6ChFrbda+Se+krY6CryfBfRneNtZxZChdyQd9rO8TLc/gkBLqbNCa00+155r+M7p+nZ/7A -sOgNd+JbVv5li/WJH7/mVvwftUMCfZsu8Msm9okuLtvg9B+2Q+IteuiXxDV+8q6932p/hBrV73Y3 -/YVKe0NE2q8d6Oo46Jpo9HVKu3ClfeFJ/YFKe8vdp3d41zyR37X3e+1l8cv2oifAP4DT+IMw9gec -xuspjc8Flt+lNF7CsH2Eqvw8SqPgp34/w38Aq/FqlzqwGgdW48BqHFiNA6txYDUOrMaB1TiwGgdW -48BqHFiNA6txYDUOrMaB1TiwGgdW48Bq/H1Yjdg1APo9JvizSY3PYsE/mdWI/aEfoLn6ReUA0A4A -7QDQDgDtANAOAO0A0A4A7QDQDgDtANAOAO0A0A4A7QDQDgDtANAOAO0A0P4+AC1yzccW7jHBnw7Q -XkaVf1eAFv1DAdqr+e0DQDsAtANAOwC0A0A7ALQDQDsAtANAOwC0A0A7ALQDQDsAtANAOwC0A0A7 -ALQDQPv7ALTk9WlBr0p/9CqA9jLQ+F0BWuSPzQv61rSg16SifGjyIhHFt71VGndXJHp7S56mZ793 -+XtnjwGv/uzWv7ojLp6ix1lEr0np+7r8MZeZ030W0Sztn5rz/gH93bIfZomT/ZLsh+eGXpP9kI2q -PLa7hZ84fu+r2L7dyg0/3nDpNo6q8FLXn9h1HaVbLrWd+Kpcil8nBb4m59qXQV9jRRB48TfXr82K -qNtx418xk3+AN3+DRzjrk3yFN78qzff/13SGv9A1v0UP16YHvmvwt8rsJWbv6pZ/8SL6wfdJf5iH -8hW5nS/jFPyH5aF8ix56NVyd0vAaJfz8PJSTLPH/4EV0dWTzVWLdVyRzvSaueOXHBv68RfQWPfRq -uDrF5FXB3U/PC9oXBlH8ruvoF+qOeFsUcdUXO+4a/K2S26t5abvhJcl4r08Q+ktpcP/YTlbW12UI -pVI3PKNRdNZfIfl4o0Tb8Dlk79sHRDvOtopf9T3uH5Ht1PWfzbX5ouXA4Hndo5fkC30M692N8eKs -pDj6gvF8x/k++6WXZy2HcpzS700nvUDi2tz4L4OAd1PwHBL4xD6fHvzYVPks9vySLvsSv7xT70+3 -2+C2TeeuTe+2zf5GAlza5VXup3zvd39Rb3sNpWc3/9DRh1n/Gvfoq9yZ7FcC32j5Gcn6DBIwqv4/ -rF37kZ/+73//5VbtV5JPVUtVlZ/0A/Crh8vel3Sf7ydkYaf21k96Q/mLavplfrsE/50Y+NKJgUEn -gAkUsz0YQ3y4f2D+0tLXLSeVm5Vx5LzD9H+nlZ+k8B+3yJb2IUq3r2lrDAdogAcg6KFjG7Z/2Nav -GY9d27+kITOJf82Aot4z11nZnbN/R67/KrO4VlV/MVnp/5Lh3Y+q9wr90H7C2L4cPniVT1J/x+qd -SPnQo/v82o/ud3cVzp7vUfz0bOl94dTN0m+rPi3tXVcU+FXNlP6t1zo/G31T9qU201S9e3s4/+ja -L52QYrsOeq/x+X/O3vnh4MtppUnVNXV+FLj/9a9gdvBLNfTj+H7qbx+6vyl8uC8/na1Pqu82ZdT7 -feCh5KlAX3C+izwUgnda/QQ8LnwcaHiNW39T+avyr+t/rajnSlm/cssofzrJwLOlTJbkdvo4dP6m -hMnyrjzHl08qfVM2Pb+QTu34qw4+X7zqhaO+9OGm+zh0f/FU37Pk6fvTpyWfgMeT9sUyz7bfW4Lv -Zq1fdmeX+fn/Ad+YIv5KygAA#> -#endregion - #---------------------------------------------- - #region Import the Assemblies - #---------------------------------------------- - [void][reflection.assembly]::Load("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") - [void][reflection.assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") - [void][reflection.assembly]::Load("System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") - [void][reflection.assembly]::Load("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") - [void][reflection.assembly]::Load("System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") - [void][reflection.assembly]::Load("System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") - [void][reflection.assembly]::Load("System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") - [void][reflection.assembly]::Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") - [void][reflection.assembly]::Load("System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") - #endregion Import Assemblies - - #---------------------------------------------- - #region Generated Form Objects - #---------------------------------------------- - [System.Windows.Forms.Application]::EnableVisualStyles() - $Options = New-Object 'System.Windows.Forms.Form' - $groupbox3 = New-Object 'System.Windows.Forms.GroupBox' - $button2 = New-Object 'System.Windows.Forms.Button' - $button1 = New-Object 'System.Windows.Forms.Button' - $textbox8 = New-Object 'System.Windows.Forms.TextBox' - $textbox9 = New-Object 'System.Windows.Forms.TextBox' - $label10 = New-Object 'System.Windows.Forms.Label' - $label12 = New-Object 'System.Windows.Forms.Label' - $button_OK = New-Object 'System.Windows.Forms.Button' - $button_Export = New-Object 'System.Windows.Forms.Button' - $button_import = New-Object 'System.Windows.Forms.Button' - $button_save = New-Object 'System.Windows.Forms.Button' - $groupbox2 = New-Object 'System.Windows.Forms.GroupBox' - $button3 = New-Object 'System.Windows.Forms.Button' - $textbox10 = New-Object 'System.Windows.Forms.TextBox' - $label14 = New-Object 'System.Windows.Forms.Label' - $textbox6 = New-Object 'System.Windows.Forms.TextBox' - $label7 = New-Object 'System.Windows.Forms.Label' - $checkbox1 = New-Object 'System.Windows.Forms.CheckBox' - $textbox4 = New-Object 'System.Windows.Forms.TextBox' - $textbox5 = New-Object 'System.Windows.Forms.TextBox' - $label5 = New-Object 'System.Windows.Forms.Label' - $label6 = New-Object 'System.Windows.Forms.Label' - $label4 = New-Object 'System.Windows.Forms.Label' - $groupbox1 = New-Object 'System.Windows.Forms.GroupBox' - $button6 = New-Object 'System.Windows.Forms.Button' - $button5 = New-Object 'System.Windows.Forms.Button' - $button4 = New-Object 'System.Windows.Forms.Button' - $textbox0 = New-Object 'System.Windows.Forms.TextBox' - $label13 = New-Object 'System.Windows.Forms.Label' - $combobox1 = New-Object 'System.Windows.Forms.ComboBox' - $textbox3 = New-Object 'System.Windows.Forms.TextBox' - $label3 = New-Object 'System.Windows.Forms.Label' - $textbox2 = New-Object 'System.Windows.Forms.TextBox' - $label2 = New-Object 'System.Windows.Forms.Label' - $textbox1 = New-Object 'System.Windows.Forms.TextBox' - $label1 = New-Object 'System.Windows.Forms.Label' - $label8 = New-Object 'System.Windows.Forms.Label' - $button_abort = New-Object 'System.Windows.Forms.Button' - $folderbrowserdialog1 = New-Object 'System.Windows.Forms.FolderBrowserDialog' - $openfiledialog1 = New-Object 'System.Windows.Forms.OpenFileDialog' - $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' - #endregion Generated Form Objects - - #---------------------------------------------- - # User Generated Script - #---------------------------------------------- - - $FormEvent_Load={ - if (Test-Path $global:Confpath){ - $load = Import-Csv -Path $global:Confpath - foreach ($Line in $Load) { - $global:Language=$($Line."global:Language") - $global:Profilefolder=$($Line."global:Profilefolder") - $global:Homefolder=$($Line."global:Homefolder") - $global:Outfile=$($Line."global:Outfile") - $global:SiteName=$($Line."global:SiteName") - $global:SCCMServer=$($Line."global:SCCMServer") - $global:SCCMNameSpace=$($Line."global:SCCMNameSpace") - $global:SCCMEnabled=[bool]$($Line."global:SCCMEnabled") - $global:Nirlauncher=$($Line."global:Nirlauncher") - $global:Sysinternals=$($Line."global:Sysinternals") - $global:CmRCViewer=$($Line."global:CmRCViewer") - if ($global:Language -eq "English"){ - Write-Host "Loaded configuration from $global:Confpath" - } - } - } - else { - if ($global:Language -eq "English"){ - Write-Host "No Configfile found. Loading default Configuration." - } - } - - $Options.Text = "Options" - $label8.Text = "Language:" - - #Load Variables into textboxes - $textbox0.Text = $global:Confpath - $textbox1.Text = $global:Profilefolder - $textbox2.Text = $global:Homefolder - $textbox3.Text = $global:Outfile - if ($global:SCCMEnabled -eq $true) { - $checkbox1.Checked = $global:SCCMEnabled - $textbox4.Text = $global:SiteName - $textbox5.Text = $global:SCCMServer - $textbox6.Text = $global:SCCMNameSpace - $textbox10.Text = $global:CmRCViewer - } - else { - $checkbox1.Checked = $global:SCCMEnabled - $textbox4.enabled = $false - $textbox5.enabled = $false - $textbox6.enabled = $false - $textbox10.enabled = $false - } - $textbox8.Text = $global:Nirlauncher - $textbox9.Text = $global:Sysinternals - Load-ComboBox $combobox1 "English" - $combobox1.SelectedItem = $global:Language - } - ############################################################################################ - $checkbox1_CheckedChanged={ - if ($checkbox1.Checked -eq $true) { - $textbox4.Text = $global:SiteName - $textbox5.Text = $global:SCCMServer - $textbox6.Text = $global:SCCMNameSpace - $textbox10.Text = $global:CmRCViewer - } - else { - $textbox4.enabled = $false - $textbox5.enabled = $false - $textbox6.enabled = $false - $textbox10.enabled = $false - } - } - ############################################################################################ - $button_save_Click={ - $global:Profilefolder = $textbox1.Text - $global:Homefolder = $textbox2.Text - $global:Outfile = $textbox3.Text - $global:SiteName = $textbox4.Text - $global:SCCMServer = $textbox5.Text - $global:SCCMNameSpace = $textbox6.Text - $global:SCCMEnabled = [bool]$checkbox1.Checked - $global:Language = $combobox1.Text - $global:Nirlauncher = $textbox8.Text - $global:Sysinternals = $textbox9.Text - $global:CmRCViewer = $textbox10.Text - $Exportpath = $Confpath - New-Object -TypeName PSCustomObject -Property @{ - "global:Language" = $Language - "global:Profilefolder" = $Profilefolder - "global:Homefolder" = $Homefolder - "global:Outfile" = $Outfile - "global:SiteName" = $SiteName - "global:SCCMServer" = $SCCMServer - "global:SCCMNameSpace" = $SCCMNameSpace - "global:SCCMEnabled" = $SCCMEnabled - "global:Nirlauncher" = $Nirlauncher - "global:Sysinternals" = $Sysinternals - "global:CmRCViewer" = $CmRCViewer - } | Export-Csv -Path $Exportpath -NoTypeInformation - } - ############################################################################################ - $button_OK_Click={ - $global:Language = $combobox1.SelectedItem - $global:Profilefolder = $textbox1.Text - $global:Homefolder = $textbox2.Text - $global:Outfile = $textbox3.Text - $global:SiteName = $textbox4.Text - $global:SCCMServer = $textbox5.Text - $global:SCCMNameSpace = $textbox6.Text - $global:SCCMEnabled = [bool]$checkbox1.Checked - $global:Language = $combobox1.Text - $global:Nirlauncher = $textbox8.Text - $global:Sysinternals = $textbox9.Text - $global:CmRCViewer = $textbox10.Text - $Exportpath = $Confpath - New-Object -TypeName PSCustomObject -Property @{ - "global:Language" = $Language - "global:Profilefolder" = $Profilefolder - "global:Homefolder" = $Homefolder - "global:Outfile" = $Outfile - "global:SiteName" = $SiteName - "global:SCCMServer" = $SCCMServer - "global:SCCMNameSpace" = $SCCMNameSpace - "global:SCCMEnabled" = $SCCMEnabled - "global:Nirlauncher" = $Nirlauncher - "global:Sysinternals" = $Sysinternals - "global:CmRCViewer" = $CmRCViewer - } | Export-Csv -Path $Exportpath -NoTypeInformation - } - - $button_Export_Click={ - $folderbrowserdialog1.ShowDialog() - $save = $folderbrowserdialog1.SelectedPath += '/AdminMenuPrereqOptions.ps1.config' - New-Object -TypeName PSCustomObject -Property @{ - "global:Language" = $Language - "global:Profilefolder" = $Profilefolder - "global:Homefolder" = $Homefolder - "global:Outfile" = $Outfile - "global:SiteName" = $SiteName - "global:SCCMServer" = $SCCMServer - "global:SCCMNameSpace" = $SCCMNameSpace - "global:SCCMEnabled"= [bool]$SCCMEnabled - "global:Nirlauncher" = $Nirlauncher - "global:Sysinternals" = $Sysinternals - "global:CmRCViewer" = $CmRCViewer - } | Export-Csv -Path $save -NoTypeInformation -Force - } - ############################################################################################ - $button_abort_Click={$Options.Close()} - ############################################################################################ - $button_import_Click={ - $openfiledialog1.ShowDialog() - $load = $openfiledialog1.FileNames - $Import = Import-Csv -Path $load - Write-Host $Import - foreach ($Line in $Import) { - $global:Language=$($Line."global:Language") - $global:Profilefolder=$($Line."global:Profilefolder") - $global:Homefolder=$($Line."global:Homefolder") - $global:Outfile=$($Line."global:Outfile") - $global:SiteName=$($Line."global:SiteName") - $global:SCCMServer=$($Line."global:SCCMServer") - $global:SCCMNameSpace=$($Line."global:SCCMNameSpace") - $global:SCCMEnabled=[bool]$($Line."global:SCCMEnabled") - $global:Nirlauncher=$($Line."global:Nirlauncher") - $global:Sysinternals=$($Line."global:Sysinternals") - $global:CmRCViewer=$($Line."global:CmRCViewer") - } - # Saving the imported Config - $Exportpath = $Confpath - New-Object -TypeName PSCustomObject -Property @{ - "global:Language" = $Language - "global:Profilefolder" = $Profilefolder - "global:Homefolder" = $Homefolder - "global:Outfile" = $Outfile - "global:SiteName" = $SiteName - "global:SCCMServer" = $SCCMServer - "global:SCCMNameSpace" = $SCCMNameSpace - "global:SCCMEnabled" = [bool]$SCCMEnabled - "global:Nirlauncher" = $Nirlauncher - "global:Sysinternals" = $Sysinternals - "global:CmRCViewer" = $CmRCViewer - } | Export-Csv -Path $Exportpath -NoTypeInformation - } - ############################################################################################ - - $button1_Click={ - $folderbrowserdialog1.ShowDialog() - $textbox8.Text = $folderbrowserdialog1.SelectedPath - $global:Nirlauncher = $textbox8.Text - } - - $button2_Click={ - $folderbrowserdialog1.ShowDialog() - $textbox9.Text = $folderbrowserdialog1.SelectedPath - $global:Sysinternals = $textbox9.Text - } - - $button3_Click={ - $folderbrowserdialog1.ShowDialog() - $textbox10.Text = $folderbrowserdialog1.SelectedPath - $global:CmRCViewer = $textbox9.Text - } - - $button4_Click={ - $folderbrowserdialog1.ShowDialog() - $textbox3.Text = $folderbrowserdialog1.SelectedPath - $global:logpath = $textbox3.Text - } - - $button5_Click={ - $folderbrowserdialog1.ShowDialog() - $textbox1.Text = $folderbrowserdialog1.SelectedPath - $global:profilepath = $textbox1.Text - } - - $button6_Click={ - $folderbrowserdialog1.ShowDialog() - $textbox2.Text = $folderbrowserdialog1.SelectedPath - $global:outfile = $textbox2.Text - } - - $Options_FormClosed=[System.Windows.Forms.FormClosedEventHandler]{ - $Options.Close() - } - # --End User Generated Script-- - #---------------------------------------------- - #region Generated Events - #---------------------------------------------- - - $Form_StateCorrection_Load= - { - #Correct the initial state of the form to prevent the .Net maximized form issue - $Options.WindowState = $InitialFormWindowState - } - - $Form_StoreValues_Closing= - { - #Store the control values - $script:Options_textbox8 = $textbox8.Text - $script:Options_textbox9 = $textbox9.Text - $script:Options_textbox10 = $textbox10.Text - $script:Options_textbox6 = $textbox6.Text - $script:Options_checkbox1 = $checkbox1.Checked - $script:Options_textbox4 = $textbox4.Text - $script:Options_textbox5 = $textbox5.Text - $script:Options_textbox0 = $textbox0.Text - $script:Options_combobox1 = $combobox1.Text - $script:Options_textbox3 = $textbox3.Text - $script:Options_textbox2 = $textbox2.Text - $script:Options_textbox1 = $textbox1.Text - } - - - $Form_Cleanup_FormClosed= - { - #Remove all event handlers from the controls - try - { - $button2.remove_Click($button2_Click) - $button1.remove_Click($button1_Click) - $button_OK.remove_Click($button_OK_Click) - $button_Export.remove_Click($button_Export_Click) - $button_import.remove_Click($button_import_Click) - $button_save.remove_Click($button_save_Click) - $button3.remove_Click($button3_Click) - $checkbox1.remove_CheckedChanged($checkbox1_CheckedChanged) - $button6.remove_Click($button6_Click) - $button5.remove_Click($button5_Click) - $button4.remove_Click($button4_Click) - $button_abort.remove_Click($button_abort_Click) - $Options.remove_FormClosed($Options_FormClosed) - $Options.remove_Load($FormEvent_Load) - $Options.remove_Load($Form_StateCorrection_Load) - $Options.remove_Closing($Form_StoreValues_Closing) - $Options.remove_FormClosed($Form_Cleanup_FormClosed) - } - catch [Exception] - { } - } - #endregion Generated Events - - #---------------------------------------------- - #region Generated Form Code - #---------------------------------------------- - # - # form1 - # - $Options.Controls.Add($groupbox3) - $Options.Controls.Add($button_OK) - $Options.Controls.Add($button_Export) - $Options.Controls.Add($button_import) - $Options.Controls.Add($button_save) - $Options.Controls.Add($groupbox2) - $Options.Controls.Add($groupbox1) - $Options.Controls.Add($button_abort) - $Options.AcceptButton = $button_OK - $Options.CancelButton = $button_abort - $Options.ClientSize = '484, 489' - $Options.FormBorderStyle = 'FixedDialog' - $Options.MaximizeBox = $False - $Options.MinimizeBox = $False - $Options.Name = "form1" - $Options.StartPosition = 'CenterScreen' - $Options.Text = "Options" - $Options.add_FormClosed($Options_FormClosed) - $Options.add_Load($FormEvent_Load) - # - # groupbox3 - # - $groupbox3.Controls.Add($button2) - $groupbox3.Controls.Add($button1) - $groupbox3.Controls.Add($textbox8) - $groupbox3.Controls.Add($textbox9) - $groupbox3.Controls.Add($label10) - $groupbox3.Controls.Add($label12) - $groupbox3.Location = '12, 357' - $groupbox3.Name = "groupbox3" - $groupbox3.Size = '461, 87' - $groupbox3.TabIndex = 9 - $groupbox3.TabStop = $False - $groupbox3.Text = "External Tools" - # - # button2 - # - $button2.BackColor = 'Transparent' - #region Binary Data - $button2.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) - #endregion - $button2.BackgroundImageLayout = 'Center' - $button2.FlatStyle = 'Flat' - $button2.ForeColor = 'Control' - $button2.Location = '419, 42' - $button2.Name = "button2" - $button2.Size = '30, 26' - $button2.TabIndex = 7 - $button2.UseVisualStyleBackColor = $False - $button2.add_Click($button2_Click) - # - # button1 - # - $button1.BackColor = 'Transparent' - #region Binary Data - $button1.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) - #endregion - $button1.BackgroundImageLayout = 'Center' - $button1.FlatStyle = 'Flat' - $button1.ForeColor = 'Control' - $button1.Location = '419, 15' - $button1.Name = "button1" - $button1.Size = '30, 26' - $button1.TabIndex = 6 - $button1.UseVisualStyleBackColor = $False - $button1.add_Click($button1_Click) - # - # textbox8 - # - $textbox8.Location = '76, 19' - $textbox8.Name = "textbox8" - $textbox8.Size = '337, 20' - $textbox8.TabIndex = 5 - # - # textbox9 - # - $textbox9.Location = '76, 46' - $textbox9.Name = "textbox9" - $textbox9.Size = '337, 20' - $textbox9.TabIndex = 3 - # - # label10 - # - $label10.Location = '7, 21' - $label10.Name = "label10" - $label10.Size = '100, 23' - $label10.TabIndex = 2 - $label10.Text = "Nirlauncher:" - # - # label12 - # - $label12.Location = '7, 48' - $label12.Name = "label12" - $label12.Size = '100, 23' - $label12.TabIndex = 4 - $label12.Text = "Sysinternals:" - # - # button_OK - # - $button_OK.Anchor = 'Bottom, Right' - $button_OK.DialogResult = 'OK' - $button_OK.Location = '398, 454' - $button_OK.Name = "button_OK" - $button_OK.Size = '75, 23' - $button_OK.TabIndex = 0 - $button_OK.Text = "OK" - $button_OK.UseVisualStyleBackColor = $True - $button_OK.add_Click($button_OK_Click) - # - # button_Export - # - $button_Export.Anchor = 'Bottom, Right' - $button_Export.Location = '74, 454' - $button_Export.Name = "button_Export" - $button_Export.Size = '75, 23' - $button_Export.TabIndex = 9 - $button_Export.Text = "Export" - $button_Export.UseVisualStyleBackColor = $True - $button_Export.add_Click($button_Export_Click) - # - # button_import - # - $button_import.Anchor = 'Bottom, Right' - $button_import.DialogResult = 'OK' - $button_import.Location = '155, 454' - $button_import.Name = "button_import" - $button_import.Size = '75, 23' - $button_import.TabIndex = 8 - $button_import.Text = "Import" - $button_import.UseVisualStyleBackColor = $True - $button_import.add_Click($button_import_Click) - # - # button_save - # - $button_save.Anchor = 'Bottom, Right' - $button_save.Location = '236, 454' - $button_save.Name = "button_save" - $button_save.Size = '75, 23' - $button_save.TabIndex = 7 - $button_save.Text = "Save" - $button_save.UseVisualStyleBackColor = $True - $button_save.add_Click($button_save_Click) - # - # groupbox2 - # - $groupbox2.Controls.Add($button3) - $groupbox2.Controls.Add($textbox10) - $groupbox2.Controls.Add($label14) - $groupbox2.Controls.Add($textbox6) - $groupbox2.Controls.Add($label7) - $groupbox2.Controls.Add($checkbox1) - $groupbox2.Controls.Add($textbox4) - $groupbox2.Controls.Add($textbox5) - $groupbox2.Controls.Add($label5) - $groupbox2.Controls.Add($label6) - $groupbox2.Controls.Add($label4) - $groupbox2.Location = '13, 183' - $groupbox2.Name = "groupbox2" - $groupbox2.Size = '460, 168' - $groupbox2.TabIndex = 6 - $groupbox2.TabStop = $False - $groupbox2.Text = "SCCM" - # - # button3 - # - $button3.BackColor = 'Transparent' - #region Binary Data - $button3.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) - #endregion - $button3.BackgroundImageLayout = 'Center' - $button3.FlatStyle = 'Flat' - $button3.ForeColor = 'Control' - $button3.Location = '418, 123' - $button3.Name = "button3" - $button3.Size = '30, 26' - $button3.TabIndex = 8 - $button3.UseVisualStyleBackColor = $False - $button3.add_Click($button3_Click) - # - # textbox10 - # - $textbox10.Location = '76, 126' - $textbox10.Name = "textbox10" - $textbox10.Size = '337, 20' - $textbox10.TabIndex = 10 - # - # label14 - # - $label14.Location = '6, 128' - $label14.Name = "label14" - $label14.Size = '100, 23' - $label14.TabIndex = 9 - $label14.Text = "CmRCViewer:" - # - # textbox6 - # - $textbox6.Location = '76, 100' - $textbox6.Name = "textbox6" - $textbox6.Size = '337, 20' - $textbox6.TabIndex = 8 - # - # label7 - # - $label7.Location = '6, 102' - $label7.Name = "label7" - $label7.Size = '100, 23' - $label7.TabIndex = 7 - $label7.Text = "Namespace:" - # - # checkbox1 - # - $checkbox1.Checked = $True - $checkbox1.CheckState = 'Checked' - $checkbox1.Location = '76, 19' - $checkbox1.Name = "checkbox1" - $checkbox1.Size = '15, 24' - $checkbox1.TabIndex = 6 - $checkbox1.UseVisualStyleBackColor = $True - $checkbox1.add_CheckedChanged($checkbox1_CheckedChanged) - # - # textbox4 - # - $textbox4.Location = '76, 47' - $textbox4.Name = "textbox4" - $textbox4.Size = '337, 20' - $textbox4.TabIndex = 5 - # - # textbox5 - # - $textbox5.Location = '76, 74' - $textbox5.Name = "textbox5" - $textbox5.Size = '337, 20' - $textbox5.TabIndex = 3 - # - # label5 - # - $label5.Location = '7, 49' - $label5.Name = "label5" - $label5.Size = '100, 23' - $label5.TabIndex = 2 - $label5.Text = "Site:" - # - # label6 - # - $label6.Location = '6, 22' - $label6.Name = "label6" - $label6.Size = '100, 23' - $label6.TabIndex = 0 - $label6.Text = "SCCM:" - # - # label4 - # - $label4.Location = '7, 76' - $label4.Name = "label4" - $label4.Size = '100, 23' - $label4.TabIndex = 4 - $label4.Text = "Server:" - # - # groupbox1 - # - $groupbox1.Controls.Add($button6) - $groupbox1.Controls.Add($button5) - $groupbox1.Controls.Add($button4) - $groupbox1.Controls.Add($textbox0) - $groupbox1.Controls.Add($label13) - $groupbox1.Controls.Add($combobox1) - $groupbox1.Controls.Add($textbox3) - $groupbox1.Controls.Add($label3) - $groupbox1.Controls.Add($textbox2) - $groupbox1.Controls.Add($label2) - $groupbox1.Controls.Add($textbox1) - $groupbox1.Controls.Add($label1) - $groupbox1.Controls.Add($label8) - $groupbox1.Location = '13, 13' - $groupbox1.Name = "groupbox1" - $groupbox1.Size = '460, 164' - $groupbox1.TabIndex = 1 - $groupbox1.TabStop = $False - $groupbox1.Text = "General" - # - # button6 - # - $button6.BackColor = 'Transparent' - #region Binary Data - $button6.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) - #endregion - $button6.BackgroundImageLayout = 'Center' - $button6.FlatStyle = 'Flat' - $button6.ForeColor = 'Control' - $button6.Location = '418, 66' - $button6.Name = "button6" - $button6.Size = '30, 26' - $button6.TabIndex = 13 - $button6.UseVisualStyleBackColor = $False - $button6.add_Click($button6_Click) - # - # button5 - # - $button5.BackColor = 'Transparent' - #region Binary Data - $button5.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) - #endregion - $button5.BackgroundImageLayout = 'Center' - $button5.FlatStyle = 'Flat' - $button5.ForeColor = 'Control' - $button5.Location = '418, 41' - $button5.Name = "button5" - $button5.Size = '30, 26' - $button5.TabIndex = 12 - $button5.UseVisualStyleBackColor = $False - $button5.add_Click($button5_Click) - # - # button4 - # - $button4.BackColor = 'Transparent' - #region Binary Data - $button4.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) - #endregion - $button4.BackgroundImageLayout = 'Center' - $button4.FlatStyle = 'Flat' - $button4.ForeColor = 'Control' - $button4.Location = '418, 93' - $button4.Name = "button4" - $button4.Size = '30, 26' - $button4.TabIndex = 11 - $button4.UseVisualStyleBackColor = $False - $button4.add_Click($button4_Click) - # - # textbox0 - # - $textbox0.Location = '76, 18' - $textbox0.Name = "textbox0" - $textbox0.ReadOnly = $True - $textbox0.Size = '337, 20' - $textbox0.TabIndex = 9 - # - # label13 - # - $label13.Location = '8, 20' - $label13.Name = "label13" - $label13.Size = '100, 23' - $label13.TabIndex = 8 - $label13.Text = "Configpath:" - # - # combobox1 - # - $combobox1.DisplayMember = "Deutsch, English" - $combobox1.FormattingEnabled = $True - $combobox1.Location = '76, 124' - $combobox1.Name = "combobox1" - $combobox1.Size = '121, 21' - $combobox1.TabIndex = 6 - $combobox1.ValueMember = "Deutsch, English" - # - # textbox3 - # - $textbox3.Location = '76, 98' - $textbox3.Name = "textbox3" - $textbox3.Size = '337, 20' - $textbox3.TabIndex = 5 - # - # label3 - # - $label3.Location = '7, 100' - $label3.Name = "label3" - $label3.Size = '100, 23' - $label3.TabIndex = 4 - $label3.Text = "Logpath:" - # - # textbox2 - # - $textbox2.Location = '76, 70' - $textbox2.Name = "textbox2" - $textbox2.Size = '337, 20' - $textbox2.TabIndex = 3 - # - # label2 - # - $label2.Location = '7, 72' - $label2.Name = "label2" - $label2.Size = '100, 23' - $label2.TabIndex = 2 - $label2.Text = "Homepath:" - # - # textbox1 - # - $textbox1.Location = '76, 44' - $textbox1.Name = "textbox1" - $textbox1.Size = '337, 20' - $textbox1.TabIndex = 1 - # - # label1 - # - $label1.Location = '7, 46' - $label1.Name = "label1" - $label1.Size = '100, 23' - $label1.TabIndex = 0 - $label1.Text = "Profilepath:" - # - # label8 - # - $label8.Location = '7, 126' - $label8.Name = "label8" - $label8.Size = '100, 23' - $label8.TabIndex = 7 - $label8.Text = "Sprache:" - # - # button_abort - # - $button_abort.Anchor = 'Bottom, Right' - $button_abort.DialogResult = 'Cancel' - $button_abort.Location = '317, 454' - $button_abort.Name = "button_abort" - $button_abort.Size = '75, 23' - $button_abort.TabIndex = 10 - $button_abort.Text = "Cancel" - $button_abort.UseVisualStyleBackColor = $True - $button_abort.add_Click($button_abort_Click) - # - # folderbrowserdialog1 - # - # - # openfiledialog1 - # - $openfiledialog1.FileName = "openfiledialog1" - $openfiledialog1.Filter = "CSV-Config|*.config" - #endregion Generated Form Code - - #---------------------------------------------- - - #Save the initial state of the form - $InitialFormWindowState = $Options.WindowState - #Init the OnLoad event to correct the initial state of the form - $Options.add_Load($Form_StateCorrection_Load) - #Clean up the control events - $Options.add_FormClosed($Form_Cleanup_FormClosed) - #Store the control values when form is closing - $Options.add_Closing($Form_StoreValues_Closing) - #Show the Form - return $Options.ShowDialog() - +# ========================================== +# Functions +# ========================================== +function Load-ComboBox { + <# + .SYNOPSIS + This functions helps you load items into a ComboBox. + + .DESCRIPTION + Use this function to dynamically load items into the ComboBox control. + + .PARAMETER ComboBox + The ComboBox control you want to add items to. + + .PARAMETER Items + The object or objects you wish to load into the ComboBox's Items collection. + + .PARAMETER DisplayMember + Indicates the property to display for the items in this control. + + .PARAMETER Append + Adds the item(s) to the ComboBox without clearing the Items collection. + + .EXAMPLE + Load-ComboBox $combobox1 "Red", "White", "Blue" + + .EXAMPLE + Load-ComboBox $combobox1 "Red" -Append + Load-ComboBox $combobox1 "White" -Append + Load-ComboBox $combobox1 "Blue" -Append + + .EXAMPLE + Load-ComboBox $combobox1 (Get-Process) "ProcessName" + #> + Param ( + [ValidateNotNull()] + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ComboBox]$ComboBox, + [ValidateNotNull()] + [Parameter(Mandatory=$true)] + $Items, + [Parameter(Mandatory=$false)] + [string]$DisplayMember, + [switch]$Append + ) + + if(-not $Append) + { + $ComboBox.Items.Clear() + } + + if($Items -is [Object[]]) + { + $ComboBox.Items.AddRange($Items) + } + elseif ($Items -is [Array]) + { + $ComboBox.BeginUpdate() + foreach($obj in $Items) + { + $ComboBox.Items.Add($obj) + } + $ComboBox.EndUpdate() + } + else + { + $ComboBox.Items.Add($Items) + } + + $ComboBox.DisplayMember = $DisplayMember +} + +# ========================================== +# Load Option Config +# ========================================== +$global:Confpath = Join-Path -Path $ExtensionPath -ChildPath 'AdminMenuPrereqOptions.ps1.config' + + + + +# ========================================== +# Prereq Section +# ========================================== +$InstallPaths = $HashPrereq.InstalledPath +$PrereqPaths = @() +$InstallPaths.Keys | % { + $key = $_ + $InstallPath = $InstallPaths.$key + $obj = New-Object PSobject + $obj | Add-Member Noteproperty Name $key + $obj | Add-Member Noteproperty Path $InstallPath + $PrereqPaths += $obj +} + + + +function Show-UserOptions{ +#region File Recovery Data (DO NOT MODIFY) +<#RecoveryData: +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 +ALQDQPv7ALTk9WlBr0p/9CqA9jLQ+F0BWuSPzQv61rSg16SifGjyIhHFt71VGndXJHp7S56mZ793 ++XtnjwGv/uzWv7ojLp6ix1lEr0np+7r8MZeZ030W0Sztn5rz/gH93bIfZomT/ZLsh+eGXpP9kI2q +PLa7hZ84fu+r2L7dyg0/3nDpNo6q8FLXn9h1HaVbLrWd+Kpcil8nBb4m59qXQV9jRRB48TfXr82K +qNtx418xk3+AN3+DRzjrk3yFN78qzff/13SGv9A1v0UP16YHvmvwt8rsJWbv6pZ/8SL6wfdJf5iH +8hW5nS/jFPyH5aF8ix56NVyd0vAaJfz8PJSTLPH/4EV0dWTzVWLdVyRzvSaueOXHBv68RfQWPfRq +uDrF5FXB3U/PC9oXBlH8ruvoF+qOeFsUcdUXO+4a/K2S26t5abvhJcl4r08Q+ktpcP/YTlbW12UI +pVI3PKNRdNZfIfl4o0Tb8Dlk79sHRDvOtopf9T3uH5Ht1PWfzbX5ouXA4Hndo5fkC30M692N8eKs +pDj6gvF8x/k++6WXZy2HcpzS700nvUDi2tz4L4OAd1PwHBL4xD6fHvzYVPks9vySLvsSv7xT70+3 +2+C2TeeuTe+2zf5GAlza5VXup3zvd39Rb3sNpWc3/9DRh1n/Gvfoq9yZ7FcC32j5Gcn6DBIwqv4/ +rF37kZ/+73//5VbtV5JPVUtVlZ/0A/Crh8vel3Sf7ydkYaf21k96Q/mLavplfrsE/50Y+NKJgUEn +gAkUsz0YQ3y4f2D+0tLXLSeVm5Vx5LzD9H+nlZ+k8B+3yJb2IUq3r2lrDAdogAcg6KFjG7Z/2Nav +GY9d27+kITOJf82Aot4z11nZnbN/R67/KrO4VlV/MVnp/5Lh3Y+q9wr90H7C2L4cPniVT1J/x+qd +SPnQo/v82o/ud3cVzp7vUfz0bOl94dTN0m+rPi3tXVcU+FXNlP6t1zo/G31T9qU201S9e3s4/+ja +L52QYrsOeq/x+X/O3vnh4MtppUnVNXV+FLj/9a9gdvBLNfTj+H7qbx+6vyl8uC8/na1Pqu82ZdT7 +feCh5KlAX3C+izwUgnda/QQ8LnwcaHiNW39T+avyr+t/rajnSlm/cssofzrJwLOlTJbkdvo4dP6m +hMnyrjzHl08qfVM2Pb+QTu34qw4+X7zqhaO+9OGm+zh0f/FU37Pk6fvTpyWfgMeT9sUyz7bfW4Lv +Zq1fdmeX+fn/Ad+YIv5KygAA#> +#endregion + #---------------------------------------------- + #region Import the Assemblies + #---------------------------------------------- + [void][reflection.assembly]::Load("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") + [void][reflection.assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") + [void][reflection.assembly]::Load("System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") + [void][reflection.assembly]::Load("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") + [void][reflection.assembly]::Load("System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") + [void][reflection.assembly]::Load("System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") + [void][reflection.assembly]::Load("System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") + [void][reflection.assembly]::Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") + [void][reflection.assembly]::Load("System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") + #endregion Import Assemblies + + #---------------------------------------------- + #region Generated Form Objects + #---------------------------------------------- + [System.Windows.Forms.Application]::EnableVisualStyles() + $Options = New-Object 'System.Windows.Forms.Form' + $groupbox3 = New-Object 'System.Windows.Forms.GroupBox' + $button2 = New-Object 'System.Windows.Forms.Button' + $button1 = New-Object 'System.Windows.Forms.Button' + $textbox8 = New-Object 'System.Windows.Forms.TextBox' + $textbox9 = New-Object 'System.Windows.Forms.TextBox' + $label10 = New-Object 'System.Windows.Forms.Label' + $label12 = New-Object 'System.Windows.Forms.Label' + $button_OK = New-Object 'System.Windows.Forms.Button' + $button_Export = New-Object 'System.Windows.Forms.Button' + $button_import = New-Object 'System.Windows.Forms.Button' + $button_save = New-Object 'System.Windows.Forms.Button' + $groupbox2 = New-Object 'System.Windows.Forms.GroupBox' + $button3 = New-Object 'System.Windows.Forms.Button' + $textbox10 = New-Object 'System.Windows.Forms.TextBox' + $label14 = New-Object 'System.Windows.Forms.Label' + $textbox6 = New-Object 'System.Windows.Forms.TextBox' + $label7 = New-Object 'System.Windows.Forms.Label' + $checkbox1 = New-Object 'System.Windows.Forms.CheckBox' + $textbox4 = New-Object 'System.Windows.Forms.TextBox' + $textbox5 = New-Object 'System.Windows.Forms.TextBox' + $label5 = New-Object 'System.Windows.Forms.Label' + $label6 = New-Object 'System.Windows.Forms.Label' + $label4 = New-Object 'System.Windows.Forms.Label' + $groupbox1 = New-Object 'System.Windows.Forms.GroupBox' + $button6 = New-Object 'System.Windows.Forms.Button' + $button5 = New-Object 'System.Windows.Forms.Button' + $button4 = New-Object 'System.Windows.Forms.Button' + $textbox0 = New-Object 'System.Windows.Forms.TextBox' + $label13 = New-Object 'System.Windows.Forms.Label' + $combobox1 = New-Object 'System.Windows.Forms.ComboBox' + $textbox3 = New-Object 'System.Windows.Forms.TextBox' + $label3 = New-Object 'System.Windows.Forms.Label' + $textbox2 = New-Object 'System.Windows.Forms.TextBox' + $label2 = New-Object 'System.Windows.Forms.Label' + $textbox1 = New-Object 'System.Windows.Forms.TextBox' + $label1 = New-Object 'System.Windows.Forms.Label' + $label8 = New-Object 'System.Windows.Forms.Label' + $button_abort = New-Object 'System.Windows.Forms.Button' + $folderbrowserdialog1 = New-Object 'System.Windows.Forms.FolderBrowserDialog' + $openfiledialog1 = New-Object 'System.Windows.Forms.OpenFileDialog' + $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' + #endregion Generated Form Objects + + #---------------------------------------------- + # User Generated Script + #---------------------------------------------- + + $FormEvent_Load={ + if (Test-Path $global:Confpath){ + $load = Import-Csv -Path $global:Confpath + foreach ($Line in $Load) { + $global:Language=$($Line."global:Language") + $global:Profilefolder=$($Line."global:Profilefolder") + $global:Homefolder=$($Line."global:Homefolder") + $global:Outfile=$($Line."global:Outfile") + $global:SiteName=$($Line."global:SiteName") + $global:SCCMServer=$($Line."global:SCCMServer") + $global:SCCMNameSpace=$($Line."global:SCCMNameSpace") + $global:SCCMEnabled=[bool]$($Line."global:SCCMEnabled") + $global:Nirlauncher=$($Line."global:Nirlauncher") + $global:Sysinternals=$($Line."global:Sysinternals") + $global:CmRCViewer=$($Line."global:CmRCViewer") + if ($global:Language -eq "English"){ + Write-Host "Loaded configuration from $global:Confpath" + } + } + } + else { + if ($global:Language -eq "English"){ + Write-Host "No Configfile found. Loading default Configuration." + } + } + + $Options.Text = "Options" + $label8.Text = "Language:" + + #Load Variables into textboxes + $textbox0.Text = $global:Confpath + $textbox1.Text = $global:Profilefolder + $textbox2.Text = $global:Homefolder + $textbox3.Text = $global:Outfile + if ($global:SCCMEnabled -eq $true) { + $checkbox1.Checked = $global:SCCMEnabled + $textbox4.Text = $global:SiteName + $textbox5.Text = $global:SCCMServer + $textbox6.Text = $global:SCCMNameSpace + $textbox10.Text = $global:CmRCViewer + } + else { + $checkbox1.Checked = $global:SCCMEnabled + $textbox4.enabled = $false + $textbox5.enabled = $false + $textbox6.enabled = $false + $textbox10.enabled = $false + } + $textbox8.Text = $global:Nirlauncher + $textbox9.Text = $global:Sysinternals + Load-ComboBox $combobox1 "English" + $combobox1.SelectedItem = $global:Language + } + ############################################################################################ + $checkbox1_CheckedChanged={ + if ($checkbox1.Checked -eq $true) { + $textbox4.Text = $global:SiteName + $textbox5.Text = $global:SCCMServer + $textbox6.Text = $global:SCCMNameSpace + $textbox10.Text = $global:CmRCViewer + } + else { + $textbox4.enabled = $false + $textbox5.enabled = $false + $textbox6.enabled = $false + $textbox10.enabled = $false + } + } + ############################################################################################ + $button_save_Click={ + $global:Profilefolder = $textbox1.Text + $global:Homefolder = $textbox2.Text + $global:Outfile = $textbox3.Text + $global:SiteName = $textbox4.Text + $global:SCCMServer = $textbox5.Text + $global:SCCMNameSpace = $textbox6.Text + $global:SCCMEnabled = [bool]$checkbox1.Checked + $global:Language = $combobox1.Text + $global:Nirlauncher = $textbox8.Text + $global:Sysinternals = $textbox9.Text + $global:CmRCViewer = $textbox10.Text + $Exportpath = $Confpath + New-Object -TypeName PSCustomObject -Property @{ + "global:Language" = $Language + "global:Profilefolder" = $Profilefolder + "global:Homefolder" = $Homefolder + "global:Outfile" = $Outfile + "global:SiteName" = $SiteName + "global:SCCMServer" = $SCCMServer + "global:SCCMNameSpace" = $SCCMNameSpace + "global:SCCMEnabled" = $SCCMEnabled + "global:Nirlauncher" = $Nirlauncher + "global:Sysinternals" = $Sysinternals + "global:CmRCViewer" = $CmRCViewer + } | Export-Csv -Path $Exportpath -NoTypeInformation + } + ############################################################################################ + $button_OK_Click={ + $global:Language = $combobox1.SelectedItem + $global:Profilefolder = $textbox1.Text + $global:Homefolder = $textbox2.Text + $global:Outfile = $textbox3.Text + $global:SiteName = $textbox4.Text + $global:SCCMServer = $textbox5.Text + $global:SCCMNameSpace = $textbox6.Text + $global:SCCMEnabled = [bool]$checkbox1.Checked + $global:Language = $combobox1.Text + $global:Nirlauncher = $textbox8.Text + $global:Sysinternals = $textbox9.Text + $global:CmRCViewer = $textbox10.Text + $Exportpath = $Confpath + New-Object -TypeName PSCustomObject -Property @{ + "global:Language" = $Language + "global:Profilefolder" = $Profilefolder + "global:Homefolder" = $Homefolder + "global:Outfile" = $Outfile + "global:SiteName" = $SiteName + "global:SCCMServer" = $SCCMServer + "global:SCCMNameSpace" = $SCCMNameSpace + "global:SCCMEnabled" = $SCCMEnabled + "global:Nirlauncher" = $Nirlauncher + "global:Sysinternals" = $Sysinternals + "global:CmRCViewer" = $CmRCViewer + } | Export-Csv -Path $Exportpath -NoTypeInformation + } + + $button_Export_Click={ + $folderbrowserdialog1.ShowDialog() + $save = $folderbrowserdialog1.SelectedPath += '/AdminMenuPrereqOptions.ps1.config' + New-Object -TypeName PSCustomObject -Property @{ + "global:Language" = $Language + "global:Profilefolder" = $Profilefolder + "global:Homefolder" = $Homefolder + "global:Outfile" = $Outfile + "global:SiteName" = $SiteName + "global:SCCMServer" = $SCCMServer + "global:SCCMNameSpace" = $SCCMNameSpace + "global:SCCMEnabled"= [bool]$SCCMEnabled + "global:Nirlauncher" = $Nirlauncher + "global:Sysinternals" = $Sysinternals + "global:CmRCViewer" = $CmRCViewer + } | Export-Csv -Path $save -NoTypeInformation -Force + } + ############################################################################################ + $button_abort_Click={$Options.Close()} + ############################################################################################ + $button_import_Click={ + $openfiledialog1.ShowDialog() + $load = $openfiledialog1.FileNames + $Import = Import-Csv -Path $load + Write-Host $Import + foreach ($Line in $Import) { + $global:Language=$($Line."global:Language") + $global:Profilefolder=$($Line."global:Profilefolder") + $global:Homefolder=$($Line."global:Homefolder") + $global:Outfile=$($Line."global:Outfile") + $global:SiteName=$($Line."global:SiteName") + $global:SCCMServer=$($Line."global:SCCMServer") + $global:SCCMNameSpace=$($Line."global:SCCMNameSpace") + $global:SCCMEnabled=[bool]$($Line."global:SCCMEnabled") + $global:Nirlauncher=$($Line."global:Nirlauncher") + $global:Sysinternals=$($Line."global:Sysinternals") + $global:CmRCViewer=$($Line."global:CmRCViewer") + } + # Saving the imported Config + $Exportpath = $Confpath + New-Object -TypeName PSCustomObject -Property @{ + "global:Language" = $Language + "global:Profilefolder" = $Profilefolder + "global:Homefolder" = $Homefolder + "global:Outfile" = $Outfile + "global:SiteName" = $SiteName + "global:SCCMServer" = $SCCMServer + "global:SCCMNameSpace" = $SCCMNameSpace + "global:SCCMEnabled" = [bool]$SCCMEnabled + "global:Nirlauncher" = $Nirlauncher + "global:Sysinternals" = $Sysinternals + "global:CmRCViewer" = $CmRCViewer + } | Export-Csv -Path $Exportpath -NoTypeInformation + } + ############################################################################################ + + $button1_Click={ + $folderbrowserdialog1.ShowDialog() + $textbox8.Text = $folderbrowserdialog1.SelectedPath + $global:Nirlauncher = $textbox8.Text + } + + $button2_Click={ + $folderbrowserdialog1.ShowDialog() + $textbox9.Text = $folderbrowserdialog1.SelectedPath + $global:Sysinternals = $textbox9.Text + } + + $button3_Click={ + $folderbrowserdialog1.ShowDialog() + $textbox10.Text = $folderbrowserdialog1.SelectedPath + $global:CmRCViewer = $textbox9.Text + } + + $button4_Click={ + $folderbrowserdialog1.ShowDialog() + $textbox3.Text = $folderbrowserdialog1.SelectedPath + $global:logpath = $textbox3.Text + } + + $button5_Click={ + $folderbrowserdialog1.ShowDialog() + $textbox1.Text = $folderbrowserdialog1.SelectedPath + $global:profilepath = $textbox1.Text + } + + $button6_Click={ + $folderbrowserdialog1.ShowDialog() + $textbox2.Text = $folderbrowserdialog1.SelectedPath + $global:outfile = $textbox2.Text + } + + $Options_FormClosed=[System.Windows.Forms.FormClosedEventHandler]{ + $Options.Close() + } + # --End User Generated Script-- + #---------------------------------------------- + #region Generated Events + #---------------------------------------------- + + $Form_StateCorrection_Load= + { + #Correct the initial state of the form to prevent the .Net maximized form issue + $Options.WindowState = $InitialFormWindowState + } + + $Form_StoreValues_Closing= + { + #Store the control values + $script:Options_textbox8 = $textbox8.Text + $script:Options_textbox9 = $textbox9.Text + $script:Options_textbox10 = $textbox10.Text + $script:Options_textbox6 = $textbox6.Text + $script:Options_checkbox1 = $checkbox1.Checked + $script:Options_textbox4 = $textbox4.Text + $script:Options_textbox5 = $textbox5.Text + $script:Options_textbox0 = $textbox0.Text + $script:Options_combobox1 = $combobox1.Text + $script:Options_textbox3 = $textbox3.Text + $script:Options_textbox2 = $textbox2.Text + $script:Options_textbox1 = $textbox1.Text + } + + + $Form_Cleanup_FormClosed= + { + #Remove all event handlers from the controls + try + { + $button2.remove_Click($button2_Click) + $button1.remove_Click($button1_Click) + $button_OK.remove_Click($button_OK_Click) + $button_Export.remove_Click($button_Export_Click) + $button_import.remove_Click($button_import_Click) + $button_save.remove_Click($button_save_Click) + $button3.remove_Click($button3_Click) + $checkbox1.remove_CheckedChanged($checkbox1_CheckedChanged) + $button6.remove_Click($button6_Click) + $button5.remove_Click($button5_Click) + $button4.remove_Click($button4_Click) + $button_abort.remove_Click($button_abort_Click) + $Options.remove_FormClosed($Options_FormClosed) + $Options.remove_Load($FormEvent_Load) + $Options.remove_Load($Form_StateCorrection_Load) + $Options.remove_Closing($Form_StoreValues_Closing) + $Options.remove_FormClosed($Form_Cleanup_FormClosed) + } + catch [Exception] + { } + } + #endregion Generated Events + + #---------------------------------------------- + #region Generated Form Code + #---------------------------------------------- + # + # form1 + # + $Options.Controls.Add($groupbox3) + $Options.Controls.Add($button_OK) + $Options.Controls.Add($button_Export) + $Options.Controls.Add($button_import) + $Options.Controls.Add($button_save) + $Options.Controls.Add($groupbox2) + $Options.Controls.Add($groupbox1) + $Options.Controls.Add($button_abort) + $Options.AcceptButton = $button_OK + $Options.CancelButton = $button_abort + $Options.ClientSize = '484, 489' + $Options.FormBorderStyle = 'FixedDialog' + $Options.MaximizeBox = $False + $Options.MinimizeBox = $False + $Options.Name = "form1" + $Options.StartPosition = 'CenterScreen' + $Options.Text = "Options" + $Options.add_FormClosed($Options_FormClosed) + $Options.add_Load($FormEvent_Load) + # + # groupbox3 + # + $groupbox3.Controls.Add($button2) + $groupbox3.Controls.Add($button1) + $groupbox3.Controls.Add($textbox8) + $groupbox3.Controls.Add($textbox9) + $groupbox3.Controls.Add($label10) + $groupbox3.Controls.Add($label12) + $groupbox3.Location = '12, 357' + $groupbox3.Name = "groupbox3" + $groupbox3.Size = '461, 87' + $groupbox3.TabIndex = 9 + $groupbox3.TabStop = $False + $groupbox3.Text = "External Tools" + # + # button2 + # + $button2.BackColor = 'Transparent' + #region Binary Data + $button2.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) + #endregion + $button2.BackgroundImageLayout = 'Center' + $button2.FlatStyle = 'Flat' + $button2.ForeColor = 'Control' + $button2.Location = '419, 42' + $button2.Name = "button2" + $button2.Size = '30, 26' + $button2.TabIndex = 7 + $button2.UseVisualStyleBackColor = $False + $button2.add_Click($button2_Click) + # + # button1 + # + $button1.BackColor = 'Transparent' + #region Binary Data + $button1.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) + #endregion + $button1.BackgroundImageLayout = 'Center' + $button1.FlatStyle = 'Flat' + $button1.ForeColor = 'Control' + $button1.Location = '419, 15' + $button1.Name = "button1" + $button1.Size = '30, 26' + $button1.TabIndex = 6 + $button1.UseVisualStyleBackColor = $False + $button1.add_Click($button1_Click) + # + # textbox8 + # + $textbox8.Location = '76, 19' + $textbox8.Name = "textbox8" + $textbox8.Size = '337, 20' + $textbox8.TabIndex = 5 + # + # textbox9 + # + $textbox9.Location = '76, 46' + $textbox9.Name = "textbox9" + $textbox9.Size = '337, 20' + $textbox9.TabIndex = 3 + # + # label10 + # + $label10.Location = '7, 21' + $label10.Name = "label10" + $label10.Size = '100, 23' + $label10.TabIndex = 2 + $label10.Text = "Nirlauncher:" + # + # label12 + # + $label12.Location = '7, 48' + $label12.Name = "label12" + $label12.Size = '100, 23' + $label12.TabIndex = 4 + $label12.Text = "Sysinternals:" + # + # button_OK + # + $button_OK.Anchor = 'Bottom, Right' + $button_OK.DialogResult = 'OK' + $button_OK.Location = '398, 454' + $button_OK.Name = "button_OK" + $button_OK.Size = '75, 23' + $button_OK.TabIndex = 0 + $button_OK.Text = "OK" + $button_OK.UseVisualStyleBackColor = $True + $button_OK.add_Click($button_OK_Click) + # + # button_Export + # + $button_Export.Anchor = 'Bottom, Right' + $button_Export.Location = '74, 454' + $button_Export.Name = "button_Export" + $button_Export.Size = '75, 23' + $button_Export.TabIndex = 9 + $button_Export.Text = "Export" + $button_Export.UseVisualStyleBackColor = $True + $button_Export.add_Click($button_Export_Click) + # + # button_import + # + $button_import.Anchor = 'Bottom, Right' + $button_import.DialogResult = 'OK' + $button_import.Location = '155, 454' + $button_import.Name = "button_import" + $button_import.Size = '75, 23' + $button_import.TabIndex = 8 + $button_import.Text = "Import" + $button_import.UseVisualStyleBackColor = $True + $button_import.add_Click($button_import_Click) + # + # button_save + # + $button_save.Anchor = 'Bottom, Right' + $button_save.Location = '236, 454' + $button_save.Name = "button_save" + $button_save.Size = '75, 23' + $button_save.TabIndex = 7 + $button_save.Text = "Save" + $button_save.UseVisualStyleBackColor = $True + $button_save.add_Click($button_save_Click) + # + # groupbox2 + # + $groupbox2.Controls.Add($button3) + $groupbox2.Controls.Add($textbox10) + $groupbox2.Controls.Add($label14) + $groupbox2.Controls.Add($textbox6) + $groupbox2.Controls.Add($label7) + $groupbox2.Controls.Add($checkbox1) + $groupbox2.Controls.Add($textbox4) + $groupbox2.Controls.Add($textbox5) + $groupbox2.Controls.Add($label5) + $groupbox2.Controls.Add($label6) + $groupbox2.Controls.Add($label4) + $groupbox2.Location = '13, 183' + $groupbox2.Name = "groupbox2" + $groupbox2.Size = '460, 168' + $groupbox2.TabIndex = 6 + $groupbox2.TabStop = $False + $groupbox2.Text = "SCCM" + # + # button3 + # + $button3.BackColor = 'Transparent' + #region Binary Data + $button3.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) + #endregion + $button3.BackgroundImageLayout = 'Center' + $button3.FlatStyle = 'Flat' + $button3.ForeColor = 'Control' + $button3.Location = '418, 123' + $button3.Name = "button3" + $button3.Size = '30, 26' + $button3.TabIndex = 8 + $button3.UseVisualStyleBackColor = $False + $button3.add_Click($button3_Click) + # + # textbox10 + # + $textbox10.Location = '76, 126' + $textbox10.Name = "textbox10" + $textbox10.Size = '337, 20' + $textbox10.TabIndex = 10 + # + # label14 + # + $label14.Location = '6, 128' + $label14.Name = "label14" + $label14.Size = '100, 23' + $label14.TabIndex = 9 + $label14.Text = "CmRCViewer:" + # + # textbox6 + # + $textbox6.Location = '76, 100' + $textbox6.Name = "textbox6" + $textbox6.Size = '337, 20' + $textbox6.TabIndex = 8 + # + # label7 + # + $label7.Location = '6, 102' + $label7.Name = "label7" + $label7.Size = '100, 23' + $label7.TabIndex = 7 + $label7.Text = "Namespace:" + # + # checkbox1 + # + $checkbox1.Checked = $True + $checkbox1.CheckState = 'Checked' + $checkbox1.Location = '76, 19' + $checkbox1.Name = "checkbox1" + $checkbox1.Size = '15, 24' + $checkbox1.TabIndex = 6 + $checkbox1.UseVisualStyleBackColor = $True + $checkbox1.add_CheckedChanged($checkbox1_CheckedChanged) + # + # textbox4 + # + $textbox4.Location = '76, 47' + $textbox4.Name = "textbox4" + $textbox4.Size = '337, 20' + $textbox4.TabIndex = 5 + # + # textbox5 + # + $textbox5.Location = '76, 74' + $textbox5.Name = "textbox5" + $textbox5.Size = '337, 20' + $textbox5.TabIndex = 3 + # + # label5 + # + $label5.Location = '7, 49' + $label5.Name = "label5" + $label5.Size = '100, 23' + $label5.TabIndex = 2 + $label5.Text = "Site:" + # + # label6 + # + $label6.Location = '6, 22' + $label6.Name = "label6" + $label6.Size = '100, 23' + $label6.TabIndex = 0 + $label6.Text = "SCCM:" + # + # label4 + # + $label4.Location = '7, 76' + $label4.Name = "label4" + $label4.Size = '100, 23' + $label4.TabIndex = 4 + $label4.Text = "Server:" + # + # groupbox1 + # + $groupbox1.Controls.Add($button6) + $groupbox1.Controls.Add($button5) + $groupbox1.Controls.Add($button4) + $groupbox1.Controls.Add($textbox0) + $groupbox1.Controls.Add($label13) + $groupbox1.Controls.Add($combobox1) + $groupbox1.Controls.Add($textbox3) + $groupbox1.Controls.Add($label3) + $groupbox1.Controls.Add($textbox2) + $groupbox1.Controls.Add($label2) + $groupbox1.Controls.Add($textbox1) + $groupbox1.Controls.Add($label1) + $groupbox1.Controls.Add($label8) + $groupbox1.Location = '13, 13' + $groupbox1.Name = "groupbox1" + $groupbox1.Size = '460, 164' + $groupbox1.TabIndex = 1 + $groupbox1.TabStop = $False + $groupbox1.Text = "General" + # + # button6 + # + $button6.BackColor = 'Transparent' + #region Binary Data + $button6.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) + #endregion + $button6.BackgroundImageLayout = 'Center' + $button6.FlatStyle = 'Flat' + $button6.ForeColor = 'Control' + $button6.Location = '418, 66' + $button6.Name = "button6" + $button6.Size = '30, 26' + $button6.TabIndex = 13 + $button6.UseVisualStyleBackColor = $False + $button6.add_Click($button6_Click) + # + # button5 + # + $button5.BackColor = 'Transparent' + #region Binary Data + $button5.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) + #endregion + $button5.BackgroundImageLayout = 'Center' + $button5.FlatStyle = 'Flat' + $button5.ForeColor = 'Control' + $button5.Location = '418, 41' + $button5.Name = "button5" + $button5.Size = '30, 26' + $button5.TabIndex = 12 + $button5.UseVisualStyleBackColor = $False + $button5.add_Click($button5_Click) + # + # button4 + # + $button4.BackColor = 'Transparent' + #region Binary Data + $button4.BackgroundImage = [System.Convert]::FromBase64String($baseBrowseFolder) + #endregion + $button4.BackgroundImageLayout = 'Center' + $button4.FlatStyle = 'Flat' + $button4.ForeColor = 'Control' + $button4.Location = '418, 93' + $button4.Name = "button4" + $button4.Size = '30, 26' + $button4.TabIndex = 11 + $button4.UseVisualStyleBackColor = $False + $button4.add_Click($button4_Click) + # + # textbox0 + # + $textbox0.Location = '76, 18' + $textbox0.Name = "textbox0" + $textbox0.ReadOnly = $True + $textbox0.Size = '337, 20' + $textbox0.TabIndex = 9 + # + # label13 + # + $label13.Location = '8, 20' + $label13.Name = "label13" + $label13.Size = '100, 23' + $label13.TabIndex = 8 + $label13.Text = "Configpath:" + # + # combobox1 + # + $combobox1.DisplayMember = "Deutsch, English" + $combobox1.FormattingEnabled = $True + $combobox1.Location = '76, 124' + $combobox1.Name = "combobox1" + $combobox1.Size = '121, 21' + $combobox1.TabIndex = 6 + $combobox1.ValueMember = "Deutsch, English" + # + # textbox3 + # + $textbox3.Location = '76, 98' + $textbox3.Name = "textbox3" + $textbox3.Size = '337, 20' + $textbox3.TabIndex = 5 + # + # label3 + # + $label3.Location = '7, 100' + $label3.Name = "label3" + $label3.Size = '100, 23' + $label3.TabIndex = 4 + $label3.Text = "Logpath:" + # + # textbox2 + # + $textbox2.Location = '76, 70' + $textbox2.Name = "textbox2" + $textbox2.Size = '337, 20' + $textbox2.TabIndex = 3 + # + # label2 + # + $label2.Location = '7, 72' + $label2.Name = "label2" + $label2.Size = '100, 23' + $label2.TabIndex = 2 + $label2.Text = "Homepath:" + # + # textbox1 + # + $textbox1.Location = '76, 44' + $textbox1.Name = "textbox1" + $textbox1.Size = '337, 20' + $textbox1.TabIndex = 1 + # + # label1 + # + $label1.Location = '7, 46' + $label1.Name = "label1" + $label1.Size = '100, 23' + $label1.TabIndex = 0 + $label1.Text = "Profilepath:" + # + # label8 + # + $label8.Location = '7, 126' + $label8.Name = "label8" + $label8.Size = '100, 23' + $label8.TabIndex = 7 + $label8.Text = "Sprache:" + # + # button_abort + # + $button_abort.Anchor = 'Bottom, Right' + $button_abort.DialogResult = 'Cancel' + $button_abort.Location = '317, 454' + $button_abort.Name = "button_abort" + $button_abort.Size = '75, 23' + $button_abort.TabIndex = 10 + $button_abort.Text = "Cancel" + $button_abort.UseVisualStyleBackColor = $True + $button_abort.add_Click($button_abort_Click) + # + # folderbrowserdialog1 + # + # + # openfiledialog1 + # + $openfiledialog1.FileName = "openfiledialog1" + $openfiledialog1.Filter = "CSV-Config|*.config" + #endregion Generated Form Code + + #---------------------------------------------- + + #Save the initial state of the form + $InitialFormWindowState = $Options.WindowState + #Init the OnLoad event to correct the initial state of the form + $Options.add_Load($Form_StateCorrection_Load) + #Clean up the control events + $Options.add_FormClosed($Form_Cleanup_FormClosed) + #Store the control values when form is closing + $Options.add_Closing($Form_StoreValues_Closing) + #Show the Form + return $Options.ShowDialog() + } \ No newline at end of file diff --git a/App/Extensions/AdminMenuPrereqOptions.ps1.config b/Extensions/AdminMenuPrereqOptions.ps1.config similarity index 100% rename from App/Extensions/AdminMenuPrereqOptions.ps1.config rename to Extensions/AdminMenuPrereqOptions.ps1.config diff --git a/App/Extensions/ExchangeLyncFunctions.ps1 b/Extensions/ExchangeLyncFunctions.ps1 similarity index 94% rename from App/Extensions/ExchangeLyncFunctions.ps1 rename to Extensions/ExchangeLyncFunctions.ps1 index 3bff22b..3c7b5f9 100644 --- a/App/Extensions/ExchangeLyncFunctions.ps1 +++ b/Extensions/ExchangeLyncFunctions.ps1 @@ -1,316 +1,316 @@ - -#region Remoting Engine -function Create-RemoteSession{ -<# - .SYNOPSIS - Initialize Remote Powershell Session - - .DESCRIPTION - Creates remote sessions to management servers. - - .PARAMETER Exchange - Creates an Exchange remote session - - .PARAMETER Lync - Creates a Lync remote session - - .PARAMETER ALL - Creates all available remote sessions - - .EXAMPLE - Create-RemoteSession -#> - - Param( - [switch]$Exchange, - [switch]$Lync, - [switch]$All - ) - - if($Exchange) - { - try - { - $Global:sExch = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $global:PSExchServer -Authentication Kerberos -Name 'PSRExchange' -ea 'Stop' - } - catch [Exception] - { - [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) - return - } - } - - if($Lync) - { - try - { - $Global:sLync = New-PSSession -ConnectionUri $Global:PSLync -Name 'PSRLync' -Authentication 'NegotiateWithImplicitCredential' -ea 'Stop' - } - catch [Exception] - { - [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) - return - } - } - - if($All) - { - try - { - $Global:sExch = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $global:PSExchServer -Authentication Kerberos -Name 'PSRExchange' -ea 'Stop' - } - catch [Exception] - { - [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) - return - } - try - { - $Global:sLync = New-PSSession -ConnectionUri $Global:PSLync -Name 'PSRLync' -Authentication 'NegotiateWithImplicitCredential' -ea 'Stop' - } - catch [Exception] - { - [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) - return - } - } -} - -function Check-RemoteSession{ -<# - .SYNOPSIS - Checks the status of Remote Powershell Session - - .DESCRIPTION - Checks the status of remote sessions to management servers. - Returns $true and the sessions if one or more sessions of a particular type is detected. - Returns $false and an empty variable if there are no sessions active. - - .PARAMETER Exchange - Checks the status of an Exchange remote session - - .PARAMETER Lync - Checks the status of a Lync remote session - - .EXAMPLE - Check-RemoteSession -Exchange -#> - - Param( - [switch] $Exchange, - [switch] $Lync - ) - - if ($Exchange) - { - try - { - $ExchangeResult = Get-PSSession -Name 'PSRExchange' -ea 'Stop' - } - catch [Exception] - { - return $false, $ExchangeResult - } - return $true, $ExchangeResult - } - - if ($Lync) - { - try - { - $LyncResult = Get-PSSession -Name 'PSRExchange' -ea 'Stop' - } - catch [Exception] - { - return $false, $LyncResult - } - return $true, $LyncResult - } -} - -function Repair-RemoteSession{ -<# - .SYNOPSIS - Repairs Remote Powershell Session - - .DESCRIPTION - Checks the status of remote sessions to management servers. - Repairs the session if there are broken or missing sessions. - Returns $true if a repair had to be performed. - - .PARAMETER Exchange - Repairs an Exchange remote session - - .PARAMETER Lync - Repairs a Lync remote session - - .EXAMPLE - Repair-RemoteSession -Exchange -#> - - Param( - [switch] $Exchange, - [switch] $Lync - ) - - if ($Exchange) - { - [bool]$bool,$Sessions = Check-RemoteSession -Exchange - if ($Sessions.count -eq 0) - { - Create-RemoteSession -Exchange - return $true - } - elseif ($Sessions.count -gt 1) - { - Remove-RemoteSession -Exchange - Create-RemoteSession -Exchange - return $true - } - else - { - if($Sessions.State -eq "Broken"){ - Remove-RemoteSession -Exchange - Create-RemoteSession -Exchange - return $true - } - else - { - return $false - } - } - } - - if ($Lync) - { - [bool]$bool,$Sessions = Check-RemoteSession -Lync - if ($Sessions.count -eq 0) - { - Create-RemoteSession -Lync - return $true - } - elseif ($Sessions.count -gt 1) - { - Remove-RemoteSession -Lync - Create-RemoteSession -Lync - return $true - } - else - { - if($Sessions.State -eq "Broken"){ - Remove-RemoteSession -Lync - Create-RemoteSession -Lync - return $true - } - else - { - return $false - } - } - } - -} - -function Remove-RemoteSession -{ -<# - .SYNOPSIS - Removes Remote Powershell Session - - .DESCRIPTION - Creates remote sessions to management servers - - .PARAMETER Exchange - Removes an Exchange remote session - - .PARAMETER Lync - Removes a Lync remote session - - .PARAMETER ALL - Removes all available remote sessions - - .EXAMPLE - Remove-RemoteSession -#> - Param( - [switch]$Exchange, - [switch]$Lync, - [switch]$All - ) - - # Check and remove Exchange remote sessions if they exist. - if($Exchange) - { - try - { - [bool]$bool,$Sessions = Check-RemoteSession -Exchange - } - catch - { - [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) - } - if ($Sessions.count -ge 1) - { - Remove-PSSession -Name 'PSRExchange' - return - } - else - { - return - } - } - - # Check and remove Lync remote sessions if they exist. - if($Lync) - { - try - { - [bool]$bool,$Sessions = Check-RemoteSession -Lync - } - catch - { - [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) - } - if ($Sessions.count -ge 1) - { - Remove-PSSession -Name 'PSRLync' - return - } - else - { - return - } - } - - # Check and remove both Exchange and Lync remote sessions if they exist. - if($All -or (-not $Exchange -and -not $Lync)) - { - try - { - [bool]$bool,$Sessions = Check-RemoteSession -Exchange - } - catch - { - [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) - } - if ($Sessions.count -ge 1) - { - Remove-PSSession -Name 'PSRExchange' - } - - try - { - [bool]$bool,$Sessions = Check-RemoteSession -Lync - } - catch - { - [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) - } - if ($Sessions.count -ge 1) - { - Remove-PSSession -Name 'PSRLync' - } - } - return -} -#endregion Remoting Engine + +#region Remoting Engine +function Create-RemoteSession{ +<# + .SYNOPSIS + Initialize Remote Powershell Session + + .DESCRIPTION + Creates remote sessions to management servers. + + .PARAMETER Exchange + Creates an Exchange remote session + + .PARAMETER Lync + Creates a Lync remote session + + .PARAMETER ALL + Creates all available remote sessions + + .EXAMPLE + Create-RemoteSession +#> + + Param( + [switch]$Exchange, + [switch]$Lync, + [switch]$All + ) + + if($Exchange) + { + try + { + $Global:sExch = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $global:PSExchServer -Authentication Kerberos -Name 'PSRExchange' -ea 'Stop' + } + catch [Exception] + { + [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) + return + } + } + + if($Lync) + { + try + { + $Global:sLync = New-PSSession -ConnectionUri $Global:PSLync -Name 'PSRLync' -Authentication 'NegotiateWithImplicitCredential' -ea 'Stop' + } + catch [Exception] + { + [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) + return + } + } + + if($All) + { + try + { + $Global:sExch = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $global:PSExchServer -Authentication Kerberos -Name 'PSRExchange' -ea 'Stop' + } + catch [Exception] + { + [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) + return + } + try + { + $Global:sLync = New-PSSession -ConnectionUri $Global:PSLync -Name 'PSRLync' -Authentication 'NegotiateWithImplicitCredential' -ea 'Stop' + } + catch [Exception] + { + [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) + return + } + } +} + +function Check-RemoteSession{ +<# + .SYNOPSIS + Checks the status of Remote Powershell Session + + .DESCRIPTION + Checks the status of remote sessions to management servers. + Returns $true and the sessions if one or more sessions of a particular type is detected. + Returns $false and an empty variable if there are no sessions active. + + .PARAMETER Exchange + Checks the status of an Exchange remote session + + .PARAMETER Lync + Checks the status of a Lync remote session + + .EXAMPLE + Check-RemoteSession -Exchange +#> + + Param( + [switch] $Exchange, + [switch] $Lync + ) + + if ($Exchange) + { + try + { + $ExchangeResult = Get-PSSession -Name 'PSRExchange' -ea 'Stop' + } + catch [Exception] + { + return $false, $ExchangeResult + } + return $true, $ExchangeResult + } + + if ($Lync) + { + try + { + $LyncResult = Get-PSSession -Name 'PSRExchange' -ea 'Stop' + } + catch [Exception] + { + return $false, $LyncResult + } + return $true, $LyncResult + } +} + +function Repair-RemoteSession{ +<# + .SYNOPSIS + Repairs Remote Powershell Session + + .DESCRIPTION + Checks the status of remote sessions to management servers. + Repairs the session if there are broken or missing sessions. + Returns $true if a repair had to be performed. + + .PARAMETER Exchange + Repairs an Exchange remote session + + .PARAMETER Lync + Repairs a Lync remote session + + .EXAMPLE + Repair-RemoteSession -Exchange +#> + + Param( + [switch] $Exchange, + [switch] $Lync + ) + + if ($Exchange) + { + [bool]$bool,$Sessions = Check-RemoteSession -Exchange + if ($Sessions.count -eq 0) + { + Create-RemoteSession -Exchange + return $true + } + elseif ($Sessions.count -gt 1) + { + Remove-RemoteSession -Exchange + Create-RemoteSession -Exchange + return $true + } + else + { + if($Sessions.State -eq "Broken"){ + Remove-RemoteSession -Exchange + Create-RemoteSession -Exchange + return $true + } + else + { + return $false + } + } + } + + if ($Lync) + { + [bool]$bool,$Sessions = Check-RemoteSession -Lync + if ($Sessions.count -eq 0) + { + Create-RemoteSession -Lync + return $true + } + elseif ($Sessions.count -gt 1) + { + Remove-RemoteSession -Lync + Create-RemoteSession -Lync + return $true + } + else + { + if($Sessions.State -eq "Broken"){ + Remove-RemoteSession -Lync + Create-RemoteSession -Lync + return $true + } + else + { + return $false + } + } + } + +} + +function Remove-RemoteSession +{ +<# + .SYNOPSIS + Removes Remote Powershell Session + + .DESCRIPTION + Creates remote sessions to management servers + + .PARAMETER Exchange + Removes an Exchange remote session + + .PARAMETER Lync + Removes a Lync remote session + + .PARAMETER ALL + Removes all available remote sessions + + .EXAMPLE + Remove-RemoteSession +#> + Param( + [switch]$Exchange, + [switch]$Lync, + [switch]$All + ) + + # Check and remove Exchange remote sessions if they exist. + if($Exchange) + { + try + { + [bool]$bool,$Sessions = Check-RemoteSession -Exchange + } + catch + { + [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) + } + if ($Sessions.count -ge 1) + { + Remove-PSSession -Name 'PSRExchange' + return + } + else + { + return + } + } + + # Check and remove Lync remote sessions if they exist. + if($Lync) + { + try + { + [bool]$bool,$Sessions = Check-RemoteSession -Lync + } + catch + { + [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) + } + if ($Sessions.count -ge 1) + { + Remove-PSSession -Name 'PSRLync' + return + } + else + { + return + } + } + + # Check and remove both Exchange and Lync remote sessions if they exist. + if($All -or (-not $Exchange -and -not $Lync)) + { + try + { + [bool]$bool,$Sessions = Check-RemoteSession -Exchange + } + catch + { + [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) + } + if ($Sessions.count -ge 1) + { + Remove-PSSession -Name 'PSRExchange' + } + + try + { + [bool]$bool,$Sessions = Check-RemoteSession -Lync + } + catch + { + [System.Windows.Forms.MessageBox]::Show($_.Exception.Message) + } + if ($Sessions.count -ge 1) + { + Remove-PSSession -Name 'PSRLync' + } + } + return +} +#endregion Remoting Engine diff --git a/App/Extensions/ImageBase64Resources.ps1 b/Extensions/ImageBase64Resources.ps1 similarity index 98% rename from App/Extensions/ImageBase64Resources.ps1 rename to Extensions/ImageBase64Resources.ps1 index b50e3d9..cbede8e 100644 --- a/App/Extensions/ImageBase64Resources.ps1 +++ b/Extensions/ImageBase64Resources.ps1 @@ -1,846 +1,846 @@ -#http://www.motobit.com/util/base64-decoder-encoder.asp -Function Convert-ImagetoBase64String{ - Param([String]$path) - [convert]::ToBase64String((get-content $path -encoding byte)) -} - -$AboutBase64Image_100x100 = " -iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAARnQU1BAACx -jwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABEdEVYdENvbW1lbnQAQ1JFQVRPUjogZ2QtanBl -ZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBkZWZhdWx0IHF1YWxpdHkKCUd1bAAAXFBJREFU -eF6FvWewpOl133e6+3a+OU5OO2FnZxOwCEQgQQIgFiCJJQCKBIOCJVklly2V7S8qu2y5hlW2rLLK -5bKsssulLwpl2aYCREqUaIhEzsDm2TQ7OzndOzfHDrdv+/c7PXe5dEnyO/tu9+1+w/Oc8D//c57n -ebtwojnV7xV3o1dsR7+4F51WJz77078Qn/vEL8aRuaNRHKvE69ffiRcuvxabhd2YPDAVaxvLsbI4 -HyeOHIqzE0djZHwsDh87EufOn4+jx45HPyLmFxei3+vFWLkcvVY3Npc2oloox9TURMTkWES1GDtc -o7jej42lpWhtrURhdze6O5tRjKGo1RpRKFSisbYbK1sbsby1Hp12J7qrG9Ht7MZadyfWdjux2dqL -RrkaE8MjcWByOkbHxmKoWuH+izE2PRH3Vu9Fa3snGvUaVy1EZ68df/fv/68xfWAiuv1OFLp7sRfd -KBQjKuVidLqtGCpVuHcpol+Iwl4vSvSoWBqKMt/v7fWjx3l7vT2+34sKfSoWC+xFzinQ88hX/+73 -Oe/h6/42NDTENfbePabEq+/3Pyscb06gkF7soRRPLBeGYmttO/7Oxf8lPva+n47bK7cj6uWozo7H -P/7q78XS1irt7MT9e3fjwpmz8Rd/48/EmQtPRthABLWzsBRvvvBCPP30+6JAJzYfbMSt1y/H0r3F -ODJ7OHY621GulaNQL8ROtx1b1xdj+e69WLx/M/qdViw9eBBDxaEoFavR7nZjew9l9lpRHq7H0YNH -YmZ4PEYR/twjx2OavVEejepQJYaQ6PbmZly/fj36QwiuVETgu1FE8esbG7F4bz529zoxOzsV/+R3 -/68o1fuxvr0RFYRUrmACQygAGRQQPrJB4Aq2xLVVAtfh+oUCyrCfyEurUxFDewOB7ivEfX/7//7t -5t/7ispzeF8qlVB2OV9RyFi/x40C7/Amo6XhaK124g9/5+vxo2/8ID72yQ/F6KHJWMEq/t7v/qPY -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 -" - -$AddlistBase64Icon = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWF -nZVJlYWR5ccllPAAAAw9pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2Vo -aUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb -3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodH -RwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1 -sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29t -L3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NO -kRvY3VtZW50SUQ9InhtcC5kaWQ6NTY1QjNBRjc1OUYwMTFFNjg4M0VGRDA0QUQzN0Y0OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC -5paWQ6NTY1QjNBRjY1OUYwMTFFNjg4M0VGRDA0QUQzN0Y0OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIFd -pbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0iQjBCM0NBREM1NDRFREEyQzQyMDRGRTA1OUM1MTI0 -RjIiIHN0UmVmOmRvY3VtZW50SUQ9IkIwQjNDQURDNTQ0RURBMkM0MjA0RkUwNTlDNTEyNEYyIi8+IDwvcmRmOkRlc2NyaXB0aW9uP -iA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+qo9wQwAAA0lJREFUeNrsmDtII0EYx3dmd5PN+5TDB4 -qCdjYHMRapLDTYRjiwUNBGrBQRC60kRbC5FArHiQ8UFU9Ip9UJFsHEVhRzKhZiK2g0urvZV+a+yalV1DvCuXuQDwZmZrOb387O95/ -/DEMIYa6vrz39/f1fGYbRoRgml3xbW1simUz6KRu6urr60N3d/f3k5CQ0PDws1tfXC/SCWZHL5bTV1VV8fn6e2d7eDjO9vb3ffD4f -OT09zQJYnlggFEWROjo69JaWliSDECKRSCRLLBYHBwcPdrtdx7TR0NBgZywWVVVVAs/zBEOdaJpmNT5G1/XCSGLG4vEm4OHhoXhxc -SGbBci9dvHo6EhsbW3FtbW1OoAqlZWVhbkqy7IBkiSDFHAsy5b6KRmasVNTUy5oor8CdLlcGHRRr6urIzab7flmgEIgAdjtdiNaLw -XQMAzS1NT06pc05ufnlZfS/ebmJidJkvreMnN5eanBAKncW29YUVFht3SSWDmLjd3d3QdYCrNDQ0NZSBiJaqZVAMnCwsJ9X1+fBor -O5fN53NXVpSQSiXtLyEwmk1Gj0Sja3Ny0tbe3OynwzMyMODExYYAN0jHGXDqd1m5vbxHUSwKAl2dAxkhzczP/x4AgzARsDxsMBoXH -LgRaJUxPT8vQzwCUMTg4KB8fH/Mcx5Wsg+FwWF1bW/MU+6JFn041DkTZ2NjYkAYGBgojuLS0JINo551OJxggxO7s7LgpLNRLHkGPx -2N/aboVBRQEwTY7OysDnLa+vi4BCAHXrW1tbdkoHP0NPBRDMW+p6+zs9KZSqVw8HjfoitHT0+MyQxNfm0CosbHRMT4+bm03U7ZbZb -tVtltlu1UGLHhAYkmZubu700ZHR0XIYhSJRNzso6bQSQx2SzfNbj0FQORWVlaom9FB99Tq6moH7RdF0Vy79RSBQMAZi8UeAAxBebY -uoH+cqXbrKUCc2bGxMV+xa+9lt/6PLC51ov+LQL+jAIhVVbXc+RvMTQ3WaR77/f7U4uIiDw3ZQnzG3NwccTgcabS/v/8pFAr9gB3c -R9hqyjU1NYKZZIqiaMvLywR2kE7Y6n5G9ER/b28vMDIy8uXs7CxI7ZOZp/z0v71e78/JyckoMMV/CTAASncCX2GVpk8AAAAASUVOR -K5CYII=" - -$NotifyBase64Icon_16px = " -iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ -bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp -bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 -eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 -MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo -dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw -dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu -MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz -b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N -Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 -NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Nzc2QjJEMjM3QTEyMTFFNkIzNDg4 -MkQxMjAwMEY1MjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Nzc2QjJEMjI3QTEyMTFFNkIz -NDg4MkQxMjAwMEY1MjAiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k -b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmM4MzUw -NDQ4LTE4MDctNjg0OC1iOGVkLTU5N2ZkNDZiYTEzMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp -ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp -b24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5J2PXuAAAC9ElE -QVR42qRTW0tUURRee5995niO4ziO4xhpmhIaFVgkk5nSFN2kFEOIEJUgH8K3XqReeuill4J6KDFC -u1AQRS+pJCmGSFEZkqnd0RTRmcnGGZ2ZM5ezd2umkX6AB9Y++/rtb33r20QIAev5mAgtAQ96gctm -EHI6wH9ABcOa6gcwwskeIUBiQaA8AlLWZmDh8ScQen0DVre2wMqWRpAivhwA7sWdNbj9bgrgPBG8 -G+eshqwtm38+hczFQbA2PQOWWBVULkjzfmg30uxv9dzKKrzFjkyy8Z+ZAjgHwjgAQJ1ATceASDNr -NCkQii1bJDzqsU523FcXR9zclHmYELqfAMxizGA48VAzApbimV4gYEmkkgQQkZWjeJtqKLZeLmdA -+mzvSW1+6AGmcYoztVAQWoLrdRielAbDwI3AmlYUJFYBVPpuWv48SOOrIK/82mEdv9ZmG73cps31 -N5G4Trmc/lxQdiZ5QvBtMUvxWcE0KQHCCFOvYn5FQjLvDuVXdxFhqIrnXb3JN+ky+aZcMUvfJd1R -cU/PrXgcNxe8QjHzEaZGUKU7kQUJvrkFwfd3wL+r/Yru2FsNIh5jYXez4h09ri6MtMr+r+WoDxiK -PRix70SWIavp98ftRLMN2U4/asEqkAQtgnTcwKOE8qgL9XAGC2s7w3kHOxXv2Al1fqBV8U0g4HAd -UBlQmzERXCqLTA83s6Qx4rqQ/d+u6znlFqRXSXi8g/BYGJV/oW+o7NEd5X7Tn8kxy5euRkyxMJJd -VqV53oBkLSima+4CFANLWp8aO7Dfh9QmiBH+hHkP6449F0KbjgxI+pIi+6YugpIRZzklEwzpY8UM -ECDQqqIB38ZLhPiBKFk4dv6zixin0cBcKO+QzVAdtdpMTymJulXg8SgDpgBRLOgltD6h04SQfXgC -rQwNOPEwZbibCHIbq14U3uiaZmFvj7bQn6AKRESDkAhDSgODIkjSH8nGjJGb3AWAJiKB5DymKyUe -ElYGK4EA63zOfwUYAOEOOlT1xfU2AAAAAElFTkSuQmCC" - -$NotifyBase64Icon_32px = " -iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ -bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp -bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 -eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 -MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo -dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw -dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu -MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz -b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N -Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 -NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTJGOTc3RUQ3QTEyMTFFNjk5RDNE -QUQ1REI2ODk3OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTJGOTc3RUM3QTEyMTFFNjk5 -RDNEQUQ1REI2ODk3OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k -b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmM4MzUw -NDQ4LTE4MDctNjg0OC1iOGVkLTU5N2ZkNDZiYTEzMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp -ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp -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 -UZp30wAAAABJRU5ErkJggg==" - -$AppBase64Icon_16px = " -iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ -bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp -bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 -eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 -MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo -dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw -dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu -MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz -b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N -Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 -NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEQ2Q0IxMDE3QTExMTFFNkFFREZB -NDlBMkQ4QzYyREEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEQ2Q0IxMDA3QTExMTFFNkFF -REZBNDlBMkQ4QzYyREEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k -b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkMTA3 -YzkxLWVjMDgtMzI0Yy1iOTVlLTIxMzY2ODk5MzlkMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp -ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp -b24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz71nJVkAAAC9UlE -QVR42qRTzUtUURQ/5947784bR53SdArTTNIU0cIysUL7NMnECAqiIqigRZs2kYtaBRG0aBNhUFnR -IlqqJVSWLgIzMspFi0rRHPQ5YTONPud93Y7O+Bf44Lx77rn3/M7vnHsOKqVgJZ+YjllgxG3g7jyg -M08mXD6TJKG0HicxU6oCjweAywzYFNZBPHz3G271RCAn0gUZv16Ap4XWALIZUKqZbnemAS6T7RE5 -hyjI33hBC2RWn4D+a1Uglo49u9DK2XKFL0QHpfFxF13MJSY5tGan/PEiAewh0Fr0rEOonLFloowx -+oGaQiGNRPmFJ1a4fpo7iQOI0IDIxknGELEWQZ0mWxnte0iyMI3AYnNOEyDqLDnbw+wEmOubji6E -dz+lqMfRNYtAeaV03kp7I12DAWA8TrZUEX2C1YHnPrWzSzXFfIs1qIxXXqr0xX5W+KcGpDSGXqAV -7wKunVXIX1IqFeLf2Dl0zE4F6IqAxm4D8mJ0F2r8kb6HpOvJ3Jo2K7S50QqVNfoKDl7XjKHHcubT -czE38Z5IFxCLZlT2I0oNhAc4B8o9m/n9wU05M7Sbotj6RO92K3fr4WRe3Xlits0uKb5hFuxv1/58 -e6uEHjGzyxs14M9d1z2TegVkVBM2TSmgYlojT87W6uO9Hf5If4eVU92ysK7hvBWqOJwM17eC54Bw -zOGpWbv61XD0tFhsDCWksrNK7mjRz1kEV6+YuAfMZxKzXmkMdsvocMxaVT6c2HTqJKVYxKNfdvk3 -7IOSsL6RpZuLxNWp4m2pvcoj/SVRG1Hc/00hG6AaXNUn+964crW0skrbgxKcqsLMEaE8BS6J53om -zcUxT6nX9EA/CGQVPVVtCh2+ujxjQk72rUZz+kg8f2+Z4xXptqssITUO2QEBuhTUVTiKnO8k5xmK -foycn6Vb+S6B3Sd7ccD4MIrBtd2ZgR1LrYD/TAcSSQ/s+Rgk52bJyJaHKUiSn54uIz1QhOGBzAiB -PxiC3KAPcKXj/F+AAQA1xDh2gB0TOQAAAABJRU5ErkJggg==" - -$AppBase64Icon_32px = " -iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ -bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp -bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 -eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 -MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo -dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw -dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu -MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz -b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N -Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 -NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTlBNDEzN0M3QTExMTFFNjlDQjBG -MzczMjU5QzUzNjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTlBNDEzN0I3QTExMTFFNjlD -QjBGMzczMjU5QzUzNjMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k -b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkMTA3 -YzkxLWVjMDgtMzI0Yy1iOTVlLTIxMzY2ODk5MzlkMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp -ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp -b24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5L9B9sAAAHEElE -QVR42uxXaWxUVRQ+9743b5YOM12gbQq1BSoKirIo0EXEYBAENfwgImA0GlfABImNsYbgEpdgRIWA -cVcENCYiAcGgAoUIQtRSoC7V0NKyWEpra2d/y/W7b6YwnQ6l//rHl5w3793lnXO++51lmBCCBvLi -NMDXgBugGqag3XVtFIyaxBkjEhYp4XPEhEl9HI4vId1LsJGF8Np+yR2Mk+nOxQaFHCqjW8fmkFPl -xDpDOpVWHaSG1jAmVGJGkDJrXiIl2k6CKfFvJ+uJP38JmZFiQB1+yzBkJu+wp6QzagZ1TKiimOqn -7AxOP79STrk+jVS5xONUyOuSlikwQKFBDpMUfMHiSvxTTC0lxo6RZQaI2Z/Pxi0jxccciCkfhOJW -mKWXQfF+SpBcwFsDOmLQkeHktivpOOAipozQ/SXXma7sHGbFoJzNx/YDmNsMGH2CO27C77A4GsnC -/RifI7jTi/VvQfk+4molcZ60Jg0HerwJc7Hg2mtdYx4FEqEW57lD6zMat35PZuw8ZudAjsKzovSH -LAYDrG1M6I3ArthWaBmvwgh4Yb3Rzyhg67C4EoZEhOrJC10xe2WweO4koPB4YkHR5Xktint4axmr -gcySS0UciM+IMdbN1DDXA6s8J7++X0YDN0IUzZ20HATazSyjM2XvGch+SDWksW+bzDW4l6Q1QDcs -l2FayoVzgmI1eLrOJg+eherOjw654TbBlQXMjHyDseNYCF7QGMhUyDTINdh7Oxw4lEaHAXkO0pDW -gOb2yNi2gF6tcJoIvAgko1DhzCqSEQADYD0PjJy/sWPCs0+Gh83YKBTnVGaEP0eeSEZE5oCdtjFM -+TxFxzHISohOrDcRud+tNrk1PhEOI2SstYB7u+EbPh9nl4BPEIhHhqdgeuDKhRsQy9WhojlLTC0z -i5lhzBlJUFsR3O6DoqNJOoAOXWcrF9QrGvjgQVqLz+34whLCjffFWDW7W7ngCBIWzwXSCHhOlmvw -2ODIu9cAkdpAyYIVpid3qG2IGY3nDGHhga9M0qHhaLaBT7946z/ZhHVcZsULBghsQkWswnP9BUe4 -hmTiIjXU8hPTu06CB/ZYIrRkiIIbnsJw4aznOsY9U9t11YNr9KwxN8p5OYdFO2F410VkxBVQPF4N -NE4iK8aTUVATiaoZUoEJJA7lZjXY3OVqOfiu6+z+ryyHNz+WM640mjf5cd1bXCGtl2jI9Gobomg5 -kYKbl0TzyxergZPVzpYfP3Ker/mKR1pfxNql0js4817MP6ohVDS7lRSXIbmWJhGxVpzTU0qgOdd/ -fK3GY/9MACEP8Gh7pvvUrnWus9VT9cyrSyP5ZffpmaPnWppviI1G4mhkyoSB03TfyGmhwlmnnG01 -H8OYB4BeVqjozoWGt3CZYKopjNhe+F+pcHbC1iqL0fTnD9PJ8xFyKIwyj7yySw003YLzV3sSRgxj -Zuy0fEJVy4vm3jgvklf+qJlRcA1qRByV7hIE3gAZyYuITC4oahoypE1oFF9yOXjDnhWTS4fnult4 -askUDq9Mux2gR0riYTMRgiRFiba1eBq3rUXVnOj989OFMPigVCjnuqtfHBXhAik1u6bYBZMRfKT2 -Ln34B3tOLU1JxcJe1DXq3vtNZ1YJI6scA8EkAyohdgUElDJBSQ+j7uZdm4Bame/X9bdrHX/sAHLy -zCkediJRTWWVDZ/B+oUYfwT9QPs3ta3zdFOwlPwsJPtjQKITSurAge8uVnYxCps/xMe0HojBEKnI -ee7wTt+x1bP9v66borUded/OCSzuNRYYGQ1b7uWxfzdZQnlnkFstHVfk2xHVLXfvAiG6GSpmMWGU -9+CBsObh9i0UV/TMJvLM3ddj7Rat7WiV/+jqdzxNO56II6GQEmltAil3yyxr4fseTalftejqZehB -Quol2qdskOozkMeXxsCpiSJUA/mN7PwtUGjEDXZYS7i5MsPRWX8XuKBjzoEjLYjkTpmLvVvsAgnE -DEv00ZQK0YGvrLhM3R0PWQBZhA1TkkMaScvl+PdEsevvAy9YDg/Q8bgCJXd/aTkzZaMyOK6iLwPs -MijeRDOxPGUi2I9GNxBnE3vJ+9emvd4/Nz/s6DrxgxI+/xeGYSi7qp9tuWwKzdeBxNMJHvxsFxWi -eyCn02yQYfsY1o7Fnq2QHHh7h6dp+7v+mpcr/LWvjeZ6EM0N/6FXSyaPwwT3uGUXh6SOVgLBX2Uk -mvCyL6FYZrCHIENTDDgHeduOJEGLYPJcGLPRJqJMVGbEkASUeqykfl+V3ZDTwQklGV0xANEZxaJR -0iORRCW0r839gF4kHDISx7ChR2Sh55H/Azh0SX3dXRizYM6Zf6JkSNMwKGDt2RPHydBjF1u13tdw -SF7KHwZkT/o9PacFIlWlghHXglYO9IGAL9tl/7L//5wOtAH/CTAAP8ISHIXTdbMAAAAASUVORK5C -YII=" - -$AppBase64Icon_48px = " -iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ -bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp -bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 -eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 -MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo -dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw -dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu -MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz -b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N -Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 -NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjU1OTFDMDA3QTExMTFFNkE5NTI4 -QUM5RjcxNTU5Q0YiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjU1OTFCRkY3QTExMTFFNkE5 -NTI4QUM5RjcxNTU5Q0YiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k -b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkMTA3 -YzkxLWVjMDgtMzI0Yy1iOTVlLTIxMzY2ODk5MzlkMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp -ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp -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 -3N7H/wQYAAJCqisBlyyOAAAAAElFTkSuQmCC" - -$AppBase64Icon_48px_MahApps = " -iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ -bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp -bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 -eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 -MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo -dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw -dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu -MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz -b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N -Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 -NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTZCNENDMDQ3QTEzMTFFNkE1QTZC -QzNFNDcxRThGNDIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTZCNENDMDM3QTEzMTFFNkE1 -QTZCQzNFNDcxRThGNDIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k -b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmRlYWEw -MjZlLTBkNjUtMDE0Yi05YWI3LTNiOThjNzgzNmUxZiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp -ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp -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 -7wb8I8AAMT8awBvD4nwAAAAASUVORK5CYII=" - -$AppBase64Icon = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAs -TAAALEwEAmpwYAAAAB3RJTUUH4AcUDA00KsveZgAABThJREFUSMeNVWtsVFUQ/ubcu3e37+6yZWlpi4oEEFgxYkOiYFu2/qAGBIIJ -BkKCCFUTNZGHhgQJmmAIfxAMIPADIcSQaDC04dVSjUlNoPijDWAREVpo2O37tXufZ/zRW7wtBTnJTc7cnJnJfDPffBSLlSp49DAAe -oL9pON9y6p7Ifdj1xaex/D5VDp7ttb2Rlm8uEIxTYs8/uP6quM8wJg7dXT0pEej0bXMLIiIAXA83nUsGMwe+j9fNwGxz+5DwIyzru -UR+0Pc1d2fBoAikVDSsuwQM+8lIjAP+9u2c0bTfEOJRHeACHLixAm6YZjCk4AASAEQ5rTUyzsFq7SrM/c/c6v4I/+585ccwzBP6bq -x7969eJGUcok3OABIKZe2tycKDcPcp+vmiXi8K+P8+QPWWERo6avFouXZbRn9mdMuATQNYB0Q2/N+XReSasYuAJ1ElMPMvod1Dyez -APQBCLm4X9Y0rSISCSVN03oIl0gGptCCxo3J6dc3zQdzPUARQB7qmbfzH5L2NSIKu8FtAANENMDMNgAfgLCnqSWmaR7r6OgJeHsgL -tb95sy+CZkBA7lDf6wB+B5AsNMnvqvY/bvgWC0A6gG8L4SoZOZKAFUA6rxTRUSSCINSylGTRQVV9dWa1b3hztEV7YUbzpdLobmObA -PcpA7e/ebuiXXHCZDLl1cqAHEolI2mpr/SUil9C4DtLmSdQoiS4uJJramUMdJspvyq+gYCzwK4GqB3/uvPKJ7dIrY/1cyuhnnX1vc -AAt2Zc6mvP+k3TetnZl4EwCLCJiGUaiGoKz8/PGgYFmjyxouVTEq1h3wAyJNhFDGbiZ1TwjF+ajvy5nUAiEaj7zHzd57mg4i2NjU1 -7Y7FSlVRkDh9gdh+G8B9AGDFv1cbvD1T+nNXArg9uhKaw6R+6agZDQVVdZcKN16oSE801YCdhmFypL4KdDW/EG5pOjzCL4rFypTa2 -npnQRbCeg4mGdnTVrMS2Ap2Lmcmrr/VtuzCDEnq5wBKAMoZZzXdYX/WNq335hUzc8on5JgfAEgQ2x/nd9T8SLFYqVJb+4sTjUa3Mv -PX3lIBbGhubj4MAEXrq6dLJbCCSawEaO7T7EFiawnFYqWKpvkQj3dl2rYzgZmXMPNud87r0tICS7MyA0a4/zIzFDTOOZJraOH5TOo -eADMeXboAgO8BLAGoRQCAaVoUDGYPFRZGWoWg0y5DAWBRKqVv6etP+jOiy9guLsPcvpO99w+9UdN6sHyWr//2GkBeHSbhcCVCmgvb -D5av9ZvxmQAnyNUDAkC9vf0Bw7D2A1jtYSiIqA7ADwBa3F/TmXkVSbtYmL07EuXH1oJ8FQDfyxlonjm19aD+SvMN+UUv5Kh17a7i3 -DHB4c756wBSrp0GQGWhQvqDn6nJ+E47Y3IFQIV9WbNPduS8uGIo4wYqXl6ojhKHSGRCyu/X1gK4MkJ/Zu4EYAFQiSiLmbNcHbGIqJ -NJmR1s3PE8iNYD/AAQC9oKN/x+uvTbTL/VycLbdV03xZUrjb2a5qsAcAbgk0KIEiJsHruuiWgzEZUAOC7V9PL2A2VHswf/nKrafS9 -F4udeK7v64aCuRUCxWKkAoHhHQNN86OjoCUgpqaAgL9nWFp/iOM7fXtiI6LmiokmtDx50pgPgcDg3JVKdUJ1BMn1B2EoWAGZ1nCEm -07Q4JydTB4BUyhBCULeUtJmZmYiImaGqSo+uG5Sbm5VyFY7gC5LpC7IH9RHJHCVzozQVAOfn5w3U1FzYM0b0VVf0n+QrRyCixwV/j -P3Ub/8F226B2BmGh7QAAAAASUVORK5CYII=" - - - - -# Option Menu Icons -$base64 = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcE -hZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAAJESURBVHhe7ZZRaiNRDAR9ON//St4 -JKIskikc3gwaBU1A/DQ9V/DHk9fl87rgFapPE0XAL1CaJo+EWqE0SR8MtUJskjoZboDZJHA0L7/f79YRxLtO7ZHE0LFDshHEu07tk -cTQsUOyEcS7Tu2RxNCxQ7IRxLtO7ZHE03AK1SeJouAVqk8TRcAvUJomj4RaoTRJHwwJ9sCaMc5neJYujYYFiJ4xzmd4li6NhgWInj -HOZ3iWLo2GBYieMc5neJYuj4RaoTRJHwy1QmySOhlugNkkcDbdAbZI4GhbogzVhnMv0LlkcDQsUO2Gcy/QuWRwNCxQ7YZzL9C5ZHA -0LFDthnMv0LlkcDbdAbZI4Gm6B2iRxNNwCtUniaLgFapPE0bBAH6wJ41ymd8niaFig2AnjXKZ3yeJoWKDYCeNcpnfJ4mhYoNgJ41y -md8niaLgFapPE0XAL1CaJo+EWqE0SR8MtUJskjoYF+mBNGOcyvUsWR8MCxU4Y5zK9SxZHwwLFThjnMr1LFkfDAsVOGOcyvUsWR8Mt -UJskjoZboDZJHA23QG2SOBpugdokcTTcArVJ4mi4BWqTxNFwC9QmiaPhFqhNEkfDLVCbJI6GW6A2SRwd6V/VJ6UmRxwdKepJqckRR -0eKOnm9OUJvTl5PbomjI0WdvN4coTcnrye3xNGRok5eb47Qm5PXk1vi6EhRJ683R+jNyevJLXF0pKiT15sj9Obk9eSWODpS1JNSky -OOjhT1pNTk2Idv4f/f/I1//C9/P8CPX/4DfF7/AHQpDe71ItxOAAAAAElFTkSuQmCC" - - -$baseBrowseFolder = " -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 +#http://www.motobit.com/util/base64-decoder-encoder.asp +Function Convert-ImagetoBase64String{ + Param([String]$path) + [convert]::ToBase64String((get-content $path -encoding byte)) +} + +$AboutBase64Image_100x100 = " +iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAARnQU1BAACx +jwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABEdEVYdENvbW1lbnQAQ1JFQVRPUjogZ2QtanBl +ZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBkZWZhdWx0IHF1YWxpdHkKCUd1bAAAXFBJREFU +eF6FvWewpOl133e6+3a+OU5OO2FnZxOwCEQgQQIgFiCJJQCKBIOCJVklly2V7S8qu2y5hlW2rLLK +5bKsssulLwpl2aYCREqUaIhEzsDm2TQ7OzndOzfHDrdv+/c7PXe5dEnyO/tu9+1+w/Oc8D//c57n +ebtwojnV7xV3o1dsR7+4F51WJz77078Qn/vEL8aRuaNRHKvE69ffiRcuvxabhd2YPDAVaxvLsbI4 +HyeOHIqzE0djZHwsDh87EufOn4+jx45HPyLmFxei3+vFWLkcvVY3Npc2oloox9TURMTkWES1GDtc +o7jej42lpWhtrURhdze6O5tRjKGo1RpRKFSisbYbK1sbsby1Hp12J7qrG9Ht7MZadyfWdjux2dqL +RrkaE8MjcWByOkbHxmKoWuH+izE2PRH3Vu9Fa3snGvUaVy1EZ68df/fv/68xfWAiuv1OFLp7sRfd +KBQjKuVidLqtGCpVuHcpol+Iwl4vSvSoWBqKMt/v7fWjx3l7vT2+34sKfSoWC+xFzinQ88hX/+73 +Oe/h6/42NDTENfbePabEq+/3Pyscb06gkF7soRRPLBeGYmttO/7Oxf8lPva+n47bK7cj6uWozo7H +P/7q78XS1irt7MT9e3fjwpmz8Rd/48/EmQtPRthABLWzsBRvvvBCPP30+6JAJzYfbMSt1y/H0r3F +ODJ7OHY621GulaNQL8ROtx1b1xdj+e69WLx/M/qdViw9eBBDxaEoFavR7nZjew9l9lpRHq7H0YNH +YmZ4PEYR/twjx2OavVEejepQJYaQ6PbmZly/fj36QwiuVETgu1FE8esbG7F4bz529zoxOzsV/+R3 +/68o1fuxvr0RFYRUrmACQygAGRQQPrJB4Aq2xLVVAtfh+oUCyrCfyEurUxFDewOB7ivEfX/7//7t +5t/7ispzeF8qlVB2OV9RyFi/x40C7/Amo6XhaK124g9/5+vxo2/8ID72yQ/F6KHJWMEq/t7v/qPY +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 +" + +$AddlistBase64Icon = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWF +nZVJlYWR5ccllPAAAAw9pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2Vo +aUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb +3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodH +RwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1 +sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29t +L3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NO +kRvY3VtZW50SUQ9InhtcC5kaWQ6NTY1QjNBRjc1OUYwMTFFNjg4M0VGRDA0QUQzN0Y0OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC +5paWQ6NTY1QjNBRjY1OUYwMTFFNjg4M0VGRDA0QUQzN0Y0OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIFd +pbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0iQjBCM0NBREM1NDRFREEyQzQyMDRGRTA1OUM1MTI0 +RjIiIHN0UmVmOmRvY3VtZW50SUQ9IkIwQjNDQURDNTQ0RURBMkM0MjA0RkUwNTlDNTEyNEYyIi8+IDwvcmRmOkRlc2NyaXB0aW9uP +iA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+qo9wQwAAA0lJREFUeNrsmDtII0EYx3dmd5PN+5TDB4 +qCdjYHMRapLDTYRjiwUNBGrBQRC60kRbC5FArHiQ8UFU9Ip9UJFsHEVhRzKhZiK2g0urvZV+a+yalV1DvCuXuQDwZmZrOb387O95/ +/DEMIYa6vrz39/f1fGYbRoRgml3xbW1simUz6KRu6urr60N3d/f3k5CQ0PDws1tfXC/SCWZHL5bTV1VV8fn6e2d7eDjO9vb3ffD4f +OT09zQJYnlggFEWROjo69JaWliSDECKRSCRLLBYHBwcPdrtdx7TR0NBgZywWVVVVAs/zBEOdaJpmNT5G1/XCSGLG4vEm4OHhoXhxc +SGbBci9dvHo6EhsbW3FtbW1OoAqlZWVhbkqy7IBkiSDFHAsy5b6KRmasVNTUy5oor8CdLlcGHRRr6urIzab7flmgEIgAdjtdiNaLw +XQMAzS1NT06pc05ufnlZfS/ebmJidJkvreMnN5eanBAKncW29YUVFht3SSWDmLjd3d3QdYCrNDQ0NZSBiJaqZVAMnCwsJ9X1+fBor +O5fN53NXVpSQSiXtLyEwmk1Gj0Sja3Ny0tbe3OynwzMyMODExYYAN0jHGXDqd1m5vbxHUSwKAl2dAxkhzczP/x4AgzARsDxsMBoXH +LgRaJUxPT8vQzwCUMTg4KB8fH/Mcx5Wsg+FwWF1bW/MU+6JFn041DkTZ2NjYkAYGBgojuLS0JINo551OJxggxO7s7LgpLNRLHkGPx +2N/aboVBRQEwTY7OysDnLa+vi4BCAHXrW1tbdkoHP0NPBRDMW+p6+zs9KZSqVw8HjfoitHT0+MyQxNfm0CosbHRMT4+bm03U7ZbZb +tVtltlu1UGLHhAYkmZubu700ZHR0XIYhSJRNzso6bQSQx2SzfNbj0FQORWVlaom9FB99Tq6moH7RdF0Vy79RSBQMAZi8UeAAxBebY +uoH+cqXbrKUCc2bGxMV+xa+9lt/6PLC51ov+LQL+jAIhVVbXc+RvMTQ3WaR77/f7U4uIiDw3ZQnzG3NwccTgcabS/v/8pFAr9gB3c +R9hqyjU1NYKZZIqiaMvLywR2kE7Y6n5G9ER/b28vMDIy8uXs7CxI7ZOZp/z0v71e78/JyckoMMV/CTAASncCX2GVpk8AAAAASUVOR +K5CYII=" + +$NotifyBase64Icon_16px = " +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp +bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 +eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 +MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo +dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw +dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu +MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz +b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N +Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 +NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Nzc2QjJEMjM3QTEyMTFFNkIzNDg4 +MkQxMjAwMEY1MjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Nzc2QjJEMjI3QTEyMTFFNkIz +NDg4MkQxMjAwMEY1MjAiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k +b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmM4MzUw +NDQ4LTE4MDctNjg0OC1iOGVkLTU5N2ZkNDZiYTEzMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp +ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp +b24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5J2PXuAAAC9ElE +QVR42qRTW0tUURRee5995niO4ziO4xhpmhIaFVgkk5nSFN2kFEOIEJUgH8K3XqReeuill4J6KDFC +u1AQRS+pJCmGSFEZkqnd0RTRmcnGGZ2ZM5ezd2umkX6AB9Y++/rtb33r20QIAev5mAgtAQ96gctm +EHI6wH9ABcOa6gcwwskeIUBiQaA8AlLWZmDh8ScQen0DVre2wMqWRpAivhwA7sWdNbj9bgrgPBG8 +G+eshqwtm38+hczFQbA2PQOWWBVULkjzfmg30uxv9dzKKrzFjkyy8Z+ZAjgHwjgAQJ1ATceASDNr +NCkQii1bJDzqsU523FcXR9zclHmYELqfAMxizGA48VAzApbimV4gYEmkkgQQkZWjeJtqKLZeLmdA ++mzvSW1+6AGmcYoztVAQWoLrdRielAbDwI3AmlYUJFYBVPpuWv48SOOrIK/82mEdv9ZmG73cps31 +N5G4Trmc/lxQdiZ5QvBtMUvxWcE0KQHCCFOvYn5FQjLvDuVXdxFhqIrnXb3JN+ky+aZcMUvfJd1R +cU/PrXgcNxe8QjHzEaZGUKU7kQUJvrkFwfd3wL+r/Yru2FsNIh5jYXez4h09ri6MtMr+r+WoDxiK +PRix70SWIavp98ftRLMN2U4/asEqkAQtgnTcwKOE8qgL9XAGC2s7w3kHOxXv2Al1fqBV8U0g4HAd +UBlQmzERXCqLTA83s6Qx4rqQ/d+u6znlFqRXSXi8g/BYGJV/oW+o7NEd5X7Tn8kxy5euRkyxMJJd +VqV53oBkLSima+4CFANLWp8aO7Dfh9QmiBH+hHkP6449F0KbjgxI+pIi+6YugpIRZzklEwzpY8UM +ECDQqqIB38ZLhPiBKFk4dv6zixin0cBcKO+QzVAdtdpMTymJulXg8SgDpgBRLOgltD6h04SQfXgC +rQwNOPEwZbibCHIbq14U3uiaZmFvj7bQn6AKRESDkAhDSgODIkjSH8nGjJGb3AWAJiKB5DymKyUe +ElYGK4EA63zOfwUYAOEOOlT1xfU2AAAAAElFTkSuQmCC" + +$NotifyBase64Icon_32px = " +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp +bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 +eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 +MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo +dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw +dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu +MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz +b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N +Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 +NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTJGOTc3RUQ3QTEyMTFFNjk5RDNE +QUQ1REI2ODk3OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTJGOTc3RUM3QTEyMTFFNjk5 +RDNEQUQ1REI2ODk3OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k +b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmM4MzUw +NDQ4LTE4MDctNjg0OC1iOGVkLTU5N2ZkNDZiYTEzMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp +ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp +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 +UZp30wAAAABJRU5ErkJggg==" + +$AppBase64Icon_16px = " +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp +bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 +eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 +MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo +dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw +dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu +MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz +b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N +Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 +NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEQ2Q0IxMDE3QTExMTFFNkFFREZB +NDlBMkQ4QzYyREEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEQ2Q0IxMDA3QTExMTFFNkFF +REZBNDlBMkQ4QzYyREEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k +b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkMTA3 +YzkxLWVjMDgtMzI0Yy1iOTVlLTIxMzY2ODk5MzlkMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp +ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp +b24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz71nJVkAAAC9UlE +QVR42qRTzUtUURQ/5947784bR53SdArTTNIU0cIysUL7NMnECAqiIqigRZs2kYtaBRG0aBNhUFnR +IlqqJVSWLgIzMspFi0rRHPQ5YTONPud93Y7O+Bf44Lx77rn3/M7vnHsOKqVgJZ+YjllgxG3g7jyg +M08mXD6TJKG0HicxU6oCjweAywzYFNZBPHz3G271RCAn0gUZv16Ap4XWALIZUKqZbnemAS6T7RE5 +hyjI33hBC2RWn4D+a1Uglo49u9DK2XKFL0QHpfFxF13MJSY5tGan/PEiAewh0Fr0rEOonLFloowx ++oGaQiGNRPmFJ1a4fpo7iQOI0IDIxknGELEWQZ0mWxnte0iyMI3AYnNOEyDqLDnbw+wEmOubji6E +dz+lqMfRNYtAeaV03kp7I12DAWA8TrZUEX2C1YHnPrWzSzXFfIs1qIxXXqr0xX5W+KcGpDSGXqAV +7wKunVXIX1IqFeLf2Dl0zE4F6IqAxm4D8mJ0F2r8kb6HpOvJ3Jo2K7S50QqVNfoKDl7XjKHHcubT +czE38Z5IFxCLZlT2I0oNhAc4B8o9m/n9wU05M7Sbotj6RO92K3fr4WRe3Xlits0uKb5hFuxv1/58 +e6uEHjGzyxs14M9d1z2TegVkVBM2TSmgYlojT87W6uO9Hf5If4eVU92ysK7hvBWqOJwM17eC54Bw +zOGpWbv61XD0tFhsDCWksrNK7mjRz1kEV6+YuAfMZxKzXmkMdsvocMxaVT6c2HTqJKVYxKNfdvk3 +7IOSsL6RpZuLxNWp4m2pvcoj/SVRG1Hc/00hG6AaXNUn+964crW0skrbgxKcqsLMEaE8BS6J53om +zcUxT6nX9EA/CGQVPVVtCh2+ujxjQk72rUZz+kg8f2+Z4xXptqssITUO2QEBuhTUVTiKnO8k5xmK +foycn6Vb+S6B3Sd7ccD4MIrBtd2ZgR1LrYD/TAcSSQ/s+Rgk52bJyJaHKUiSn54uIz1QhOGBzAiB +PxiC3KAPcKXj/F+AAQA1xDh2gB0TOQAAAABJRU5ErkJggg==" + +$AppBase64Icon_32px = " +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp +bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 +eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 +MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo +dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw +dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu +MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz +b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N +Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 +NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTlBNDEzN0M3QTExMTFFNjlDQjBG +MzczMjU5QzUzNjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTlBNDEzN0I3QTExMTFFNjlD +QjBGMzczMjU5QzUzNjMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k +b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkMTA3 +YzkxLWVjMDgtMzI0Yy1iOTVlLTIxMzY2ODk5MzlkMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp +ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp +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 +YII=" + +$AppBase64Icon_48px = " +iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp +bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 +eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 +MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo +dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw +dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu +MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz +b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N +Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 +NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjU1OTFDMDA3QTExMTFFNkE5NTI4 +QUM5RjcxNTU5Q0YiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjU1OTFCRkY3QTExMTFFNkE5 +NTI4QUM5RjcxNTU5Q0YiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k +b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkMTA3 +YzkxLWVjMDgtMzI0Yy1iOTVlLTIxMzY2ODk5MzlkMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp +ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp +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 +3N7H/wQYAAJCqisBlyyOAAAAAElFTkSuQmCC" + +$AppBase64Icon_48px_MahApps = " +iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA3FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp +bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 +eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1 +MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo +dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw +dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu +MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz +b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N +Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2 +NDM1NWI2OWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTZCNENDMDQ3QTEzMTFFNkE1QTZC +QzNFNDcxRThGNDIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTZCNENDMDM3QTEzMTFFNkE1 +QTZCQzNFNDcxRThGNDIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5k +b3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmRlYWEw +MjZlLTBkNjUtMDE0Yi05YWI3LTNiOThjNzgzNmUxZiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRp +ZDoxYjVmYjFkNS03OTAyLTZkNDEtYjIwNy1kMDA2NDM1NWI2OWIiLz4gPC9yZGY6RGVzY3JpcHRp +b24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7fLXdzAAAIDElE +QVR42uyZf0yVZRTHL/fyU8D4ISAmXlFgieDKZWVmmdksf5TVamXZb7NaZuvH1kYzN6tZWWtSOTWb +ptZ0YQttZm6mZi0zM2QTRAMhGOBFfnNBQO1z6HnZ2/V97/tekD9cPtvXe+V93vOcc55zvuc8zw06 +f/6841IeTsclPi4bcNmAfo5g+ae1tdXR0NDgcDr7b8+gQYOSXC5XhNEzCKPb6/VWnTt3rk/MIYSD +bEdSUlKvrr0GVFRU9Dzs60ApR2RkpHvs2LEHkRPtuzYIEgNqa2vv9Xg8u/qylhgQHBzsGDJkyH8N +CAoK6lHerlARJAqLEHlXkxEaGnoFCySYvSdzQkJCEvRrabLkmVUEaDvQrxwQISgR7na7F+HxRFlc +twsdytv+dqpDqz3yLka7Ro4cuXDw4MHus2fPDnwSs2BcRkbG5uTk5I/S09O/DQ8Pj+3u7u7xIPGf +Jo72935EREQquxQk7+CIoLS0tM+HDh26Alnbo6KihukdYmdIXDqIS0dZWZm2PWHgbnALGKU8Wgy2 +Inw/is8ZMWLEN5qA9vb23TU1NSsTEhKeRoFbxUardOno6Pj91KlTH8fFxd3IO89qDzo7Ow8XFxff +icxao3DSciA7O1uMNzUgBuSDyQaLrwXPY8ACmGDFQNDimTNnDpaUlMyArep8jTAywCiEGoF48g3Q +5fPsKYSsKi8vz21ra9s6EAaEhYVNIETzCbVYO+FklgOSTW+DaaDCh0keR/DV1dXVS6wSth9GTMSI +b/lMsGo2rZJ4H3j5gpeczhnUjkK+NpkwTR0hsKexsXEDBXI9u7UThvk7ECMgh8kxMTHZVrvQWwf8 +jAoDPp/Y1dXlOHny5FwYJIfFJqkkLCShP0Tx70hUj+Y9xf/RUOUUSOAl2GqqlQHIWHz69Ok9VrWp +xwC89QyL/MrXIwZz7jX42yzwM8ouY5FpMNBkYnZ8ZWVlLkno1Qqc3jEY3EIF3saObBs+fPhCDP+A +P4cYbSBzlp44cWKpOMDCuf+GEJ57kI/9kqQ+zyeCF03evRHv5LPFB8iH5NLS0vdQ0iseM1pUq/YS +EuxcLkTwEH/uNqqVOCVfipqV8r0GQE1/8iH9y2dgC5gDXgXbpT+zkDEOj68HpSyYw/+T/RYeZQhG +51ELcgymuKDol7RKrcFvISMUZuKV7f1p5nTDA74Aq8Bxi8bMCacfJD/G+5BAPXVpHnO8Mo+qXQFp +lJoWMjwRTggcwoDMi8iGbWAz+AT8YcjVhAn58DDY6E8QofnLkSNHJsl8w0KGEdKEPW9QuPozIsGT +4DeQB+7wTVoJJ9hmpyqe5nHudMaZ5YO+DuxVPVCJiZy1GDoOPKLqg93hUky2AxwCrwG3Ukxahzo8 +fNLgvU6e/UoN+YbeaE8gzZz0Qk+A29X3IuasIy5/gipDmROMUC9/z0aB5/i8DyQGuDvNYBtYh+zd +8fHx1yYmJr4WHR0t9Bze3NycW1VVtYZ1Olk3hHUkr2olme00c71JphUiWmgHXD8P7l7CnBi2PQ9O +X9nU1HRYKX8PeEzRbqDjDxRbRYjkYUA4CsYjP56/5aD4Tao7lor/A/q8yfMiWwakpKQ8g+KZCInl +4DKJF0b7LFxXUFCQyja36uLzJmWIGBQfoCH1KC1JH8qaT5kwVwt6zMeAzbITvZXYiOLwxm0o/oCf +BeNpCUYTnwU6w/crLFaGzFdnCjsjToWkvxoSDaWuZ81i9CuwauY6rQ5DsbGxM0yeVYNl4BogB5aC +i0Vt7FIY+bHEXxL37ADKXUPzdZs2j0RbyLal+PB4WWFhYRatiNei7IeosHrB5KBkNSqUDK3Kt2dl +ZaVDKlVOs3JfX19/GKOWC2is3pe2+AJ+dLlSOZ3l2Lgg7lItys1gumpR7JwlziqjpcCOBe/Ke4RR +BAyV5TeEhKO16w9JGKr1aqP+n3Pt67TI9wdwo/ADYTAbjFMtR7ufue+oSi5VvQG8jl7T0acMI5Jt +30qIh9muOJPu0ckubHS73fO19sDf5ZcAzr8VDJZEZ/5VfK4xmF4LlvvqgQG7xowZcx2O+86WAfIS +NWBcamrqDj/UGMourEbw1+TO9RKCYogeMqKiojLS0tJykbUb/JyZmfk9hqTyaIFSWD8qVcEzcmYd +FO/xWwd0kxPhXTnoJNmNEU5jB4nRA9QIaRHOseXJKH8ttHuDXA35zj969GhKS0vLBrw7xacZnKp6 +KdNbiWArZYg19DhTxgHbtgEcMScI7M7HuCzah5V8neLTDEqYLAJf9ulQL6FAo9V07NixmRhxYKCu +yKUPwrNb8PBXPo+GgE3qPurKPl0tihFUvvqSkpLZ8P2hgTCA3ZoKEbzC17kgR8W/fjyp8qRvd6NC +qRz8PezELIwo8MmTMhq7twi1vwKopp66urrl5Mpe3S4sHzVq1KvIE+rMVvEv5+bZIB0sMb2VCMCI +muPHj8/MyMjYSRJJYanmJHc3NaIQL77LWXbesGHDPvUnB8U/pBV4D1m1JHUszLUDRrleDjUkfoHu +dvDHi347LUbAFlVU5pmcUTeh/F14v1CYQbpSqvdOqwpLq7xPlJd32IEGCU0SeEN5efkcDvq77NxE +9GkHdO2DgwXLob5H9D84qB8oIq2u15kzSFNSHILXPUVFRY9qsgMdwfpktWu9LKRdOul/oQGdNkih +Q/+eJsvGDaH5kVJ+bJCrwv4OlHERz3KouUIXSkHab2TSorPOPtbz9nUNMZJ8+68Bl/K4/EP3ZQP+ +7wb8I8AAMT8awBvD4nwAAAAASUVORK5CYII=" + +$AppBase64Icon = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAs +TAAALEwEAmpwYAAAAB3RJTUUH4AcUDA00KsveZgAABThJREFUSMeNVWtsVFUQ/ubcu3e37+6yZWlpi4oEEFgxYkOiYFu2/qAGBIIJ +BkKCCFUTNZGHhgQJmmAIfxAMIPADIcSQaDC04dVSjUlNoPijDWAREVpo2O37tXufZ/zRW7wtBTnJTc7cnJnJfDPffBSLlSp49DAAe +oL9pON9y6p7Ifdj1xaex/D5VDp7ttb2Rlm8uEIxTYs8/uP6quM8wJg7dXT0pEej0bXMLIiIAXA83nUsGMwe+j9fNwGxz+5DwIyzru +UR+0Pc1d2fBoAikVDSsuwQM+8lIjAP+9u2c0bTfEOJRHeACHLixAm6YZjCk4AASAEQ5rTUyzsFq7SrM/c/c6v4I/+585ccwzBP6bq +x7969eJGUcok3OABIKZe2tycKDcPcp+vmiXi8K+P8+QPWWERo6avFouXZbRn9mdMuATQNYB0Q2/N+XReSasYuAJ1ElMPMvod1Dyez +APQBCLm4X9Y0rSISCSVN03oIl0gGptCCxo3J6dc3zQdzPUARQB7qmbfzH5L2NSIKu8FtAANENMDMNgAfgLCnqSWmaR7r6OgJeHsgL +tb95sy+CZkBA7lDf6wB+B5AsNMnvqvY/bvgWC0A6gG8L4SoZOZKAFUA6rxTRUSSCINSylGTRQVV9dWa1b3hztEV7YUbzpdLobmObA +PcpA7e/ebuiXXHCZDLl1cqAHEolI2mpr/SUil9C4DtLmSdQoiS4uJJramUMdJspvyq+gYCzwK4GqB3/uvPKJ7dIrY/1cyuhnnX1vc +AAt2Zc6mvP+k3TetnZl4EwCLCJiGUaiGoKz8/PGgYFmjyxouVTEq1h3wAyJNhFDGbiZ1TwjF+ajvy5nUAiEaj7zHzd57mg4i2NjU1 +7Y7FSlVRkDh9gdh+G8B9AGDFv1cbvD1T+nNXArg9uhKaw6R+6agZDQVVdZcKN16oSE801YCdhmFypL4KdDW/EG5pOjzCL4rFypTa2 +npnQRbCeg4mGdnTVrMS2Ap2Lmcmrr/VtuzCDEnq5wBKAMoZZzXdYX/WNq335hUzc8on5JgfAEgQ2x/nd9T8SLFYqVJb+4sTjUa3Mv +PX3lIBbGhubj4MAEXrq6dLJbCCSawEaO7T7EFiawnFYqWKpvkQj3dl2rYzgZmXMPNud87r0tICS7MyA0a4/zIzFDTOOZJraOH5TOo +eADMeXboAgO8BLAGoRQCAaVoUDGYPFRZGWoWg0y5DAWBRKqVv6etP+jOiy9guLsPcvpO99w+9UdN6sHyWr//2GkBeHSbhcCVCmgvb +D5av9ZvxmQAnyNUDAkC9vf0Bw7D2A1jtYSiIqA7ADwBa3F/TmXkVSbtYmL07EuXH1oJ8FQDfyxlonjm19aD+SvMN+UUv5Kh17a7i3 +DHB4c756wBSrp0GQGWhQvqDn6nJ+E47Y3IFQIV9WbNPduS8uGIo4wYqXl6ojhKHSGRCyu/X1gK4MkJ/Zu4EYAFQiSiLmbNcHbGIqJ +NJmR1s3PE8iNYD/AAQC9oKN/x+uvTbTL/VycLbdV03xZUrjb2a5qsAcAbgk0KIEiJsHruuiWgzEZUAOC7V9PL2A2VHswf/nKrafS9 +F4udeK7v64aCuRUCxWKkAoHhHQNN86OjoCUgpqaAgL9nWFp/iOM7fXtiI6LmiokmtDx50pgPgcDg3JVKdUJ1BMn1B2EoWAGZ1nCEm +07Q4JydTB4BUyhBCULeUtJmZmYiImaGqSo+uG5Sbm5VyFY7gC5LpC7IH9RHJHCVzozQVAOfn5w3U1FzYM0b0VVf0n+QrRyCixwV/j +P3Ub/8F226B2BmGh7QAAAAASUVORK5CYII=" + + + + +# Option Menu Icons +$base64 = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcE +hZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAAJESURBVHhe7ZZRaiNRDAR9ON//St4 +JKIskikc3gwaBU1A/DQ9V/DHk9fl87rgFapPE0XAL1CaJo+EWqE0SR8MtUJskjoZboDZJHA0L7/f79YRxLtO7ZHE0LFDshHEu07tk +cTQsUOyEcS7Tu2RxNCxQ7IRxLtO7ZHE03AK1SeJouAVqk8TRcAvUJomj4RaoTRJHwwJ9sCaMc5neJYujYYFiJ4xzmd4li6NhgWInj +HOZ3iWLo2GBYieMc5neJYuj4RaoTRJHwy1QmySOhlugNkkcDbdAbZI4GhbogzVhnMv0LlkcDQsUO2Gcy/QuWRwNCxQ7YZzL9C5ZHA +0LFDthnMv0LlkcDbdAbZI4Gm6B2iRxNNwCtUniaLgFapPE0bBAH6wJ41ymd8niaFig2AnjXKZ3yeJoWKDYCeNcpnfJ4mhYoNgJ41y +md8niaLgFapPE0XAL1CaJo+EWqE0SR8MtUJskjoYF+mBNGOcyvUsWR8MCxU4Y5zK9SxZHwwLFThjnMr1LFkfDAsVOGOcyvUsWR8Mt +UJskjoZboDZJHA23QG2SOBpugdokcTTcArVJ4mi4BWqTxNFwC9QmiaPhFqhNEkfDLVCbJI6GW6A2SRwd6V/VJ6UmRxwdKepJqckRR +0eKOnm9OUJvTl5PbomjI0WdvN4coTcnrye3xNGRok5eb47Qm5PXk1vi6EhRJ683R+jNyevJLXF0pKiT15sj9Obk9eSWODpS1JNSky +OOjhT1pNTk2Idv4f/f/I1//C9/P8CPX/4DfF7/AHQpDe71ItxOAAAAAElFTkSuQmCC" + + +$baseBrowseFolder = " +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" \ No newline at end of file diff --git a/App/Extensions/SCCMFunctions.ps1 b/Extensions/SCCMFunctions.ps1 similarity index 97% rename from App/Extensions/SCCMFunctions.ps1 rename to Extensions/SCCMFunctions.ps1 index 0134ff3..2d4615b 100644 --- a/App/Extensions/SCCMFunctions.ps1 +++ b/Extensions/SCCMFunctions.ps1 @@ -1,1866 +1,1866 @@ -#http://www.adamtheautomator.com/reading-sccm-client-logs/ -#Get functions when possible - -Function Get-MDTOData{ - <# - .Synopsis - Function for getting MDTOdata - .DESCRIPTION - Function for getting MDTOdata - .EXAMPLE - Get-MDTOData -MDTMonitorServer MDTSERVER01 - .NOTES - Created: 2016-03-07 - Version: 1.0 - - Author - Mikael Nystrom - Twitter: @mikael_nystrom - Blog : http://deploymentbunny.com - - .LINK - http://www.deploymentbunny.com - #> - Param( - $MDTMonitorServer - ) - $URL = "http://" + $MDTMonitorServer + ":9801/MDTMonitorData/Computers" - $Data = Invoke-RestMethod $URL - foreach($property in ($Data.content.properties) ){ - $Hash = [ordered]@{ - Name = $($property.Name); - PercentComplete = $($property.PercentComplete.’#text’); - Warnings = $($property.Warnings.’#text’); - Errors = $($property.Errors.’#text’); - DeploymentStatus = $( - Switch($property.DeploymentStatus.’#text’){ - 1 { "Active/Running"} - 2 { "Failed"} - 3 { "Successfully completed"} - Default {"Unknown"} - } - ); - StepName = $($property.StepName); - TotalSteps = $($property.TotalStepS.'#text') - CurrentStep = $($property.CurrentStep.'#text') - DartIP = $($property.DartIP); - DartPort = $($property.DartPort); - DartTicket = $($property.DartTicket); - VMHost = $($property.VMHost.'#text'); - VMName = $($property.VMName.'#text'); - LastTime = $($property.LastTime.'#text') -replace "T"," "; - StartTime = $($property.StartTime.’#text’) -replace "T"," "; - EndTime = $($property.EndTime.’#text’) -replace "T"," "; - } - New-Object PSObject -Property $Hash - } -} - - - -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Author: Benjamin Holbrook -# Creation Date: December 2012 -# -# Disclaimer: -# All functions have been tested in a production environment but I will not provide a guarentee that they -# will work in all environments and that all functions will work exactly as intended. -# Suggestions and improvements are very welcome and will be acted upon. -# -# Contact: -# Email: holbrook.benjamin@gmail.com -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -function Get-CMObject { - <# - .SYNOPSIS - Retrieves a WMI object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Class - The WMI class type name to be retrieved. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMObject -SiteProvider "cm-prov01" -SiteCode "WES" -Class "SMS_Collection" - .EXAMPLE - Get-CMObject "cm-prov01" "WES" -Class "SMS_TaskSequence" -Filter "Name = 'Windows 7 x64 Build'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True)] [string] $Class, - [Parameter(Position=4, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - if ($Filter -eq $null -or $Filter -eq "") { - Get-WmiObject -ComputerName $SiteProvider -Namespace “root\sms\site_$SiteCode” -Class $Class -ErrorVariable +err -ErrorAction Stop - } else { - Get-WmiObject -ComputerName $SiteProvider -Namespace “root\sms\site_$SiteCode" -Query "SELECT * FROM $Class WHERE $Filter" -ErrorVariable +err -ErrorAction Stop - } - } -} - -function Get-CMCollection { - <# - .SYNOPSIS - Retrieves a WMI SMS_Collection object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_Collection object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMCollection -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMCollection "cm-prov01" "WES" -Filter "Name = 'Toshiba Laptops'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_Collection" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMCollectionMember { - <# - .SYNOPSIS - Retrieves a WMI SMS_CollectionMember object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_CollectionMember object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMCollectionMember -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMCollectionMember "cm-prov01" "WES" -Filter "Name = 'PC01'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_CollectionMember" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMFullCollectionMembership { - <# - .SYNOPSIS - Retrieves a WMI SMS_FullCollectionMembership object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_FullCollectionMembership object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMFullCollectionMembership -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMFullCollectionMembership "cm-prov01" "WES" -Filter "Name = 'PC01'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_FullCollectionMembership" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMPackage { - <# - .SYNOPSIS - Retrieves a WMI SMS_Package object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_Package object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMPackage -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMPackage "cm-prov01" "WES" -Filter "Name = 'Microsoft Office'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_Package" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMAdvertisement { - <# - .SYNOPSIS - Retrieves a WMI SMS_Advertisement object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_Advertisement object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMAdvertisement -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMAdvertisement "cm-prov01" "WES" -Filter "Name = 'Automatic Advertisement'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_Advertisement" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMDriver { - <# - .SYNOPSIS - Retrieves a WMI SMS_Driver object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_Driver object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMDriver -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMDriver "cm-prov01" "WES" -Filter "Name = 'Intel HD Graphics'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_Driver" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMDriverPackage { - <# - .SYNOPSIS - Retrieves a WMI SMS_DriverPackage object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_DriverPackage object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMDriverPackage -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMDriverPackage "cm-prov01" "WES" -Filter "Name = 'Intel HD Graphics'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_DriverPackage" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMSupportedPlatforms { - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_SupportedPlatforms" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMTaskSequence { - <# - .SYNOPSIS - Retrieves a WMI SMS_TaskSequence object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_TaskSequence object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMTaskSequence -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMTaskSequence "cm-prov01" "WES" -Filter "Name = 'Toshiba Laptop Builds'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_TaskSequence" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMTaskSequencePackage { - <# - .SYNOPSIS - Retrieves a WMI SMS_TaskSequencePackage object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_TaskSequencePackage object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMTaskSequencePackage -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMTaskSequencePackage "cm-prov01" "WES" -Filter "Name = 'Toshiba Laptop Builds'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_TaskSequencePackage" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMMachineSettings { - <# - .SYNOPSIS - Retrieves a WMI SMS_MachineSettings object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_MachineSettings object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMMachineSettings -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMMachineSettings "cm-prov01" "WES" -Filter "PropertyCount = '0'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_MachineSettings" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMCollectionSettings { - <# - .SYNOPSIS - Retrieves a WMI SMS_CollectionSettings object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_CollectionSettings object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMCollectionSettings -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMCollectionSettings "cm-prov01" "WES" -Filter "PropertyCount = '0'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_CollectionSettings" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -function Get-CMSite { - <# - .SYNOPSIS - Retrieves a WMI SMS_Site object in ConfigMgr. - .OUTPUTS - Retrieves a ConfigMgr WMI SMS_Site object which can be filtered using a WMI query. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER Filter - A query for filtering the returned WMI object. - .EXAMPLE - Get-CMSite -SiteProvider "cm-prov01" -SiteCode "WES" - .EXAMPLE - Get-CMSite "cm-prov01" "WES" -Filter "SiteCode = 'WES'" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$False)] [string] $Filter - ) - - PROCESS { - Get-CMObject $SiteProvider $SiteCode "SMS_Site" $Filter -ErrorVariable +err -ErrorAction Stop - } -} - -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -function New-CMComputer { - <# - .SYNOPSIS - Converts a file into an array of computer objects. - .DESCRIPTION - Each object contains a ComputerName, SerialNumber, MACAddress and Username associated with it. - This cmdlet's output should be used in conjunction with other cmdlets such as Import-CMComputerAssociation to supply the required input. - CSV files are preferred, otherwise cannot guarentee completion. - .OUTPUTS - Returns an array of ComputerObjects with the ComputerName, SerialNumber, MACAddress and Username as attributes. - .PARAMETER FileName - The path to the file to be processed. - .EXAMPLE - New-CMComputer -FileName "C:\Computer_File.csv" - .EXAMPLE - New-CMComputer -FileName "C:\Computer_File.csv","C:\Computers.txt" - .EXAMPLE - New-CMComputer "PC-01" "0123456789ab" "SN1234" "BJones" - .EXAMPLE - New-CMComputer "PC-01","PC02" "0123456789ab","0123456789cd" "SN1234","SN5678" "BJones","TGeorge" - #> - - [CmdletBinding(DefaultParameterSetName="Details")] - Param ( - [Parameter(ParameterSetName="File", Position=1, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $FileName, - [Parameter(ParameterSetName="Details", Position=1, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $ComputerName, - [Parameter(ParameterSetName="Details", Position=2, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $MACAddress, - [Parameter(ParameterSetName="Details", Position=3, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $SerialNumber, - [Parameter(ParameterSetName="Details", Position=4, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $Username - ) - - BEGIN { - $computers = @() - } - - PROCESS { - switch ($PSCmdlet.ParameterSetName) { - "File" { - foreach ($file in $FileName) { - try { - Write-Verbose "Importing csv file" - $fileContent = Import-CSV $file | Select ComputerName,SerialNumber,MACAddress,Username -ErrorVariable +err -ErrorAction Stop - - foreach ($row in $fileContent) { - if ($row.ComputerName -eq "" -or $row.SerialNumber -eq "" -or $row.MACAddress -eq "") { - Write-Verbose "Empty field in input file" - continue - } - - Write-Verbose "Creating computer object" - $computerProperties = @{'ComputerName' = $row.ComputerName; - 'SerialNumber' = $row.SerialNumber; - 'MACAddress' = $row.MACAddress; - 'Username' = $row.Username} - - $computers += New-Object -TypeName PSObject -Property $computerProperties - } - } - catch { - Write-Error $_.Exception - Write-Verbose "Failed to import $file" - } - } - - break - } - - "Details" { - if ($ComputerName.Length -ne $MACAddress.Length -ne $SerialNumber.Length -ne $Username.Length) { - Write-Debug "Parameters are of unequal lengths: $ComputerName.Length, $MACAddress.Length, $SerialNumber.Length, $Username.Length" - break - } - else { - Write-Verbose "Creating computer objects" - for ($i=0; $i -lt $ComputerName.Length; $i++) { - $computerProperties = @{'ComputerName' = $ComputerName[$i]; - 'SerialNumber' = $SerialNumber[$i]; - 'MACAddress' = $MACAddress[$i]; - 'Username' = $Username[$i]} - - $computers += New-Object -TypeName PSObject -Property $computerProperties - } - } - - break - } - } - } - - END { - Write-Output $computers - } -} - -function Import-CMComputerAssociation { - <# - .SYNOPSIS - Imports a computer association into ConfigMgr. - .DESCRIPTION - Uses WMI to create a new SMS_Site WMI class to invoke a ImportMachineEntry method using the provided - ComputerName and MACAddress as properties to import a new computer associations into ConfigMgr. - .OUTPUTS - Returns a WMI computer association object iff the -Output switch is specified. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER ComputerName - The ComputerName used for the computer association. - .PARAMETER MACAddress - The MACAddress used for the computer association. - .PARAMETER Overwrite - An optional switch used to overwrite any existing computer association with an identical computer name. - .PARAMETER Output - An optional switch used to return the computer association WMI object. - .EXAMPLE - Import-CMComputerAssociation "cm-prov01" "WES" "PC01" "01:23:45:67:89:ab" - .EXAMPLE - Import-CMComputerAssociation "cm-prov01" "WES" "PC01","PC02","PC03" "01:23:45:67:89:ab","01:23:45:67:89:cd","01:23:45:67:89:ef" - .EXAMPLE - Import-CMComputerAssociation "cm-prov01" "WES" "PC01" "01:23:45:67:89:ab" -Overwrite - .EXAMPLE - Import-CMComputerAssociation "cm-prov01" "WES" "PC01" "01:23:45:67:89:ab" -Output - .EXAMPLE - New-CMComputer -Filename "C:\Machine_List.csv" | Import-CMComputerAssociation "cm-prov01" "WES" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $ComputerName, - [Parameter(Position=4, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [Alias("MAC")] [string[]] $MACAddress, - [switch] $Overwrite, - [switch] $Output - ) - - BEGIN { - $siteClass = [WmiClass]”\\$SiteProvider\root\sms\site_$($SiteCode):SMS_Site” - $methodAddEntry = ”ImportMachineEntry” - $computerAssociations = @() - } - - PROCESS { - Write-Verbose "Importing computer associations" - if ($ComputerName.Length -eq $MACAddress.Length) { - for ($i=0; $i -lt $ComputerName.Length; $i++) { - try { - $inParamsAddEntry = $siteClass.psbase.GetMethodParameters($methodAddEntry) - $inParamsAddEntry.MACAddress = $MACAddress[$i] - $inParamsAddEntry.OverwriteExistingRecord = [bool] $Overwrite - $inParamsAddEntry.NetbiosName = $ComputerName[$i] - - $computerAssociationS += $siteClass.psbase.InvokeMethod($methodAddEntry, $inParamsAddEntry, $null) - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to import computer association" - } - } - } - else { - Write-Verbose "Input parameter lengths aren't of equal length." - } - } - - END { - if ($Output) { - Write-Output $computerAssociations - } - } -} - -function New-CMDeviceCollection { - <# - .SYNOPSIS - Creates a new ConfigMgr device collection. - .DESCRIPTION - Uses WMI to create a new instance of SMS_Collection as a device collection. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER CollectionName - The name of the collection to create. - .PARAMETER LimittingCollectionID - An optional parameter used to limit the colleciton. If no collection ID is specified will default to All Systems. - .PARAMETER Output - An optional switch used to return the ComputerCollection WMI object. - .EXAMPLE - New-CMDeviceCollection "cm-prov01" "WES" -CollectionName "New Build Collection" -LimittingCollectionID "SMS00001" - .EXAMPLE - New-CMDeviceCollection "cm-prov01" "WES" "Collection A","Collection B","Collection C" - .EXAMPLE - "Collection A","Collection B","Collection C" | New-CMDeviceCollection "cm-prov01" "WES" - .EXAMPLE - "Collection A","Collection B","Collection C" | New-CMDeviceCollection "cm-prov01" "WES" -LimittingCollectionID = "SMS00001" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName, - [Parameter(Position=4, Mandatory=$False)] [string] $LimittingCollectionID = "SMS00001" - ) - - BEGIN { - $collectionClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_Collection" - $intervalClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_ST_RecurInterval" - } - - PROCESS { - Write-Verbose "Creating device collections" - foreach ($name in $CollectionName) { - Write-Debug $name - try { - $newCollection = $collectionClass.PSBase.CreateInstance() - $interval = $intervalClass.CreateInstance() - $newCollection.Name = $name - $newCollection.OwnedByThisSite = $True - $newCollection.LimitToCollectionID = $LimittingCollectionID - $newCollection.CollectionType = 2 - - $interval = $intervalClass.CreateInstance() - $interval.MinuteSpan = 0 - $interval.HourSpan = 0 - $interval.DaySpan = 0 - $newCollection.RefreshSchedule = $interval - - Write-Output $newCollection.Put() - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to create new device collection" - } - } - } -} - -function New-CMUserCollection { - <# - .SYNOPSIS - Creates a new ConfigMgr user collection. - .DESCRIPTION - Uses WMI to create a new instance of SMS_Collection as a user collection. - .OUTPUTS - Returns a WMI collection object iff the -Output switch is specified. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER CollectionName - The name of the collection to create. - .PARAMETER LimittingCollectionID - An optional parameter used to limit the colleciton. If no collection ID is specified will default to All Systems. - .EXAMPLE - New-CMUserCollection "cm-prov01" "WES" -CollectionName "Admin Users" -LimittingCollectionID "SMS00002" - .EXAMPLE - New-CMUserCollection "cm-prov01" "WES" "Admin Users A","Admin Users B","Admin Users C" - .EXAMPLE - "Admin Users A","Admin Users B","Admin Users C" | New-CMUserCollection "cm-prov01" "WES" - .EXAMPLE - "Admin Users A","Admin Users B","Admin Users C" | New-CMUserCollection "cm-prov01" "WES" -LimittingCollectionID "SMS00002" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName, - [Parameter(Position=4, Mandatory=$False)] [string] $LimittingCollectionID = "SMS00002" - ) - - BEGIN { - $collectionClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_Collection" - $intervalClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_ST_RecurInterval" - } - - PROCESS { - Write-Verbose "Creating device collections" - foreach ($name in $CollectionName) { - Write-Debug $name - try { - $newCollection = $collectionClass.PSBase.CreateInstance() - $newCollection.Name = $name - $newCollection.OwnedByThisSite = $True - $newCollection.LimitToCollectionID = $LimittingCollectionID - $newCollection.CollectionType = 1 - - $interval = $intervalClass.CreateInstance() - $interval.MinuteSpan = 0 - $interval.HourSpan = 0 - $interval.DaySpan = 0 - $newCollection.RefreshSchedule = $interval - - Write-Output $newCollection.Put() - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to create new user collection" - } - } - } -} - -function Remove-CMCollection { - <# - .SYNOPSIS - Removes a collection in ConfigMgr. - .DESCRIPTION - Uses WMI to get the collection object to be removed and then removes it from ConfigMgr. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER CollectionName - The name of the collection to remove. - .EXAMPLE - Remove-CMCollection "cm-prov01" "WES" "Build Collection" - .EXAMPLE - Remove-CMCollection "cm-prov01" "WES" "Collection A", "Collection B", "Collection C" - .EXAMPLE - "Collection A", "Collection B", "Collection C" | Remove-CMCollection "cm-prov01" "WES" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName - ) - - PROCESS { - Write-Verbose "Removing collections" - foreach ($name in $CollectionName) { - Write-Debug $name - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($name)'" -ErrorVariable +err -ErrorAction Stop - $targetCollection.Delete() - } - catch { - Write-Error $_.Exception - Write-Verbose "Cannot delete collection - collection does not exist" - } - } - } -} - -function Add-CMDirectMembership { - <# - .SYNOPSIS - Adds a direct membership to a device collection in ConfigMgr. - .DESCRIPTION - Uses WMI to create a new SMS_CollectionRuleDirect WMI class to invoke an AddMembershipRule method using the provided - CollectionName as the collection and ComputerName as the member to add. - .OUTPUTS - Returns a WMI CollectionRuleDirect object iff the -Output switch is specified. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER CollectionName - The name of the collection to add the member to. - .PARAMETER ComputerName - The name of the computer member to add. - .PARAMETER Output - An optional switch used to return the CollectionRuleDirect WMI object. - .EXAMPLE - Add-CMDirectMembership "cm-prov01" "WES" "Build Collection" "PC-01" - .EXAMPLE - Add-CMDirectMembership "cm-prov01" "WES" "Build Collection" "PC-01","PC=02","PC-03" - .EXAMPLE - "PC-01", "PC-02", "PC-03" | Add-CMDirectMembership "cm-prov01" "WES" "Build Collection" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True)] [string] $CollectionName, - [Parameter(Position=4, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $ComputerName - ) - - BEGIN { - $collectionRuleDirectClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionRuleDirect” - $methodAddToCollection = ”AddMembershipRule” - } - - PROCESS { - Write-Verbose "Adding direct membership rules" - foreach ($name in $ComputerName) { - Write-Debug "ComputerName: $name" - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($CollectionName)'" -ErrorVariable +err -ErrorAction Stop - $computerMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($name)'" -ErrorVariable +err -ErrorAction Stop - - if ($targetCollection -eq $null) { - Write-Error "Unable to add direct membership - collection not found" - Write-Verbose "Unable to add direct membership - collection not found" - break - } - if ($computerMember -eq $null) { - Write-Error "Unable to add direct membership - machine not found" - Write-Verbose "Unable to add direct membership - collection not found" - break - } - - if ($computerMember.Length -gt 1) { - $computerResourceID = $computerMember[0].ResourceID - } else { - $computerResourceID = $computerMember.ResourceID - } - Write-Debug "ResourceID: $computerResourceID" - - $collectionRuleDirectClass.psbase.Properties["ResourceClassName"].Value = “SMS_R_System” - $collectionRuleDirectClass.psbase.Properties["ResourceID"].Value = $computerResourceID - - $inParamsAddToCollection = $targetCollection.psbase.GetMethodParameters($methodAddToCollection) - $inParamsAddToCollection.CollectionRule = $collectionRuleDirectClass - - Write-Output $targetCollection.psbase.InvokeMethod($methodAddToCollection, $inParamsAddToCollection, $null) - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to add direct membership" - } - } - } -} - -function Remove-CMDirectMembership { - <# - .SYNOPSIS - Removes a direct membership from a device collection in ConfigMgr. - .DESCRIPTION - Uses WMI to create a new SMS_CollectionRuleDirect WMI class to invoke a DeleteMembershipRule method using the provided - CollectionName as the collection and ComputerName as the member to remove. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER CollectionName - The name of the collection to remove the member from. - .PARAMETER ComputerName - The name of the computer member to remove. - .EXAMPLE - Remove-CMDirectMembershipRule "cm-prov01" "WES" "Build Collection" "PC-01" - .EXAMPLE - Remove-CMDirectMembershipRule "cm-prov01" "WES" "Build Collection" "PC-01","PC-02","PC-03" - .EXAMPLE - "PC-01", "PC-02", "PC-03" | Remove-CMDirectMembershipRule "cm-prov01" "WES" "Build Collection" - #> - - [CmdletBinding(DefaultParameterSetName="Computer")] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Collection")] [string[]] $CollectionName, - [Parameter(ParameterSetName="Computer", Position=4, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Computer")] [string[]] $ComputerName, - [Parameter(ParameterSetName="Collection")] [switch] $All - ) - - BEGIN { - $ruleClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_CollectionRuleDirect" - } - - PROCESS { - switch ($PSCmdlet.ParameterSetName) { - "Computer" { - Write-Verbose "Removing direct membership rules" - foreach ($collection in $CollectionName) { - foreach ($name in $ComputerName) { - Write-Debug "Removing $name from $collection" - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Stop - $computerMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($name)'" -ErrorVariable +err -ErrorAction Stop - - if ($targetCollection -eq $null) { - Write-Error "Unable to add direct membership - collection not found" - Write-Verbose "Unable to add direct membership - collection not found" - break - } - if ($computerMember -eq $null) { - Write-Error "Unable to add direct membership - machine not found" - Write-Verbose "Unable to add direct membership - collection not found" - break - } - - Write-Verbose "Getting computer resource ID" - if ($computerMember.Length -gt 1) { - $computerResourceID = $computerMember[0].ResourceID - } else { - $computerResourceID = $computerMember.ResourceID - } - Write-Debug "ResourceID: $computerResourceID" - - if ($targetCollection.CollectionRules -eq $null) { - $targetCollection.Get() - } - - foreach ($rule in $targetCollection.CollectionRules) { - if ($computerResourceID -eq $rule.ResourceID) { - $newRule = $ruleClass.CreateInstance() - $newRule.ResourceClassName = "SMS_FullCollectionMembership" - $newRule.ResourceID = $computerResourceID - $newRule.RuleName = $name - - $targetCollection.psbase.InvokeMethod("DeleteMembershipRule", $newRule) - break - } - } - } - catch { - Write-Error $_.Exception - Write-Verbose "Failed to remove direct membership rule" - } - } - } - - break - } - - "Collection" { - Write-Verbose "Removing direct membership rules" - foreach ($collection in $CollectionName) { - Write-Debug $collection - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Stop - - $targetCollection.psbase.InvokeMethod("DeleteAllMembers", $null) - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to remove direct membership rules - method failure" - } - } - - break - } - } - } -} - -function New-CMTaskSequenceAdvertisement { - <# - .SYNOPSIS - Advertises a task sequence to a collection in ConfigMgr. - .DESCRIPTION - Uses WMI to create a new instance of a SMS_Advertisement WMI class with the given attributes as properties. - An output switch can be used to output the result of the function. - .OUTPUTS - Returns a WMI SMS object iff the -Output switch is specified. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER TaskSequenceName - The name of the task sequence to advertise. - .PARAMETER CollectionName - The name of the collection to advertise the task sequence to. - .PARAMETER AdvertisementName - The name of the new advertisement. - .PARAMETER Comment - An optional parameter used to specify the comment used in the creation of the advertisement. - If not specified an empty string will be used. - .PARAMETER ExpirationTime - An optional parameter of the advertisement's expiry time. - If not specified the current time will be used. - Must have the following format: - "yyyymmddhhmmff" - .PARAMETER Output - An optional switch used to return the Advertisement WMI object. - .EXAMPLE - New-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Windows 7 x64" "Build Collection" - .EXAMPLE - New-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Windows 7 x64" "Build Collection" -AdvertisementName "New Advertisement" -Comment "This is a comment" -ExpirationTime "20120113000000" - .EXAMPLE - New-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Windows 7 x64" "Build Collection" -Output - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True)] [string] $TaskSequenceName, - [Parameter(Position=4, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName, - [Parameter(Position=5, Mandatory=$False)] [string] $AdvertisementName = "Default Advertisement Name", - [Parameter(Position=6, Mandatory=$False)] [string] $Comment = "", - [Parameter(Position=7, Mandatory=$False)] $ExpirationTime = (Get-Date).ToString("yyyyMMddhhmmff") - ) - - BEGIN { - $advertisementClass = [WmiClass]”\\$SiteProvider\root\sms\site_$($SiteCode):SMS_Advertisement” - $presentTime = (Get-Date).ToString("yyyyMMddhhmmff") + ".000000+***" - $ExpirationTime += ".000000+***" - } - - PROCESS { - Write-Verbose "Creating new task sequence advertisement" - foreach ($collection in $CollectionName) { - try { - $taskSequence = Get-CMTaskSequencePackage $SiteProvider $SiteCode -Filter "Name = '$($TaskSequenceName)'" -ErrorVariable +err -ErrorAction Stop - $taskSequenceID = $taskSequence.PackageID - Write-Debug "Task sequence ID: $taskSequenceID" - - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Stop - $targetCollectionID = $targetCollection.CollectionID - Write-Debug "Collection ID: $targetCollectionID" - - $newAdvertisement = $advertisementClass.PSBase.CreateInstance() - $newAdvertisement.AdvertisementName = $AdvertisementName - $newAdvertisement.Comment = $Comment - $newAdvertisement.CollectionID = $targetCollectionID - $newAdvertisement.PackageID = $taskSequenceID - $newAdvertisement.ProgramName = "*" - $newAdvertisement.PresentTime = $presentTime - $newAdvertisement.ExpirationTime = $ExpirationTime - $newAdvertisement.AdvertFlags = 42860576 - $newAdvertisement.RemoteClientFlags = 8480 - Write-Output $newAdvertisement.Put() - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to create new task sequence advertisement" - } - } - } -} - -function Remove-CMTaskSequenceAdvertisement { - <# - .SYNOPSIS - Removes a task sequence advertisement in ConfigMgr. - .DESCRIPTION - Uses WMI to get the collection and advertisement objects. Then uses the CollectionID to remove the correct advertisement. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER CollectionName - The name of the collection to remove the advertisement from. - .PARAMETER AdvertisementName - The name of the advertisement to remove from the collection. - .EXAMPLE - Remove-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Build Collection" "Advertisement Name" - .EXAMPLE - Remove-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Build Collection" "Advertisement A","Advertisement B","Advertisement C" - .EXAMPLE - "Advertisement A","Advertisement B","Advertisement C" | Remove-CMTaskSequenceAdvertisement "cm-prov01" "WES" -CollectionName "Build Collection" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True)] [string] $CollectionName, - [Parameter(Position=4, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $AdvertisementName - ) - - PROCESS { - Write-Verbose "Removing advertisements" - foreach ($advertisement in $AdvertisementName) { - Write-Debug $advertisement - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($CollectionName)'" - $targetCollectionID = $targetCollection.CollectionID - Write-Debug $targetCollectionID - - $targetAdvertisement = Get-CMAdvertisement $SiteProvider $SiteCode -Filter "AdvertisementName = '$($advertisement)' AND CollectionID = '$($targetCollectionID)'" - $targetAdvertisement.Delete() - } - catch { - Write-Error $_.Exception - Write-Verbose "Collection not deleted" - } - } - } -} - -function Get-CMCollectionMembers { - <# - .SYNOPSIS - Gets a list of the direct member names of a collection in ConfigMgr. - .DESCRIPTION - Uses WMI to get the collection object to be listed. Then gets the FullCollectionMembership object list from - the collection and returns each of the member names as an array. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER CollectionName - The name of the collection to get the members from. - .EXAMPLE - Get-CMCollectionMemberList "cm-prov01" "WES" "Build Collection" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True)] [string] $CollectionName - ) - - BEGIN { - $memberNames = @() - } - - PROCESS { - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($CollectionName)'" -ErrorVariable +err -ErrorAction Stop - $collectionID = $targetCollection.CollectionID - $collectionMembers = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "CollectionID = '$($collectionID)'" -ErrorVariable +err -ErrorAction Stop - - foreach ($machine in $collectionMembers) { - $memberNames += $machine.Name - } - } - catch { - Write-Error $_.Exception - Write-Verbose "Failed to get collection member names" - } - } - - END { - Write-Output $memberNames - } -} - -function Clear-CMPXEAdvertisement { - <# - .SYNOPSIS - Clears a machines' PXE advertisement flag in ConfigMgr. - .DESCRIPTION - Uses WMI to get the machine to be cleared and then clears the PXE advertisement flag associated. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER MachineName - The name of the machine to be cleared. - .EXAMPLE - Clear-CMPXEAdvertisement "cm-prov01" "WES" "PC-01" - .EXAMPLE - Clear-CMPXEAdvertisement "cm-prov01" "WES" "PC-01","PC-02","PC-03" - .EXAMPLE - "PC-01","PC-02","PC-03" | Clear-CMPXEAdvertisement "cm-prov01" "WES" - .EXAMPLE - Clear-CMPXEAdvertisement "cm-prov01" "WES" -CollectionName "Collection A","Collection B","Collection C" - #> - - [CmdletBinding(DefaultParameterSetName="Machine")] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(ParameterSetName="Machine", Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $MachineName, - [Parameter(ParameterSetName="Collection", Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName - ) - - BEGIN { - $resourceIDs = @() - } - - PROCESS { - switch ($PSCmdlet.ParameterSetName) { - "Machine" { - Write-Verbose "Clearing machine PXE advertisement" - foreach ($name in $MachineName) { - Write-Debug $name - try { - $computerMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($name)'" -ErrorVariable +err -ErrorAction Stop - - if ($computerMember.Length -gt 1) { - $computerResourceID = $computerMember[0].ResourceID - } else { - $computerResourceID = $computerMember.ResourceID - } - Write-Debug "ResourceID: $computerResourceID" - - $resourceIDs += $computerResourceID - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to clear PXE advertisemment - machine doesn't exist" - } - } - - try { - Invoke-WmiMethod -Namespace "root\sms\site_$SiteCode" -Class SMS_Collection -Name ClearLastNBSAdvForMachines -ArgumentList $resourceIDs -ComputerName $SiteProvider -ErrorVariable +err -ErrorAction Stop - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to clear PXE advertisemment - method failure" - } - - break - } - - "Collection" { - foreach ($collection in $CollectionName) { - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Continue - - $targetCollection.psbase.InvokeMethod("ClearLastNBSAdvForCollection", $null, $null) - } - catch { - Write-Error $_.Exception - Write-Verbose "Failed to clear PXE advertisemment" - } - } - - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($CollectionName)'" -ErrorVariable +err -ErrorAction Stop - - $targetCollection.psbase.InvokeMethod("ClearLastNBSAdvForCollection", $null, $null) - } - catch { - Write-Error $_.Exception - Write-Verbose "Failed to clear PXE advertisemment" - } - - break - } - } - } -} - -function Update-CMCollectionMembership { - <# - .SYNOPSIS - Updates the collection membership of a collection in ConfigMgr. - .DESCRIPTION - Uses WMI to get a collection object and then invokes an RequestRefresh method on the collection. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER CollectionName - The name of the collection to update the membership of. - .PARAMETER IncludeSubCollections - An optional switch to update memberships of all sub-collections. - .EXAMPLE - Update-CMCollectionMembership "cm-prov01" "WES" "Build Collection" -IncludeSubCollections - .EXAMPLE - Update-CMCollectionMembership "cm-prov01" "WES" "Collection A","Collection B","Collection C" - .EXAMPLE - "Collection A","Collection B","Collection C" | Update-CMCollectionMembership "cm-prov01" "WES" - .EXAMPLE - "Collection A","Collection B","Collection C" | Update-CMCollectionMembership "cm-prov01" "WES" -IncludeSubCollection - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName, - [switch] [Alias("Recurse")] $IncludeSubCollections - ) - - PROCESS { - Write-Verbose "Updating collection memberships" - foreach ($collection in $CollectionName) { - Write-Debug $collection - try { - $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Stop - - $targetCollection.psbase.InvokeMethod("RequestRefresh", [bool] $IncludeSubCollections) - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to update collection membership - method failure" - } - } - } -} - -function Add-CMVariable { - <# - .SYNOPSIS - Adds a machine or collection variable in ConfigMgr. - .DESCRIPTION - Uses WMI to get a machine or collection settings object and then adds a machine variable or collection variable WMI object. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER ComputerName - The name of the machine to add the machine variable to. - .PARAMETER CollectionName - The name of the collection to add the collection variable to. - .PARAMETER VariableName - The name of the variable to add. - .PARAMETER Value - The value assigned to the variable. - .PARAMETER IsMasked - An optional switch to define whether the variable is masked or not. - .EXAMPLE - Add-CMVariable "cm-prov01" "WES" "PC-01" -VariableName "Architecture" -Value "x64" - .EXAMPLE - Add-CMVariable "cm-prov01" "WES" "PC-01" -VariableName "Architecture" -Value "x64" -IsMasked - .EXAMPLE - Add-CMVariable "cm-prov01" "WES" "PC-01","PC-02","PC-03" -VariableName "Architecture" -Value "x64" - .EXAMPLE - "PC-01","PC-02","PC-03" | Add-CMVariable "cm-prov01" "WES" -VariableName "Architecture" -Value "x64" - .EXAMPLE - Add-CMVariable "cm-prov01" "WES" -CollectionName "Build Collection" -VariableName "Architecture" -Value "x64" - .EXAMPLE - Add-CMVariable "cm-prov01" "WES" -CollectionName "Collection A,""Collection B","Collection C" -VariableName "Architecture" -Value "x64" - #> - - [CmdletBinding(DefaultParameterSetName="Computer")] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(ParameterSetName="Computer", Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Computer")] [string[]] $ComputerName, - [Parameter(ParameterSetName="Collection", Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Collection")] [string[]] $CollectionName, - [Parameter(Position=4, Mandatory=$True)] [string] $VariableName, - [Parameter(Position=5, Mandatory=$True)] [string] $Value, - [switch] $IsMasked - ) - - BEGIN { - $machineSettingsClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_MachineSettings” - $machineVariableClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_MachineVariable” - $collectionSettingsClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionSettings” - $collectionVariableClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionVariable” - } - - PROCESS { - switch ($PSCmdlet.ParameterSetName) { - "Computer" { - Write-Verbose "Adding computer variables" - foreach ($computer in $ComputerName) { - Write-Debug "Computer: $computer, Variable: $VariableName - $Value" - try { - $machineMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($computer)'" - if ($machineMember -eq $null) { - Write-Error "Unable to add computer variable - machine not found" - Write-Verbose "Unable to add computer variable - machine not found" - break - } - - if ($machineMember.Length -gt 1) { - $machineResourceID = $machineMember[0].ResourceID - } else { - $machineResourceID = $machineMember.ResourceID - } - Write-Debug "ResourceID: $machineResourceID" - - $machineSettings = Get-CMMachineSettings $SiteProvider $SiteCode -Filter "ResourceID = '$($machineResourceID)'" - - if ($machineSettings -eq $null) { - Write-Verbose "Creating new machine settings" - $machineSettings = $machineSettingsClass.CreateInstance() - $machineSettings.ResourceID = $machineResourceID - $machineSettings.SourceSite = $SiteCode - } - else { - Write-Verbose "Fetching machine settings" - $machineSettings.Get() - } - - Write-Verbose "Updating computer variables" - $newMachineVariable = $machineVariableClass.CreateInstance() - $newMachineVariable.Name = $VariableName - $newMachineVariable.Value = $Value - $newMachineVariable.IsMasked = [bool] $IsMasked - - $machineSettings.MachineVariables += $newMachineVariable - - $machineSettings.Put() - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to add machine variable" - } - } - } - - "Collection" { - Write-Verbose "Adding computer variables" - foreach ($collection in $CollectionName) { - Write-Debug "Collection: $collection, Variable: $VariableName - $Value" - try { - $collectionMember = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" - $collectionID = $collectionMember[0].CollectionID - Write-Debug $collectionID - - $collectionSettings = Get-CMCollectionSettings $SiteProvider $SiteCode -Filter "CollectionID = '$($collectionID)'" - - if ($collectionSettings -eq $null) { - Write-Verbose "Creating new machine settings" - $collectionSettings = $collectionSettingsClass.CreateInstance() - $collectionSettings.SourceSite = $SiteCode - } - else { - Write-Verbose "Fetching machine settings" - $collectionSettings.Get() - } - - Write-Verbose "Updating collection variables" - $newCollectionVariable = $collectionVariableClass.CreateInstance() - $newCollectionVariable.Name = $VariableName - $newCollectionVariable.Value = $Value - $newCollectionVariable.IsMasked = [bool] $IsMasked - - $collectionSettings.CollectionVariables += $newCollectionVariable - - $collectionSettings.Put() - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to add collection variable" - } - } - } - } - } -} - -function Remove-CMVariable { - <# - .SYNOPSIS - Removes a machine or collection variable in ConfigMgr. - .DESCRIPTION - Uses WMI to get a machine or collection settings object and then removes a machine variable or collection variable WMI object. - Rebuilds the machine variable or collection variable list without the select variable. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER ComputerName - The name of the machine to remove the machine variable from. - .PARAMETER CollectionName - The name of the collection to remove the collection variable from. - .PARAMETER VariableName - The name of the variable to remove. - .EXAMPLE - Remove-CMVariable "cm-prov01" "WES" "PC-01" -VariableName "Architecture" - .EXAMPLE - Remove-CMVariable "cm-prov01" "WES" "PC-01","PC-02","PC-03" -VariableName "Architecture" - .EXAMPLE - "PC-01","PC-02","PC-03" | Remove-CMVariable "cm-prov01" "WES" -VariableName "Architecture" - .EXAMPLE - Remove-CMVariable "cm-prov01" "WES" -CollectionName "Build Collection" -VariableName "Architecture" - .EXAMPLE - Remove-CMVariable "cm-prov01" "WES" -CollectionName "Collection A,""Collection B","Collection C" -VariableName "Architecture" - #> - - [CmdletBinding(DefaultParameterSetName="Computer")] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(ParameterSetName="Computer", Position=3, Mandatory=$True)] [Alias("Computer")] [string[]] $ComputerName, - [Parameter(ParameterSetName="Collection", Position=3, Mandatory=$True)] [Alias("Collection")] [string[]] $CollectionName, - [Parameter(Position=4, Mandatory=$True)] [Alias("Variable")] [string] $VariableName - ) - - BEGIN { - $machineSettingsClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_MachineSettings” - $machineVariableClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_MachineVariable” - $collectionSettingsClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionSettings” - $collectionVariableClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionVariable” - } - - PROCESS { - switch ($PSCmdlet.ParameterSetName) { - "Computer" { - Write-Verbose "Removing computer variable" - foreach ($computer in $ComputerName) { - Write-Debug "Computer: $computer, Variable: $VariableName" - try { - $machineMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($computer)'" - if ($machineMember -eq $null) { - Write-Error "Unable to remove computer variable - machine not found" - Write-Verbose "Unable to remove computer variable - machine not found" - break - } - - if ($machineMember.Length -gt 1) { - $machineResourceID = $machineMember[0].ResourceID - } else { - $machineResourceID = $machineMember.ResourceID - } - Write-Debug "ResourceID: $machineResourceID" - - $machineSettings = Get-CMMachineSettings $SiteProvider $SiteCode -Filter "ResourceID = '$($machineResourceID)'" - - if ($machineSettings -ne $null) { - $machineSettings.Get() - - $variableIndex = -1 - for ($i=0; $i -lt $machineSettings.MachineVariables.Length; $i++) { - if ($machineSettings.MachineVariables[$i].Name -eq $VariableName) { - $variableIndex = $i - break - } - } - - Write-Verbose "Rebuilding the machine variables without the requested one if variable found" - if ($variableIndex -ne -1) { - $newMachineVariables = @() - for ($i=0; $i -lt $machineSettings.MachineVariables.Length; $i++) { - if ($i -ne $variableIndex) { - $machineVariable = $machineVariableClass.CreateInstance() - $machineVariable.Name = $machineSettings.MachineVariables[$i].Name - $machineVariable.Value = $machineSettings.MachineVariables[$i].Value - $machineVariable.IsMasked = $machineSettings.MachineVariables[$i].IsMasked - - $newMachineVariables += $machineVariable - } - } - - $machineSettings.MachineVariables = $newMachineVariables - $machineSettings.Put() - } - else { - Write-Verbose "Machine variable not removed - variable not found" - } - } - else { - Write-Verbose "Machine variable not removed" - } - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to remove machine variable" - } - } - } - - "Collection" { - Write-Verbose "Removing computer variable" - foreach ($collection in $CollectionName) { - Write-Debug "Collection: $collection, Variable: $VariableName" - try { - $collectionMember = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" - $collectionID = $collectionMember[0].CollectionID - Write-Debug "CollectionID: $collectionID" - - $collectionSettings = Get-CMCollectionSettings $SiteProvider $SiteCode -Filter "CollectionID = '$($collectionID)'" - - if ($collectionSettings -ne $null) { - $collectionSettings.Get() - - $variableIndex = -1 - for ($i=0; $i -lt $collectionSettings.CollectionVariables.Length; $i++) { - if ($collectionSettings.CollectionVariables[$i].Name -eq $VariableName) { - $variableIndex = $i - break - } - } - - Write-Verbose "Rebuilding the collection variables without the requested one if variable found" - if ($variableIndex -ne -1) { - $newCollectionVariables = @() - for ($i=0; $i -lt $collectionSettings.CollectionVariables.Length; $i++) { - if ($i -ne $variableIndex) { - $collectionVariable = $collectionVariableClass.CreateInstance() - $collectionVariable.Name = $collectionSettings.CollectionVariables[$i].Name - $collectionVariable.Value = $collectionSettings.CollectionVariables[$i].Value - $collectionVariable.IsMasked = $collectionSettings.CollectionVariables[$i].IsMasked - - $newCollectionVariables += $collectionVariable - } - } - - $collectionSettings.CollectionVariables = $newCollectionVariables - $collectionSettings.Put() - } - else { - Write-Verbose "Collection variable not removed - variable not found" - } - } - else { - Write-Verbose "Collection variable not removed" - } - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to remove collection variable" - } - } - } - } - } -} - -function New-CMUserDeviceRelationship { - <# - .SYNOPSIS - Created a new user-device affinity in ConfigMgr. - .DESCRIPTION - Uses WMI to get a FullCollectionMembership object to get the device's resourceID. - Invokes a WMI CreateRelationship method on the device with the associated username. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER ComputerName - The name of the machine to create the affinity with. - - Notes: - This can be an array of names but it must be the same length as Username. - .PARAMETER Username - The username to create the affinity with. - - Notes: - This can be an array of names but it must be the same length as ComputerName. - .PARAMETER AffinityType - The type of user-device affinity to create. - Is optional but if not used will default to type 2. - - Notes: - Must be 1-4, inclusive. - .EXAMPLE - New-CMUserDeviceRelationship "cm-prov01" "WES" "PC-01" "FBloggs" -AffinityType 3 - .EXAMPLE - New-CMUserDeviceRelationship "cm-prov01" "WES" "PC-01" "FBloggs" - .EXAMPLE - New-CMUserDeviceRelationship "cm-prov01" "WES" "PC-01","PC-02" "FBloggs","GWhite" -AffinityType 2 - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $ComputerName, - [Parameter(Position=4, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [Alias("User")] [string[]] $Username, - [Parameter(Position=5, Mandatory=$False)] [ValidateRange(1,4)] [string] $AffinityType = 2 - ) - - PROCESS { - if ($ComputerName.Length -ne $Username.Length) { - Write-Error "The number of computer names and usernames do not match" - break - } - - for ($i=0; $i -lt $ComputerName.Length; $i++) { - $computer = $ComputerName[$i] - $user = $Username[$i] - - try { - $computerMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$computer'" -ErrorVariable +err -ErrorAction Stop - if ($computerMember -eq $null) { - Write-Error "Unable to add user device relationship - machine not found" - Write-Verbose "Unable to user device relationship - collection not found" - break - } - - if ($computerMember.Length -gt 1) { - $computerResourceID = $computerMember[0].ResourceID - } else { - $computerResourceID = $computerMember.ResourceID - } - Write-Debug "ResourceID: $computerResourceID" - - Invoke-WmiMethod -Namespace "root\sms\site_$siteCode" -Class "SMS_UserMachineRelationship" -Name "CreateRelationship" -ArgumentList @($computerResourceID, $affinityType, 1, $name) -ComputerName $siteProvider - } - catch { - Write-Error $_.Exception - Write-Verbose "Unable to user device relationship" - } - } - } -} - -function Disable-CMDriver { - <# - .SYNOPSIS - Disables a driver in ConfigMgr. - .DESCRIPTION - Uses WMI to get a Driver object to disable. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER DriverName - The name of the driver to disable. - - Notes: - Multiple drivers may have identical names. All drivers with the specified name will be disabled. - .PARAMETER LimittingDriverCategory - Optional. - Limits the scrope of the drivers that can be disabled. - .EXAMPLE - Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" - .EXAMPLE - Disable-CMDriver "cm-prov01" "WES" -DriverName "Realtek High Definition Audio","Intel(R) Management Engine Interface Device" - .EXAMPLE - Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" -LimittingDriverCategory "Dell Latitude Drivers" - .EXAMPLE - Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" -LimittingDriverCategory "Dell Latitude Drivers","Toshiba M10 Drivers" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Driver")] [string[]] $DriverName, - [Parameter(Position=4, Mandatory=$False)] [string[]] $LimittingDriverCategory - ) - - PROCESS { - foreach ($driver in $DriverName) { - $targetDrivers = Get-CMDriver $SiteProvider $SiteCode -Filter "LocalizedDisplayName = '$driver'" - foreach ($targetDriver in $targetDrivers) { - if ($LimittingDriverCategory -ne $Null) { - foreach ($driverCategory in $LimittingDriverCategory) { - if ($targetDriver.LocalizedCategoryInstanceNames.Contains($driverCategory)) { - Write-Verbose "Disabling: $($targetDriver.LocalizedDisplayName) in $driverCategory" - $targetDriver.IsEnabled = $false - } - } - } - else { - Write-Verbose "Disabling: $($targetDriver.LocalizedDisplayName)" - $targetDriver.IsEnabled = $false - } - } - } - } -} - -function Enable-CMDriver { - <# - .SYNOPSIS - Enables a driver in ConfigMgr. - .DESCRIPTION - Uses WMI to get a Driver object to enable. - .PARAMETER SiteProvider - The computer name of the ConfigMgr site. - .PARAMETER SiteCode - The site code of the ConfigMgr site. - .PARAMETER DriverName - The name of the driver to enable. - - Notes: - Multiple drivers may have identical names. All drivers with the specified name will be enabled. - .PARAMETER LimittingDriverCategory - Optional. - Limits the scrope of the drivers that can be disabled. - .EXAMPLE - Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" - .EXAMPLE - Disable-CMDriver "cm-prov01" "WES" -DriverName "Realtek High Definition Audio","Intel(R) Management Engine Interface Device" - .EXAMPLE - Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" -LimittingDriverCategory "Dell Latitude Drivers" - .EXAMPLE - Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" -LimittingDriverCategory "Dell Latitude Drivers","Toshiba M10 Drivers" - #> - - [CmdletBinding()] - Param ( - [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, - [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, - [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $DriverName, - [Parameter(Position=4, Mandatory=$False)] [string[]] $LimittingDriverCategory - ) - - PROCESS { - foreach ($driver in $DriverName) { - $targetDrivers = Get-CMDriver $SiteProvider $SiteCode -Filter "LocalizedDisplayName = '$driver'" - foreach ($targetDriver in $targetDrivers) { - if ($LimittingDriverCategory -ne $Null) { - foreach ($driverCategory in $LimittingDriverCategory) { - if ($targetDriver.LocalizedCategoryInstanceNames.Contains($driverCategory)) { - Write-Verbose "Enabling: $($targetDriver.LocalizedDisplayName) in $driverCategory" - $targetDriver.IsEnabled = $true - } - } - } - else { - Write-Verbose "Enabling: $($targetDriver.LocalizedDisplayName)" - $targetDriver.IsEnabled = $true - } - } - } - } +#http://www.adamtheautomator.com/reading-sccm-client-logs/ +#Get functions when possible + +Function Get-MDTOData{ + <# + .Synopsis + Function for getting MDTOdata + .DESCRIPTION + Function for getting MDTOdata + .EXAMPLE + Get-MDTOData -MDTMonitorServer MDTSERVER01 + .NOTES + Created: 2016-03-07 + Version: 1.0 + + Author - Mikael Nystrom + Twitter: @mikael_nystrom + Blog : http://deploymentbunny.com + + .LINK + http://www.deploymentbunny.com + #> + Param( + $MDTMonitorServer + ) + $URL = "http://" + $MDTMonitorServer + ":9801/MDTMonitorData/Computers" + $Data = Invoke-RestMethod $URL + foreach($property in ($Data.content.properties) ){ + $Hash = [ordered]@{ + Name = $($property.Name); + PercentComplete = $($property.PercentComplete.’#text’); + Warnings = $($property.Warnings.’#text’); + Errors = $($property.Errors.’#text’); + DeploymentStatus = $( + Switch($property.DeploymentStatus.’#text’){ + 1 { "Active/Running"} + 2 { "Failed"} + 3 { "Successfully completed"} + Default {"Unknown"} + } + ); + StepName = $($property.StepName); + TotalSteps = $($property.TotalStepS.'#text') + CurrentStep = $($property.CurrentStep.'#text') + DartIP = $($property.DartIP); + DartPort = $($property.DartPort); + DartTicket = $($property.DartTicket); + VMHost = $($property.VMHost.'#text'); + VMName = $($property.VMName.'#text'); + LastTime = $($property.LastTime.'#text') -replace "T"," "; + StartTime = $($property.StartTime.’#text’) -replace "T"," "; + EndTime = $($property.EndTime.’#text’) -replace "T"," "; + } + New-Object PSObject -Property $Hash + } +} + + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Author: Benjamin Holbrook +# Creation Date: December 2012 +# +# Disclaimer: +# All functions have been tested in a production environment but I will not provide a guarentee that they +# will work in all environments and that all functions will work exactly as intended. +# Suggestions and improvements are very welcome and will be acted upon. +# +# Contact: +# Email: holbrook.benjamin@gmail.com +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +function Get-CMObject { + <# + .SYNOPSIS + Retrieves a WMI object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Class + The WMI class type name to be retrieved. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMObject -SiteProvider "cm-prov01" -SiteCode "WES" -Class "SMS_Collection" + .EXAMPLE + Get-CMObject "cm-prov01" "WES" -Class "SMS_TaskSequence" -Filter "Name = 'Windows 7 x64 Build'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True)] [string] $Class, + [Parameter(Position=4, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + if ($Filter -eq $null -or $Filter -eq "") { + Get-WmiObject -ComputerName $SiteProvider -Namespace “root\sms\site_$SiteCode” -Class $Class -ErrorVariable +err -ErrorAction Stop + } else { + Get-WmiObject -ComputerName $SiteProvider -Namespace “root\sms\site_$SiteCode" -Query "SELECT * FROM $Class WHERE $Filter" -ErrorVariable +err -ErrorAction Stop + } + } +} + +function Get-CMCollection { + <# + .SYNOPSIS + Retrieves a WMI SMS_Collection object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_Collection object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMCollection -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMCollection "cm-prov01" "WES" -Filter "Name = 'Toshiba Laptops'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_Collection" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMCollectionMember { + <# + .SYNOPSIS + Retrieves a WMI SMS_CollectionMember object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_CollectionMember object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMCollectionMember -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMCollectionMember "cm-prov01" "WES" -Filter "Name = 'PC01'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_CollectionMember" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMFullCollectionMembership { + <# + .SYNOPSIS + Retrieves a WMI SMS_FullCollectionMembership object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_FullCollectionMembership object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMFullCollectionMembership -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMFullCollectionMembership "cm-prov01" "WES" -Filter "Name = 'PC01'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_FullCollectionMembership" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMPackage { + <# + .SYNOPSIS + Retrieves a WMI SMS_Package object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_Package object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMPackage -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMPackage "cm-prov01" "WES" -Filter "Name = 'Microsoft Office'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_Package" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMAdvertisement { + <# + .SYNOPSIS + Retrieves a WMI SMS_Advertisement object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_Advertisement object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMAdvertisement -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMAdvertisement "cm-prov01" "WES" -Filter "Name = 'Automatic Advertisement'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_Advertisement" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMDriver { + <# + .SYNOPSIS + Retrieves a WMI SMS_Driver object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_Driver object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMDriver -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMDriver "cm-prov01" "WES" -Filter "Name = 'Intel HD Graphics'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_Driver" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMDriverPackage { + <# + .SYNOPSIS + Retrieves a WMI SMS_DriverPackage object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_DriverPackage object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMDriverPackage -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMDriverPackage "cm-prov01" "WES" -Filter "Name = 'Intel HD Graphics'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_DriverPackage" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMSupportedPlatforms { + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_SupportedPlatforms" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMTaskSequence { + <# + .SYNOPSIS + Retrieves a WMI SMS_TaskSequence object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_TaskSequence object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMTaskSequence -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMTaskSequence "cm-prov01" "WES" -Filter "Name = 'Toshiba Laptop Builds'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_TaskSequence" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMTaskSequencePackage { + <# + .SYNOPSIS + Retrieves a WMI SMS_TaskSequencePackage object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_TaskSequencePackage object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMTaskSequencePackage -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMTaskSequencePackage "cm-prov01" "WES" -Filter "Name = 'Toshiba Laptop Builds'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_TaskSequencePackage" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMMachineSettings { + <# + .SYNOPSIS + Retrieves a WMI SMS_MachineSettings object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_MachineSettings object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMMachineSettings -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMMachineSettings "cm-prov01" "WES" -Filter "PropertyCount = '0'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_MachineSettings" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMCollectionSettings { + <# + .SYNOPSIS + Retrieves a WMI SMS_CollectionSettings object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_CollectionSettings object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMCollectionSettings -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMCollectionSettings "cm-prov01" "WES" -Filter "PropertyCount = '0'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_CollectionSettings" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +function Get-CMSite { + <# + .SYNOPSIS + Retrieves a WMI SMS_Site object in ConfigMgr. + .OUTPUTS + Retrieves a ConfigMgr WMI SMS_Site object which can be filtered using a WMI query. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER Filter + A query for filtering the returned WMI object. + .EXAMPLE + Get-CMSite -SiteProvider "cm-prov01" -SiteCode "WES" + .EXAMPLE + Get-CMSite "cm-prov01" "WES" -Filter "SiteCode = 'WES'" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$False)] [string] $Filter + ) + + PROCESS { + Get-CMObject $SiteProvider $SiteCode "SMS_Site" $Filter -ErrorVariable +err -ErrorAction Stop + } +} + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function New-CMComputer { + <# + .SYNOPSIS + Converts a file into an array of computer objects. + .DESCRIPTION + Each object contains a ComputerName, SerialNumber, MACAddress and Username associated with it. + This cmdlet's output should be used in conjunction with other cmdlets such as Import-CMComputerAssociation to supply the required input. + CSV files are preferred, otherwise cannot guarentee completion. + .OUTPUTS + Returns an array of ComputerObjects with the ComputerName, SerialNumber, MACAddress and Username as attributes. + .PARAMETER FileName + The path to the file to be processed. + .EXAMPLE + New-CMComputer -FileName "C:\Computer_File.csv" + .EXAMPLE + New-CMComputer -FileName "C:\Computer_File.csv","C:\Computers.txt" + .EXAMPLE + New-CMComputer "PC-01" "0123456789ab" "SN1234" "BJones" + .EXAMPLE + New-CMComputer "PC-01","PC02" "0123456789ab","0123456789cd" "SN1234","SN5678" "BJones","TGeorge" + #> + + [CmdletBinding(DefaultParameterSetName="Details")] + Param ( + [Parameter(ParameterSetName="File", Position=1, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $FileName, + [Parameter(ParameterSetName="Details", Position=1, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $ComputerName, + [Parameter(ParameterSetName="Details", Position=2, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $MACAddress, + [Parameter(ParameterSetName="Details", Position=3, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $SerialNumber, + [Parameter(ParameterSetName="Details", Position=4, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $Username + ) + + BEGIN { + $computers = @() + } + + PROCESS { + switch ($PSCmdlet.ParameterSetName) { + "File" { + foreach ($file in $FileName) { + try { + Write-Verbose "Importing csv file" + $fileContent = Import-CSV $file | Select ComputerName,SerialNumber,MACAddress,Username -ErrorVariable +err -ErrorAction Stop + + foreach ($row in $fileContent) { + if ($row.ComputerName -eq "" -or $row.SerialNumber -eq "" -or $row.MACAddress -eq "") { + Write-Verbose "Empty field in input file" + continue + } + + Write-Verbose "Creating computer object" + $computerProperties = @{'ComputerName' = $row.ComputerName; + 'SerialNumber' = $row.SerialNumber; + 'MACAddress' = $row.MACAddress; + 'Username' = $row.Username} + + $computers += New-Object -TypeName PSObject -Property $computerProperties + } + } + catch { + Write-Error $_.Exception + Write-Verbose "Failed to import $file" + } + } + + break + } + + "Details" { + if ($ComputerName.Length -ne $MACAddress.Length -ne $SerialNumber.Length -ne $Username.Length) { + Write-Debug "Parameters are of unequal lengths: $ComputerName.Length, $MACAddress.Length, $SerialNumber.Length, $Username.Length" + break + } + else { + Write-Verbose "Creating computer objects" + for ($i=0; $i -lt $ComputerName.Length; $i++) { + $computerProperties = @{'ComputerName' = $ComputerName[$i]; + 'SerialNumber' = $SerialNumber[$i]; + 'MACAddress' = $MACAddress[$i]; + 'Username' = $Username[$i]} + + $computers += New-Object -TypeName PSObject -Property $computerProperties + } + } + + break + } + } + } + + END { + Write-Output $computers + } +} + +function Import-CMComputerAssociation { + <# + .SYNOPSIS + Imports a computer association into ConfigMgr. + .DESCRIPTION + Uses WMI to create a new SMS_Site WMI class to invoke a ImportMachineEntry method using the provided + ComputerName and MACAddress as properties to import a new computer associations into ConfigMgr. + .OUTPUTS + Returns a WMI computer association object iff the -Output switch is specified. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER ComputerName + The ComputerName used for the computer association. + .PARAMETER MACAddress + The MACAddress used for the computer association. + .PARAMETER Overwrite + An optional switch used to overwrite any existing computer association with an identical computer name. + .PARAMETER Output + An optional switch used to return the computer association WMI object. + .EXAMPLE + Import-CMComputerAssociation "cm-prov01" "WES" "PC01" "01:23:45:67:89:ab" + .EXAMPLE + Import-CMComputerAssociation "cm-prov01" "WES" "PC01","PC02","PC03" "01:23:45:67:89:ab","01:23:45:67:89:cd","01:23:45:67:89:ef" + .EXAMPLE + Import-CMComputerAssociation "cm-prov01" "WES" "PC01" "01:23:45:67:89:ab" -Overwrite + .EXAMPLE + Import-CMComputerAssociation "cm-prov01" "WES" "PC01" "01:23:45:67:89:ab" -Output + .EXAMPLE + New-CMComputer -Filename "C:\Machine_List.csv" | Import-CMComputerAssociation "cm-prov01" "WES" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $ComputerName, + [Parameter(Position=4, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [Alias("MAC")] [string[]] $MACAddress, + [switch] $Overwrite, + [switch] $Output + ) + + BEGIN { + $siteClass = [WmiClass]”\\$SiteProvider\root\sms\site_$($SiteCode):SMS_Site” + $methodAddEntry = ”ImportMachineEntry” + $computerAssociations = @() + } + + PROCESS { + Write-Verbose "Importing computer associations" + if ($ComputerName.Length -eq $MACAddress.Length) { + for ($i=0; $i -lt $ComputerName.Length; $i++) { + try { + $inParamsAddEntry = $siteClass.psbase.GetMethodParameters($methodAddEntry) + $inParamsAddEntry.MACAddress = $MACAddress[$i] + $inParamsAddEntry.OverwriteExistingRecord = [bool] $Overwrite + $inParamsAddEntry.NetbiosName = $ComputerName[$i] + + $computerAssociationS += $siteClass.psbase.InvokeMethod($methodAddEntry, $inParamsAddEntry, $null) + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to import computer association" + } + } + } + else { + Write-Verbose "Input parameter lengths aren't of equal length." + } + } + + END { + if ($Output) { + Write-Output $computerAssociations + } + } +} + +function New-CMDeviceCollection { + <# + .SYNOPSIS + Creates a new ConfigMgr device collection. + .DESCRIPTION + Uses WMI to create a new instance of SMS_Collection as a device collection. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER CollectionName + The name of the collection to create. + .PARAMETER LimittingCollectionID + An optional parameter used to limit the colleciton. If no collection ID is specified will default to All Systems. + .PARAMETER Output + An optional switch used to return the ComputerCollection WMI object. + .EXAMPLE + New-CMDeviceCollection "cm-prov01" "WES" -CollectionName "New Build Collection" -LimittingCollectionID "SMS00001" + .EXAMPLE + New-CMDeviceCollection "cm-prov01" "WES" "Collection A","Collection B","Collection C" + .EXAMPLE + "Collection A","Collection B","Collection C" | New-CMDeviceCollection "cm-prov01" "WES" + .EXAMPLE + "Collection A","Collection B","Collection C" | New-CMDeviceCollection "cm-prov01" "WES" -LimittingCollectionID = "SMS00001" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName, + [Parameter(Position=4, Mandatory=$False)] [string] $LimittingCollectionID = "SMS00001" + ) + + BEGIN { + $collectionClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_Collection" + $intervalClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_ST_RecurInterval" + } + + PROCESS { + Write-Verbose "Creating device collections" + foreach ($name in $CollectionName) { + Write-Debug $name + try { + $newCollection = $collectionClass.PSBase.CreateInstance() + $interval = $intervalClass.CreateInstance() + $newCollection.Name = $name + $newCollection.OwnedByThisSite = $True + $newCollection.LimitToCollectionID = $LimittingCollectionID + $newCollection.CollectionType = 2 + + $interval = $intervalClass.CreateInstance() + $interval.MinuteSpan = 0 + $interval.HourSpan = 0 + $interval.DaySpan = 0 + $newCollection.RefreshSchedule = $interval + + Write-Output $newCollection.Put() + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to create new device collection" + } + } + } +} + +function New-CMUserCollection { + <# + .SYNOPSIS + Creates a new ConfigMgr user collection. + .DESCRIPTION + Uses WMI to create a new instance of SMS_Collection as a user collection. + .OUTPUTS + Returns a WMI collection object iff the -Output switch is specified. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER CollectionName + The name of the collection to create. + .PARAMETER LimittingCollectionID + An optional parameter used to limit the colleciton. If no collection ID is specified will default to All Systems. + .EXAMPLE + New-CMUserCollection "cm-prov01" "WES" -CollectionName "Admin Users" -LimittingCollectionID "SMS00002" + .EXAMPLE + New-CMUserCollection "cm-prov01" "WES" "Admin Users A","Admin Users B","Admin Users C" + .EXAMPLE + "Admin Users A","Admin Users B","Admin Users C" | New-CMUserCollection "cm-prov01" "WES" + .EXAMPLE + "Admin Users A","Admin Users B","Admin Users C" | New-CMUserCollection "cm-prov01" "WES" -LimittingCollectionID "SMS00002" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName, + [Parameter(Position=4, Mandatory=$False)] [string] $LimittingCollectionID = "SMS00002" + ) + + BEGIN { + $collectionClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_Collection" + $intervalClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_ST_RecurInterval" + } + + PROCESS { + Write-Verbose "Creating device collections" + foreach ($name in $CollectionName) { + Write-Debug $name + try { + $newCollection = $collectionClass.PSBase.CreateInstance() + $newCollection.Name = $name + $newCollection.OwnedByThisSite = $True + $newCollection.LimitToCollectionID = $LimittingCollectionID + $newCollection.CollectionType = 1 + + $interval = $intervalClass.CreateInstance() + $interval.MinuteSpan = 0 + $interval.HourSpan = 0 + $interval.DaySpan = 0 + $newCollection.RefreshSchedule = $interval + + Write-Output $newCollection.Put() + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to create new user collection" + } + } + } +} + +function Remove-CMCollection { + <# + .SYNOPSIS + Removes a collection in ConfigMgr. + .DESCRIPTION + Uses WMI to get the collection object to be removed and then removes it from ConfigMgr. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER CollectionName + The name of the collection to remove. + .EXAMPLE + Remove-CMCollection "cm-prov01" "WES" "Build Collection" + .EXAMPLE + Remove-CMCollection "cm-prov01" "WES" "Collection A", "Collection B", "Collection C" + .EXAMPLE + "Collection A", "Collection B", "Collection C" | Remove-CMCollection "cm-prov01" "WES" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName + ) + + PROCESS { + Write-Verbose "Removing collections" + foreach ($name in $CollectionName) { + Write-Debug $name + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($name)'" -ErrorVariable +err -ErrorAction Stop + $targetCollection.Delete() + } + catch { + Write-Error $_.Exception + Write-Verbose "Cannot delete collection - collection does not exist" + } + } + } +} + +function Add-CMDirectMembership { + <# + .SYNOPSIS + Adds a direct membership to a device collection in ConfigMgr. + .DESCRIPTION + Uses WMI to create a new SMS_CollectionRuleDirect WMI class to invoke an AddMembershipRule method using the provided + CollectionName as the collection and ComputerName as the member to add. + .OUTPUTS + Returns a WMI CollectionRuleDirect object iff the -Output switch is specified. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER CollectionName + The name of the collection to add the member to. + .PARAMETER ComputerName + The name of the computer member to add. + .PARAMETER Output + An optional switch used to return the CollectionRuleDirect WMI object. + .EXAMPLE + Add-CMDirectMembership "cm-prov01" "WES" "Build Collection" "PC-01" + .EXAMPLE + Add-CMDirectMembership "cm-prov01" "WES" "Build Collection" "PC-01","PC=02","PC-03" + .EXAMPLE + "PC-01", "PC-02", "PC-03" | Add-CMDirectMembership "cm-prov01" "WES" "Build Collection" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True)] [string] $CollectionName, + [Parameter(Position=4, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $ComputerName + ) + + BEGIN { + $collectionRuleDirectClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionRuleDirect” + $methodAddToCollection = ”AddMembershipRule” + } + + PROCESS { + Write-Verbose "Adding direct membership rules" + foreach ($name in $ComputerName) { + Write-Debug "ComputerName: $name" + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($CollectionName)'" -ErrorVariable +err -ErrorAction Stop + $computerMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($name)'" -ErrorVariable +err -ErrorAction Stop + + if ($targetCollection -eq $null) { + Write-Error "Unable to add direct membership - collection not found" + Write-Verbose "Unable to add direct membership - collection not found" + break + } + if ($computerMember -eq $null) { + Write-Error "Unable to add direct membership - machine not found" + Write-Verbose "Unable to add direct membership - collection not found" + break + } + + if ($computerMember.Length -gt 1) { + $computerResourceID = $computerMember[0].ResourceID + } else { + $computerResourceID = $computerMember.ResourceID + } + Write-Debug "ResourceID: $computerResourceID" + + $collectionRuleDirectClass.psbase.Properties["ResourceClassName"].Value = “SMS_R_System” + $collectionRuleDirectClass.psbase.Properties["ResourceID"].Value = $computerResourceID + + $inParamsAddToCollection = $targetCollection.psbase.GetMethodParameters($methodAddToCollection) + $inParamsAddToCollection.CollectionRule = $collectionRuleDirectClass + + Write-Output $targetCollection.psbase.InvokeMethod($methodAddToCollection, $inParamsAddToCollection, $null) + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to add direct membership" + } + } + } +} + +function Remove-CMDirectMembership { + <# + .SYNOPSIS + Removes a direct membership from a device collection in ConfigMgr. + .DESCRIPTION + Uses WMI to create a new SMS_CollectionRuleDirect WMI class to invoke a DeleteMembershipRule method using the provided + CollectionName as the collection and ComputerName as the member to remove. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER CollectionName + The name of the collection to remove the member from. + .PARAMETER ComputerName + The name of the computer member to remove. + .EXAMPLE + Remove-CMDirectMembershipRule "cm-prov01" "WES" "Build Collection" "PC-01" + .EXAMPLE + Remove-CMDirectMembershipRule "cm-prov01" "WES" "Build Collection" "PC-01","PC-02","PC-03" + .EXAMPLE + "PC-01", "PC-02", "PC-03" | Remove-CMDirectMembershipRule "cm-prov01" "WES" "Build Collection" + #> + + [CmdletBinding(DefaultParameterSetName="Computer")] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Collection")] [string[]] $CollectionName, + [Parameter(ParameterSetName="Computer", Position=4, Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Computer")] [string[]] $ComputerName, + [Parameter(ParameterSetName="Collection")] [switch] $All + ) + + BEGIN { + $ruleClass = [WmiClass]"\\$SiteProvider\root\sms\site_$($SiteCode):SMS_CollectionRuleDirect" + } + + PROCESS { + switch ($PSCmdlet.ParameterSetName) { + "Computer" { + Write-Verbose "Removing direct membership rules" + foreach ($collection in $CollectionName) { + foreach ($name in $ComputerName) { + Write-Debug "Removing $name from $collection" + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Stop + $computerMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($name)'" -ErrorVariable +err -ErrorAction Stop + + if ($targetCollection -eq $null) { + Write-Error "Unable to add direct membership - collection not found" + Write-Verbose "Unable to add direct membership - collection not found" + break + } + if ($computerMember -eq $null) { + Write-Error "Unable to add direct membership - machine not found" + Write-Verbose "Unable to add direct membership - collection not found" + break + } + + Write-Verbose "Getting computer resource ID" + if ($computerMember.Length -gt 1) { + $computerResourceID = $computerMember[0].ResourceID + } else { + $computerResourceID = $computerMember.ResourceID + } + Write-Debug "ResourceID: $computerResourceID" + + if ($targetCollection.CollectionRules -eq $null) { + $targetCollection.Get() + } + + foreach ($rule in $targetCollection.CollectionRules) { + if ($computerResourceID -eq $rule.ResourceID) { + $newRule = $ruleClass.CreateInstance() + $newRule.ResourceClassName = "SMS_FullCollectionMembership" + $newRule.ResourceID = $computerResourceID + $newRule.RuleName = $name + + $targetCollection.psbase.InvokeMethod("DeleteMembershipRule", $newRule) + break + } + } + } + catch { + Write-Error $_.Exception + Write-Verbose "Failed to remove direct membership rule" + } + } + } + + break + } + + "Collection" { + Write-Verbose "Removing direct membership rules" + foreach ($collection in $CollectionName) { + Write-Debug $collection + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Stop + + $targetCollection.psbase.InvokeMethod("DeleteAllMembers", $null) + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to remove direct membership rules - method failure" + } + } + + break + } + } + } +} + +function New-CMTaskSequenceAdvertisement { + <# + .SYNOPSIS + Advertises a task sequence to a collection in ConfigMgr. + .DESCRIPTION + Uses WMI to create a new instance of a SMS_Advertisement WMI class with the given attributes as properties. + An output switch can be used to output the result of the function. + .OUTPUTS + Returns a WMI SMS object iff the -Output switch is specified. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER TaskSequenceName + The name of the task sequence to advertise. + .PARAMETER CollectionName + The name of the collection to advertise the task sequence to. + .PARAMETER AdvertisementName + The name of the new advertisement. + .PARAMETER Comment + An optional parameter used to specify the comment used in the creation of the advertisement. + If not specified an empty string will be used. + .PARAMETER ExpirationTime + An optional parameter of the advertisement's expiry time. + If not specified the current time will be used. + Must have the following format: + "yyyymmddhhmmff" + .PARAMETER Output + An optional switch used to return the Advertisement WMI object. + .EXAMPLE + New-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Windows 7 x64" "Build Collection" + .EXAMPLE + New-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Windows 7 x64" "Build Collection" -AdvertisementName "New Advertisement" -Comment "This is a comment" -ExpirationTime "20120113000000" + .EXAMPLE + New-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Windows 7 x64" "Build Collection" -Output + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True)] [string] $TaskSequenceName, + [Parameter(Position=4, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName, + [Parameter(Position=5, Mandatory=$False)] [string] $AdvertisementName = "Default Advertisement Name", + [Parameter(Position=6, Mandatory=$False)] [string] $Comment = "", + [Parameter(Position=7, Mandatory=$False)] $ExpirationTime = (Get-Date).ToString("yyyyMMddhhmmff") + ) + + BEGIN { + $advertisementClass = [WmiClass]”\\$SiteProvider\root\sms\site_$($SiteCode):SMS_Advertisement” + $presentTime = (Get-Date).ToString("yyyyMMddhhmmff") + ".000000+***" + $ExpirationTime += ".000000+***" + } + + PROCESS { + Write-Verbose "Creating new task sequence advertisement" + foreach ($collection in $CollectionName) { + try { + $taskSequence = Get-CMTaskSequencePackage $SiteProvider $SiteCode -Filter "Name = '$($TaskSequenceName)'" -ErrorVariable +err -ErrorAction Stop + $taskSequenceID = $taskSequence.PackageID + Write-Debug "Task sequence ID: $taskSequenceID" + + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Stop + $targetCollectionID = $targetCollection.CollectionID + Write-Debug "Collection ID: $targetCollectionID" + + $newAdvertisement = $advertisementClass.PSBase.CreateInstance() + $newAdvertisement.AdvertisementName = $AdvertisementName + $newAdvertisement.Comment = $Comment + $newAdvertisement.CollectionID = $targetCollectionID + $newAdvertisement.PackageID = $taskSequenceID + $newAdvertisement.ProgramName = "*" + $newAdvertisement.PresentTime = $presentTime + $newAdvertisement.ExpirationTime = $ExpirationTime + $newAdvertisement.AdvertFlags = 42860576 + $newAdvertisement.RemoteClientFlags = 8480 + Write-Output $newAdvertisement.Put() + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to create new task sequence advertisement" + } + } + } +} + +function Remove-CMTaskSequenceAdvertisement { + <# + .SYNOPSIS + Removes a task sequence advertisement in ConfigMgr. + .DESCRIPTION + Uses WMI to get the collection and advertisement objects. Then uses the CollectionID to remove the correct advertisement. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER CollectionName + The name of the collection to remove the advertisement from. + .PARAMETER AdvertisementName + The name of the advertisement to remove from the collection. + .EXAMPLE + Remove-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Build Collection" "Advertisement Name" + .EXAMPLE + Remove-CMTaskSequenceAdvertisement "cm-prov01" "WES" "Build Collection" "Advertisement A","Advertisement B","Advertisement C" + .EXAMPLE + "Advertisement A","Advertisement B","Advertisement C" | Remove-CMTaskSequenceAdvertisement "cm-prov01" "WES" -CollectionName "Build Collection" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True)] [string] $CollectionName, + [Parameter(Position=4, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $AdvertisementName + ) + + PROCESS { + Write-Verbose "Removing advertisements" + foreach ($advertisement in $AdvertisementName) { + Write-Debug $advertisement + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($CollectionName)'" + $targetCollectionID = $targetCollection.CollectionID + Write-Debug $targetCollectionID + + $targetAdvertisement = Get-CMAdvertisement $SiteProvider $SiteCode -Filter "AdvertisementName = '$($advertisement)' AND CollectionID = '$($targetCollectionID)'" + $targetAdvertisement.Delete() + } + catch { + Write-Error $_.Exception + Write-Verbose "Collection not deleted" + } + } + } +} + +function Get-CMCollectionMembers { + <# + .SYNOPSIS + Gets a list of the direct member names of a collection in ConfigMgr. + .DESCRIPTION + Uses WMI to get the collection object to be listed. Then gets the FullCollectionMembership object list from + the collection and returns each of the member names as an array. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER CollectionName + The name of the collection to get the members from. + .EXAMPLE + Get-CMCollectionMemberList "cm-prov01" "WES" "Build Collection" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True)] [string] $CollectionName + ) + + BEGIN { + $memberNames = @() + } + + PROCESS { + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($CollectionName)'" -ErrorVariable +err -ErrorAction Stop + $collectionID = $targetCollection.CollectionID + $collectionMembers = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "CollectionID = '$($collectionID)'" -ErrorVariable +err -ErrorAction Stop + + foreach ($machine in $collectionMembers) { + $memberNames += $machine.Name + } + } + catch { + Write-Error $_.Exception + Write-Verbose "Failed to get collection member names" + } + } + + END { + Write-Output $memberNames + } +} + +function Clear-CMPXEAdvertisement { + <# + .SYNOPSIS + Clears a machines' PXE advertisement flag in ConfigMgr. + .DESCRIPTION + Uses WMI to get the machine to be cleared and then clears the PXE advertisement flag associated. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER MachineName + The name of the machine to be cleared. + .EXAMPLE + Clear-CMPXEAdvertisement "cm-prov01" "WES" "PC-01" + .EXAMPLE + Clear-CMPXEAdvertisement "cm-prov01" "WES" "PC-01","PC-02","PC-03" + .EXAMPLE + "PC-01","PC-02","PC-03" | Clear-CMPXEAdvertisement "cm-prov01" "WES" + .EXAMPLE + Clear-CMPXEAdvertisement "cm-prov01" "WES" -CollectionName "Collection A","Collection B","Collection C" + #> + + [CmdletBinding(DefaultParameterSetName="Machine")] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(ParameterSetName="Machine", Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $MachineName, + [Parameter(ParameterSetName="Collection", Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName + ) + + BEGIN { + $resourceIDs = @() + } + + PROCESS { + switch ($PSCmdlet.ParameterSetName) { + "Machine" { + Write-Verbose "Clearing machine PXE advertisement" + foreach ($name in $MachineName) { + Write-Debug $name + try { + $computerMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($name)'" -ErrorVariable +err -ErrorAction Stop + + if ($computerMember.Length -gt 1) { + $computerResourceID = $computerMember[0].ResourceID + } else { + $computerResourceID = $computerMember.ResourceID + } + Write-Debug "ResourceID: $computerResourceID" + + $resourceIDs += $computerResourceID + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to clear PXE advertisemment - machine doesn't exist" + } + } + + try { + Invoke-WmiMethod -Namespace "root\sms\site_$SiteCode" -Class SMS_Collection -Name ClearLastNBSAdvForMachines -ArgumentList $resourceIDs -ComputerName $SiteProvider -ErrorVariable +err -ErrorAction Stop + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to clear PXE advertisemment - method failure" + } + + break + } + + "Collection" { + foreach ($collection in $CollectionName) { + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Continue + + $targetCollection.psbase.InvokeMethod("ClearLastNBSAdvForCollection", $null, $null) + } + catch { + Write-Error $_.Exception + Write-Verbose "Failed to clear PXE advertisemment" + } + } + + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($CollectionName)'" -ErrorVariable +err -ErrorAction Stop + + $targetCollection.psbase.InvokeMethod("ClearLastNBSAdvForCollection", $null, $null) + } + catch { + Write-Error $_.Exception + Write-Verbose "Failed to clear PXE advertisemment" + } + + break + } + } + } +} + +function Update-CMCollectionMembership { + <# + .SYNOPSIS + Updates the collection membership of a collection in ConfigMgr. + .DESCRIPTION + Uses WMI to get a collection object and then invokes an RequestRefresh method on the collection. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER CollectionName + The name of the collection to update the membership of. + .PARAMETER IncludeSubCollections + An optional switch to update memberships of all sub-collections. + .EXAMPLE + Update-CMCollectionMembership "cm-prov01" "WES" "Build Collection" -IncludeSubCollections + .EXAMPLE + Update-CMCollectionMembership "cm-prov01" "WES" "Collection A","Collection B","Collection C" + .EXAMPLE + "Collection A","Collection B","Collection C" | Update-CMCollectionMembership "cm-prov01" "WES" + .EXAMPLE + "Collection A","Collection B","Collection C" | Update-CMCollectionMembership "cm-prov01" "WES" -IncludeSubCollection + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $CollectionName, + [switch] [Alias("Recurse")] $IncludeSubCollections + ) + + PROCESS { + Write-Verbose "Updating collection memberships" + foreach ($collection in $CollectionName) { + Write-Debug $collection + try { + $targetCollection = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" -ErrorVariable +err -ErrorAction Stop + + $targetCollection.psbase.InvokeMethod("RequestRefresh", [bool] $IncludeSubCollections) + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to update collection membership - method failure" + } + } + } +} + +function Add-CMVariable { + <# + .SYNOPSIS + Adds a machine or collection variable in ConfigMgr. + .DESCRIPTION + Uses WMI to get a machine or collection settings object and then adds a machine variable or collection variable WMI object. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER ComputerName + The name of the machine to add the machine variable to. + .PARAMETER CollectionName + The name of the collection to add the collection variable to. + .PARAMETER VariableName + The name of the variable to add. + .PARAMETER Value + The value assigned to the variable. + .PARAMETER IsMasked + An optional switch to define whether the variable is masked or not. + .EXAMPLE + Add-CMVariable "cm-prov01" "WES" "PC-01" -VariableName "Architecture" -Value "x64" + .EXAMPLE + Add-CMVariable "cm-prov01" "WES" "PC-01" -VariableName "Architecture" -Value "x64" -IsMasked + .EXAMPLE + Add-CMVariable "cm-prov01" "WES" "PC-01","PC-02","PC-03" -VariableName "Architecture" -Value "x64" + .EXAMPLE + "PC-01","PC-02","PC-03" | Add-CMVariable "cm-prov01" "WES" -VariableName "Architecture" -Value "x64" + .EXAMPLE + Add-CMVariable "cm-prov01" "WES" -CollectionName "Build Collection" -VariableName "Architecture" -Value "x64" + .EXAMPLE + Add-CMVariable "cm-prov01" "WES" -CollectionName "Collection A,""Collection B","Collection C" -VariableName "Architecture" -Value "x64" + #> + + [CmdletBinding(DefaultParameterSetName="Computer")] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(ParameterSetName="Computer", Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Computer")] [string[]] $ComputerName, + [Parameter(ParameterSetName="Collection", Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Collection")] [string[]] $CollectionName, + [Parameter(Position=4, Mandatory=$True)] [string] $VariableName, + [Parameter(Position=5, Mandatory=$True)] [string] $Value, + [switch] $IsMasked + ) + + BEGIN { + $machineSettingsClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_MachineSettings” + $machineVariableClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_MachineVariable” + $collectionSettingsClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionSettings” + $collectionVariableClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionVariable” + } + + PROCESS { + switch ($PSCmdlet.ParameterSetName) { + "Computer" { + Write-Verbose "Adding computer variables" + foreach ($computer in $ComputerName) { + Write-Debug "Computer: $computer, Variable: $VariableName - $Value" + try { + $machineMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($computer)'" + if ($machineMember -eq $null) { + Write-Error "Unable to add computer variable - machine not found" + Write-Verbose "Unable to add computer variable - machine not found" + break + } + + if ($machineMember.Length -gt 1) { + $machineResourceID = $machineMember[0].ResourceID + } else { + $machineResourceID = $machineMember.ResourceID + } + Write-Debug "ResourceID: $machineResourceID" + + $machineSettings = Get-CMMachineSettings $SiteProvider $SiteCode -Filter "ResourceID = '$($machineResourceID)'" + + if ($machineSettings -eq $null) { + Write-Verbose "Creating new machine settings" + $machineSettings = $machineSettingsClass.CreateInstance() + $machineSettings.ResourceID = $machineResourceID + $machineSettings.SourceSite = $SiteCode + } + else { + Write-Verbose "Fetching machine settings" + $machineSettings.Get() + } + + Write-Verbose "Updating computer variables" + $newMachineVariable = $machineVariableClass.CreateInstance() + $newMachineVariable.Name = $VariableName + $newMachineVariable.Value = $Value + $newMachineVariable.IsMasked = [bool] $IsMasked + + $machineSettings.MachineVariables += $newMachineVariable + + $machineSettings.Put() + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to add machine variable" + } + } + } + + "Collection" { + Write-Verbose "Adding computer variables" + foreach ($collection in $CollectionName) { + Write-Debug "Collection: $collection, Variable: $VariableName - $Value" + try { + $collectionMember = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" + $collectionID = $collectionMember[0].CollectionID + Write-Debug $collectionID + + $collectionSettings = Get-CMCollectionSettings $SiteProvider $SiteCode -Filter "CollectionID = '$($collectionID)'" + + if ($collectionSettings -eq $null) { + Write-Verbose "Creating new machine settings" + $collectionSettings = $collectionSettingsClass.CreateInstance() + $collectionSettings.SourceSite = $SiteCode + } + else { + Write-Verbose "Fetching machine settings" + $collectionSettings.Get() + } + + Write-Verbose "Updating collection variables" + $newCollectionVariable = $collectionVariableClass.CreateInstance() + $newCollectionVariable.Name = $VariableName + $newCollectionVariable.Value = $Value + $newCollectionVariable.IsMasked = [bool] $IsMasked + + $collectionSettings.CollectionVariables += $newCollectionVariable + + $collectionSettings.Put() + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to add collection variable" + } + } + } + } + } +} + +function Remove-CMVariable { + <# + .SYNOPSIS + Removes a machine or collection variable in ConfigMgr. + .DESCRIPTION + Uses WMI to get a machine or collection settings object and then removes a machine variable or collection variable WMI object. + Rebuilds the machine variable or collection variable list without the select variable. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER ComputerName + The name of the machine to remove the machine variable from. + .PARAMETER CollectionName + The name of the collection to remove the collection variable from. + .PARAMETER VariableName + The name of the variable to remove. + .EXAMPLE + Remove-CMVariable "cm-prov01" "WES" "PC-01" -VariableName "Architecture" + .EXAMPLE + Remove-CMVariable "cm-prov01" "WES" "PC-01","PC-02","PC-03" -VariableName "Architecture" + .EXAMPLE + "PC-01","PC-02","PC-03" | Remove-CMVariable "cm-prov01" "WES" -VariableName "Architecture" + .EXAMPLE + Remove-CMVariable "cm-prov01" "WES" -CollectionName "Build Collection" -VariableName "Architecture" + .EXAMPLE + Remove-CMVariable "cm-prov01" "WES" -CollectionName "Collection A,""Collection B","Collection C" -VariableName "Architecture" + #> + + [CmdletBinding(DefaultParameterSetName="Computer")] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(ParameterSetName="Computer", Position=3, Mandatory=$True)] [Alias("Computer")] [string[]] $ComputerName, + [Parameter(ParameterSetName="Collection", Position=3, Mandatory=$True)] [Alias("Collection")] [string[]] $CollectionName, + [Parameter(Position=4, Mandatory=$True)] [Alias("Variable")] [string] $VariableName + ) + + BEGIN { + $machineSettingsClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_MachineSettings” + $machineVariableClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_MachineVariable” + $collectionSettingsClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionSettings” + $collectionVariableClass = [WmiClass]”\\$siteProvider\root\sms\site_$($siteCode):SMS_CollectionVariable” + } + + PROCESS { + switch ($PSCmdlet.ParameterSetName) { + "Computer" { + Write-Verbose "Removing computer variable" + foreach ($computer in $ComputerName) { + Write-Debug "Computer: $computer, Variable: $VariableName" + try { + $machineMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$($computer)'" + if ($machineMember -eq $null) { + Write-Error "Unable to remove computer variable - machine not found" + Write-Verbose "Unable to remove computer variable - machine not found" + break + } + + if ($machineMember.Length -gt 1) { + $machineResourceID = $machineMember[0].ResourceID + } else { + $machineResourceID = $machineMember.ResourceID + } + Write-Debug "ResourceID: $machineResourceID" + + $machineSettings = Get-CMMachineSettings $SiteProvider $SiteCode -Filter "ResourceID = '$($machineResourceID)'" + + if ($machineSettings -ne $null) { + $machineSettings.Get() + + $variableIndex = -1 + for ($i=0; $i -lt $machineSettings.MachineVariables.Length; $i++) { + if ($machineSettings.MachineVariables[$i].Name -eq $VariableName) { + $variableIndex = $i + break + } + } + + Write-Verbose "Rebuilding the machine variables without the requested one if variable found" + if ($variableIndex -ne -1) { + $newMachineVariables = @() + for ($i=0; $i -lt $machineSettings.MachineVariables.Length; $i++) { + if ($i -ne $variableIndex) { + $machineVariable = $machineVariableClass.CreateInstance() + $machineVariable.Name = $machineSettings.MachineVariables[$i].Name + $machineVariable.Value = $machineSettings.MachineVariables[$i].Value + $machineVariable.IsMasked = $machineSettings.MachineVariables[$i].IsMasked + + $newMachineVariables += $machineVariable + } + } + + $machineSettings.MachineVariables = $newMachineVariables + $machineSettings.Put() + } + else { + Write-Verbose "Machine variable not removed - variable not found" + } + } + else { + Write-Verbose "Machine variable not removed" + } + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to remove machine variable" + } + } + } + + "Collection" { + Write-Verbose "Removing computer variable" + foreach ($collection in $CollectionName) { + Write-Debug "Collection: $collection, Variable: $VariableName" + try { + $collectionMember = Get-CMCollection $SiteProvider $SiteCode -Filter "Name = '$($collection)'" + $collectionID = $collectionMember[0].CollectionID + Write-Debug "CollectionID: $collectionID" + + $collectionSettings = Get-CMCollectionSettings $SiteProvider $SiteCode -Filter "CollectionID = '$($collectionID)'" + + if ($collectionSettings -ne $null) { + $collectionSettings.Get() + + $variableIndex = -1 + for ($i=0; $i -lt $collectionSettings.CollectionVariables.Length; $i++) { + if ($collectionSettings.CollectionVariables[$i].Name -eq $VariableName) { + $variableIndex = $i + break + } + } + + Write-Verbose "Rebuilding the collection variables without the requested one if variable found" + if ($variableIndex -ne -1) { + $newCollectionVariables = @() + for ($i=0; $i -lt $collectionSettings.CollectionVariables.Length; $i++) { + if ($i -ne $variableIndex) { + $collectionVariable = $collectionVariableClass.CreateInstance() + $collectionVariable.Name = $collectionSettings.CollectionVariables[$i].Name + $collectionVariable.Value = $collectionSettings.CollectionVariables[$i].Value + $collectionVariable.IsMasked = $collectionSettings.CollectionVariables[$i].IsMasked + + $newCollectionVariables += $collectionVariable + } + } + + $collectionSettings.CollectionVariables = $newCollectionVariables + $collectionSettings.Put() + } + else { + Write-Verbose "Collection variable not removed - variable not found" + } + } + else { + Write-Verbose "Collection variable not removed" + } + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to remove collection variable" + } + } + } + } + } +} + +function New-CMUserDeviceRelationship { + <# + .SYNOPSIS + Created a new user-device affinity in ConfigMgr. + .DESCRIPTION + Uses WMI to get a FullCollectionMembership object to get the device's resourceID. + Invokes a WMI CreateRelationship method on the device with the associated username. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER ComputerName + The name of the machine to create the affinity with. + + Notes: + This can be an array of names but it must be the same length as Username. + .PARAMETER Username + The username to create the affinity with. + + Notes: + This can be an array of names but it must be the same length as ComputerName. + .PARAMETER AffinityType + The type of user-device affinity to create. + Is optional but if not used will default to type 2. + + Notes: + Must be 1-4, inclusive. + .EXAMPLE + New-CMUserDeviceRelationship "cm-prov01" "WES" "PC-01" "FBloggs" -AffinityType 3 + .EXAMPLE + New-CMUserDeviceRelationship "cm-prov01" "WES" "PC-01" "FBloggs" + .EXAMPLE + New-CMUserDeviceRelationship "cm-prov01" "WES" "PC-01","PC-02" "FBloggs","GWhite" -AffinityType 2 + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $ComputerName, + [Parameter(Position=4, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [Alias("User")] [string[]] $Username, + [Parameter(Position=5, Mandatory=$False)] [ValidateRange(1,4)] [string] $AffinityType = 2 + ) + + PROCESS { + if ($ComputerName.Length -ne $Username.Length) { + Write-Error "The number of computer names and usernames do not match" + break + } + + for ($i=0; $i -lt $ComputerName.Length; $i++) { + $computer = $ComputerName[$i] + $user = $Username[$i] + + try { + $computerMember = Get-CMFullCollectionMembership $SiteProvider $SiteCode -Filter "Name = '$computer'" -ErrorVariable +err -ErrorAction Stop + if ($computerMember -eq $null) { + Write-Error "Unable to add user device relationship - machine not found" + Write-Verbose "Unable to user device relationship - collection not found" + break + } + + if ($computerMember.Length -gt 1) { + $computerResourceID = $computerMember[0].ResourceID + } else { + $computerResourceID = $computerMember.ResourceID + } + Write-Debug "ResourceID: $computerResourceID" + + Invoke-WmiMethod -Namespace "root\sms\site_$siteCode" -Class "SMS_UserMachineRelationship" -Name "CreateRelationship" -ArgumentList @($computerResourceID, $affinityType, 1, $name) -ComputerName $siteProvider + } + catch { + Write-Error $_.Exception + Write-Verbose "Unable to user device relationship" + } + } + } +} + +function Disable-CMDriver { + <# + .SYNOPSIS + Disables a driver in ConfigMgr. + .DESCRIPTION + Uses WMI to get a Driver object to disable. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER DriverName + The name of the driver to disable. + + Notes: + Multiple drivers may have identical names. All drivers with the specified name will be disabled. + .PARAMETER LimittingDriverCategory + Optional. + Limits the scrope of the drivers that can be disabled. + .EXAMPLE + Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" + .EXAMPLE + Disable-CMDriver "cm-prov01" "WES" -DriverName "Realtek High Definition Audio","Intel(R) Management Engine Interface Device" + .EXAMPLE + Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" -LimittingDriverCategory "Dell Latitude Drivers" + .EXAMPLE + Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" -LimittingDriverCategory "Dell Latitude Drivers","Toshiba M10 Drivers" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [Alias("Driver")] [string[]] $DriverName, + [Parameter(Position=4, Mandatory=$False)] [string[]] $LimittingDriverCategory + ) + + PROCESS { + foreach ($driver in $DriverName) { + $targetDrivers = Get-CMDriver $SiteProvider $SiteCode -Filter "LocalizedDisplayName = '$driver'" + foreach ($targetDriver in $targetDrivers) { + if ($LimittingDriverCategory -ne $Null) { + foreach ($driverCategory in $LimittingDriverCategory) { + if ($targetDriver.LocalizedCategoryInstanceNames.Contains($driverCategory)) { + Write-Verbose "Disabling: $($targetDriver.LocalizedDisplayName) in $driverCategory" + $targetDriver.IsEnabled = $false + } + } + } + else { + Write-Verbose "Disabling: $($targetDriver.LocalizedDisplayName)" + $targetDriver.IsEnabled = $false + } + } + } + } +} + +function Enable-CMDriver { + <# + .SYNOPSIS + Enables a driver in ConfigMgr. + .DESCRIPTION + Uses WMI to get a Driver object to enable. + .PARAMETER SiteProvider + The computer name of the ConfigMgr site. + .PARAMETER SiteCode + The site code of the ConfigMgr site. + .PARAMETER DriverName + The name of the driver to enable. + + Notes: + Multiple drivers may have identical names. All drivers with the specified name will be enabled. + .PARAMETER LimittingDriverCategory + Optional. + Limits the scrope of the drivers that can be disabled. + .EXAMPLE + Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" + .EXAMPLE + Disable-CMDriver "cm-prov01" "WES" -DriverName "Realtek High Definition Audio","Intel(R) Management Engine Interface Device" + .EXAMPLE + Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" -LimittingDriverCategory "Dell Latitude Drivers" + .EXAMPLE + Disable-CMDriver "cm-prov01" "WES" "Realtek High Definition Audio" -LimittingDriverCategory "Dell Latitude Drivers","Toshiba M10 Drivers" + #> + + [CmdletBinding()] + Param ( + [Parameter(Position=1, Mandatory=$True)] [string] $SiteProvider, + [Parameter(Position=2, Mandatory=$True)] [string] $SiteCode, + [Parameter(Position=3, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]] $DriverName, + [Parameter(Position=4, Mandatory=$False)] [string[]] $LimittingDriverCategory + ) + + PROCESS { + foreach ($driver in $DriverName) { + $targetDrivers = Get-CMDriver $SiteProvider $SiteCode -Filter "LocalizedDisplayName = '$driver'" + foreach ($targetDriver in $targetDrivers) { + if ($LimittingDriverCategory -ne $Null) { + foreach ($driverCategory in $LimittingDriverCategory) { + if ($targetDriver.LocalizedCategoryInstanceNames.Contains($driverCategory)) { + Write-Verbose "Enabling: $($targetDriver.LocalizedDisplayName) in $driverCategory" + $targetDriver.IsEnabled = $true + } + } + } + else { + Write-Verbose "Enabling: $($targetDriver.LocalizedDisplayName)" + $targetDriver.IsEnabled = $true + } + } + } + } } \ No newline at end of file diff --git a/App/Extensions/SystemFunctions.ps1 b/Extensions/SystemFunctions.ps1 similarity index 97% rename from App/Extensions/SystemFunctions.ps1 rename to Extensions/SystemFunctions.ps1 index 42775be..b9a7c58 100644 --- a/App/Extensions/SystemFunctions.ps1 +++ b/Extensions/SystemFunctions.ps1 @@ -1,755 +1,755 @@ -Function Retrieve-SystemInfo { - <# - .SYNOPSIS - Get Complete details of any server Local or remote - .DESCRIPTION - This function uses WMI class to connect to remote machine and get all related details - .PARAMETER COMPUTERNAMES - Just Pass computer name as Its parameter - .EXAMPLE - Retrieve-SystemInfo - .EXAMPLE - Retrieve-SystemInfo -ComputerName HQSPDBSP01 - .NOTES - To get help: - Get-Help Retrieve-SystemInfo - .LINK - http://sqlpowershell.wordpress.com - #> - - - param( - [Parameter(Mandatory=$true)] $ComputerName, - [switch] $IgnorePing - ) - - $computer = $ComputerName - - # Declare main data hash to be populated later - $data = @{} - $data.' ComputerName'=$computer - - # Try an ICMP ping the only way Powershell knows how... - $ping = Test-Connection -quiet -count 1 $computer - $Ping = $(if ($ping) {$true} else {$false}) - - # Do a DNS lookup with a .NET class method. Suppress error messages. - $ErrorActionPreference = 'SilentlyContinue' - if ( $ips = [System.Net.Dns]::GetHostAddresses($computer) | foreach { $_.IPAddressToString } ) { - - $data.'IP Address(es) from DNS' = ($ips -join ', ') - } - else { - $data.'IP Address from DNS' = 'Could not resolve' - } - # Make errors visible again - $ErrorActionPreference = 'Continue' - - # We'll assume no ping reply means it's dead. Try this anyway if -IgnorePing is specified - if ($ping -or $ignorePing) { - $data.'WMI Data Collection Attempt' = 'Yes (ping reply or -IgnorePing)' - - # Get various info from the ComputerSystem WMI class - if ($wmi = Get-WmiObject -Computer $computer -Class Win32_ComputerSystem -ErrorAction SilentlyContinue) { - $data.'Computer Hardware Manufacturer' = $wmi.Manufacturer - $data.'Computer Hardware Model' = $wmi.Model - $data.'Memory Physical in MB' = ($wmi.TotalPhysicalMemory/1MB).ToString('N') - $data.'Logged On User' = $wmi.Username - } - $wmi = $null - - # Get the free/total disk space from local disks (DriveType 3) - if ($wmi = Get-WmiObject -Computer $computer -Class Win32_LogicalDisk -Filter 'DriveType=3' -ErrorAction SilentlyContinue) { - $wmi | Select 'DeviceID', 'Size', 'FreeSpace' | Foreach { - $data."Local disk $($_.DeviceID)" = ('' + ($_.FreeSpace/1MB).ToString('N') + ' MB free of ' + ($_.Size/1MB).ToString('N') + ' MB total space with ' + ($_.Size/1MB - $_.FreeSpace/1MB).ToString('N') +' MB Used Space') - } - } - $wmi = $null - - # Get IP addresses from all local network adapters through WMI - if ($wmi = Get-WmiObject -Computer $computer -Class Win32_NetworkAdapterConfiguration -ErrorAction SilentlyContinue) { - $Ips = @{} - $wmi | Where { $_.IPAddress -match '\S+' } | Foreach { $Ips.$($_.IPAddress -join ', ') = $_.MACAddress } - $counter = 0 - $Ips.GetEnumerator() | Foreach { - $counter++; $data."IP Address $counter" = '' + $_.Name + ' (MAC: ' + $_.Value + ')' - } - } - $wmi = $null - - # Get CPU information with WMI - if ($wmi = Get-WmiObject -Computer $computer -Class Win32_Processor -ErrorAction SilentlyContinue) { - $wmi | Foreach { - $maxClockSpeed = $_.MaxClockSpeed - $numberOfCores += $_.NumberOfCores - $description = $_.Description - $numberOfLogProc += $_.NumberOfLogicalProcessors - $socketDesignation = $_.SocketDesignation - $status = $_.Status - $manufacturer = $_.Manufacturer - $name = $_.Name - } - $data.'CPU Clock Speed' = $maxClockSpeed - $data.'CPU Cores' = $numberOfCores - $data.'CPU Description' = $description - $data.'CPU Logical Processors' = $numberOfLogProc - $data.'CPU Socket' = $socketDesignation - $data.'CPU Status' = $status - $data.'CPU Manufacturer' = $manufacturer - $data.'CPU Name' = $name -replace '\s+', ' ' - } - $wmi = $null - - # Get BIOS info from WMI - if ($wmi = Get-WmiObject -Computer $computer -Class Win32_Bios -ErrorAction SilentlyContinue) { - $data.'BIOS Manufacturer' = $wmi.Manufacturer - $data.'BIOS Name' = $wmi.Name - $data.'BIOS Version' = $wmi.Version - } - $wmi = $null - - # Get operating system info from WMI - if ($wmi = Get-WmiObject -Computer $computer -Class Win32_OperatingSystem -ErrorAction SilentlyContinue) { - $data.'OS Boot Time' = $wmi.ConvertToDateTime($wmi.LastBootUpTime) - $data.'OS System Drive' = $wmi.SystemDrive - $data.'OS System Device' = $wmi.SystemDevice - $data.'OS Language ' = $wmi.OSLanguage - $data.'OS Version' = $wmi.Version - $data.'OS Windows dir' = $wmi.WindowsDirectory - $data.'OS Name' = $wmi.Caption - $data.'OS Install Date' = $wmi.ConvertToDateTime($wmi.InstallDate) - $data.'OS Service Pack' = [string]$wmi.ServicePackMajorVersion + '.' + $wmi.ServicePackMinorVersion - } - # Scan for open ports - $ports = @{ - 'File shares/RPC' = '139' ; - 'File shares' = '445' ; - 'RDP' = '3389'; - #'Zenworks' = '1761'; - } - foreach ($service in $ports.Keys) { - $socket = New-Object Net.Sockets.TcpClient - # Suppress error messages - $ErrorActionPreference = 'SilentlyContinue' - # Try to connect - $socket.Connect($computer, $ports.$service) - # Make error messages visible again - $ErrorActionPreference = 'Continue' - if ($socket.Connected) { - $data."Port $($ports.$service) ($service)" = 'Open' - $socket.Close() - } - else { - $data."Port $($ports.$service) ($service)" = 'Closed or filtered' - } - $socket = $null - } - } - else { - #$data.'WMI Data Collected' = 'No (no ping reply and -IgnorePing not specified)' - Write-OutputBox -OutputBoxMessage "Unable to connect to $computer" -Type "ERROR: " -Object Tab1 - Return - } - $wmi = $null - - if ($wmi = Get-WmiObject -Class Win32_OperatingSystem -computername $Computer -ErrorAction SilentlyContinue| Select-Object Name, TotalVisibleMemorySize, FreePhysicalMemory,TotalVirtualMemorySize,FreeVirtualMemory,FreeSpaceInPagingFiles,NumberofProcesses,NumberOfUsers ) { - $wmi | Foreach { - $TotalRAM = $_.TotalVisibleMemorySize/1MB - $FreeRAM = $_.FreePhysicalMemory/1MB - $UsedRAM = $_.TotalVisibleMemorySize/1MB - $_.FreePhysicalMemory/1MB - $TotalRAM = [Math]::Round($TotalRAM, 2) - $FreeRAM = [Math]::Round($FreeRAM, 2) - $UsedRAM = [Math]::Round($UsedRAM, 2) - $RAMPercentFree = ($FreeRAM / $TotalRAM) * 100 - $RAMPercentFree = [Math]::Round($RAMPercentFree, 2) - $TotalVirtualMemorySize = [Math]::Round($_.TotalVirtualMemorySize/1MB, 3) - $FreeVirtualMemory = [Math]::Round($_.FreeVirtualMemory/1MB, 3) - $FreeSpaceInPagingFiles = [Math]::Round($_.FreeSpaceInPagingFiles/1MB, 3) - $NumberofProcesses = $_.NumberofProcesses - $NumberOfUsers = $_.NumberOfUsers - } - $data.'Memory - Total RAM GB ' = $TotalRAM - $data.'Memory - RAM Free GB' = $FreeRAM - $data.'Memory - RAM Used GB' = $UsedRAM - $data.'Memory - Percentage Free'= $RAMPercentFree - $data.'Memory - TotalVirtualMemorySize' = $TotalVirtualMemorySize - $data.'Memory - FreeVirtualMemory' = $FreeVirtualMemory - $data.'Memory - FreeSpaceInPagingFiles' = $FreeSpaceInPagingFiles - $data.'NumberofProcesses'= $NumberofProcesses - $data.'NumberOfUsers' = $NumberOfUsers -replace '\s+', ' ' - } - # Output data - "#"*80 - "OS Complete Information" - "Generated $(get-date)" - "Generated from $(gc env:computername)" - "#"*80 - - $data.GetEnumerator() | Sort-Object 'Name' | Format-Table -AutoSize - $data.GetEnumerator() | Sort-Object 'Name' | Out-GridView -Title "$computer Information" -} - - -# ——————————————- -# Function Name: Get-LoggedIn -# Return the current logged-in user of a remote machine. -# ——————————————- -function Get-LoggedIn { - [CmdletBinding()] - param ( - [Parameter(Mandatory=$True)] - [string[]]$computername, - [Parameter(Mandatory=$True)] - $Outbox - ) - - foreach ($pc in $computername){ - $logged_in = (gwmi win32_computersystem -COMPUTER $pc).username - $name = $logged_in.split("\")[1] - - Write-OutputBox -OutputBoxMessage "Current Logged in user: $("{0}: {1}" -f $pc,$name)" -Type "INFO: " -Object $Outbox - } -} - - -Function Test-PSRemoting { - [cmdletbinding()] - Param( - [Parameter(Position=0,Mandatory,HelpMessage = "Enter a computername",ValueFromPipeline)] - [ValidateNotNullorEmpty()] - [string]$Computername, - [System.Management.Automation.Credential()]$Credential = [System.Management.Automation.PSCredential]::Empty - ) - - Begin { - Write-Verbose -Message "Starting $($MyInvocation.Mycommand)" - } #begin - - Process { - Write-Verbose -Message "Testing $computername" - Try { - $r = Test-WSMan -ComputerName $Computername -Credential $Credential -Authentication Default -ErrorAction Stop - return $True | Out-Null - } - Catch { - Write-Verbose $_.Exception.Message - return $False | Out-Null - - } - - } #Process - - End { - Write-Verbose -Message "Ending $($MyInvocation.Mycommand)" - } #end - -} - -#http://gallery.technet.microsoft.com/scriptcenter/56962f03-0243-4c83-8cdd-88c37898ccc4 -function Run-RemoteCMD { - - param( - [Parameter(Mandatory=$true,valuefrompipeline=$true)] - [string]$ComputerName, - [string]$command = "gpupdate /force" - ) - begin { - [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') - $command = [microsoft.visualbasic.interaction]::InputBox('Enter command to run','Command',$command) - [string]$cmd = "CMD.EXE /C " +$command - } - process { - $newproc = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList ($cmd) -ComputerName $ComputerName - if ($newproc.ReturnValue -eq 0 ) - { Write-Output " Command $($command) invoked Sucessfully on $($ComputerName)" } - # if command is sucessfully invoked it doesn't mean that it did what its supposed to do - #it means that the command only sucessfully ran on the cmd.exe of the server - #syntax errors can occur due to user input - } - End{Write-Output "Script ...END"} -} - - -function Ping-RemoteSystem { - param( - [parameter(Mandatory=$true,ValueFromPipeline)] - [string]$Remote, - [switch]$TestOnly - ) - If ($Remote -ne $null){ - If (Test-Connection -quiet -count 1 $Remote){ - If (!$TestOnly){$pingResult=ping $Remote | fl | out-string;} - Write-OutputBox -OutputBoxMessage $pingResult -Type "PING: " -Object Tab1 - } - Else{ - Write-OutputBox -OutputBoxMessage "Unable to connect to $Remote" -Type "ERROR: " -Object Tab1 - } - } - Else { - If (!$TestOnly){$pingResult=ping | fl | out-string;}; - } - Write-OutputBox -OutputBoxMessage $pingResult -Type "PING: " -Object Tab1 -} - -function Get-DiskSpace { - [CmdletBinding(DefaultParameterSetName="Computer")] - Param ( - [Parameter(ParameterSetName="Computer", Position=1, Mandatory=$False)] [string] $Computername - ) - ######################################################################## - # Code Generated By: SAPIEN Technologies PrimalForms (Community Edition) v1.0.9.0 - # Generated On: 4/29/2011 9:19 PM - # Generated By: tparthib - ######################################################################## - - #region Import the Assemblies - [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null - [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null - #endregion - - #region Generated Form Objects - $form1 = New-Object System.Windows.Forms.Form - $label2 = New-Object System.Windows.Forms.Label - $textBox3 = New-Object System.Windows.Forms.TextBox - $textBox2 = New-Object System.Windows.Forms.TextBox - $label4 = New-Object System.Windows.Forms.Label - $label3 = New-Object System.Windows.Forms.Label - $panel1 = New-Object System.Windows.Forms.Panel - $dataGridView1 = New-Object System.Windows.Forms.DataGridView - $textBox1 = New-Object System.Windows.Forms.TextBox - $label1 = New-Object System.Windows.Forms.Label - $button1 = New-Object System.Windows.Forms.Button - $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState - #endregion Generated Form Objects - - #---------------------------------------------- - #Generated Event Script Blocks - #---------------------------------------------- - #Provide Custom Code for events specified in PrimalForms. - $handler_dataGridView1_CurrentCellChanged= - { - $graphics = $form1.createGraphics() - #$myBrush = new-object Drawing.SolidBrush red - #$graphics.FillEllipse($myBrush, 590, 80, 140, 140) - $rectangle = New-Object Drawing.Rectangle 590,95,140,140 - $greenBrush = New-Object Drawing.SolidBrush Green - $redBrush = New-Object Drawing.SolidBrush Red - $pen = New-Object Drawing.Pen Black - #$pen.Color = "Black" - $pen.Width = 4 - $currentRow = $dataGridView1.CurrentRow.Index - [int]$abc = $dataGridView1.rows[$currentRow].Cells[5].value - [int]$xyz = 100 - $abc - [double]$tt = $abc + $xyz - [double]$deg1 = ($abc/$tt) * 360 - [double]$deg2 = ($xyz/$tt) * 360 - $graphics.DrawPie($pen,$rectangle,0,$deg1) - $graphics.FillPie($greenBrush,$rectangle,0,$deg1) - $graphics.DrawPie($pen,$rectangle,$deg1,$deg2) - $graphics.FillPie($redBrush,$rectangle,$deg1,$deg2) - - } - - $handler_button1_Click= - { - if ($textBox1.text -eq ""){ - [System.Windows.Forms.MessageBox]::Show("Please type in a computer, then click Check Space") - } - else - { - if ( Test-Connection $textBox1.text -Quiet -Count 1){ - $dataGridView1.ColumnCount = 0 - $dataGridView1.RowCount=0 - $dataGridView1.ColumnCount = 6 - [double]$warningPercent = $textBox2.text - [double]$criticalPercent = $textBox3.text - $dataGridView1.Columns[0].Name = "Drive" - $dataGridView1.Columns[1].Name = "Label" - $dataGridView1.Columns[2].Name = "Total(GB)" - $dataGridView1.Columns[3].Name = "Used(GB)" - $dataGridView1.Columns[4].Name = "Free(GB)" - $dataGridView1.Columns[5].Name = "Free(%)" - $disks = Get-WmiObject -Class Win32_LogicalDisk -ComputerName "localhost" | Where {$_.drivetype -eq 3} - foreach($disk in $disks) - { - $totalSize = "{0:N2}" -f ($disk.size/1gb) - $freeSpace = "{0:N2}" -f ($disk.freespace/1gb) - $usedSize = "{0:N2}" -f ($totalSize - $freeSpace) - $freeP = ($freeSpace/$totalSize) * 100 - $freeP = [math]::round($freeP, 2) - $dataGridView1.Rows.Add($disk.deviceid,$disk.volumename,$totalSize,$usedSize,$freeSpace,$freeP) - } - for ($r = 0; $r -lt $disks.count; $r++) - { - $value = $dataGridView1.rows[$r].Cells[5].value - - if ($value -gt $warningPercent) - { - $dataGridView1.Rows[$r].Cells[5].Style.BackColor = [System.Drawing.Color]::FromArgb(0,153,0) - } - elseif ($value -lt $criticalPercent) - { - $dataGridView1.Rows[$r].Cells[5].Style.BackColor = [System.Drawing.Color]::FromArgb(255, 0, 51) - } - else - { - $dataGridView1.Rows[$r].Cells[5].Style.BackColor = [System.Drawing.Color]::FromArgb(255, 227, 3) - } - } - - } - else{ - [System.Windows.Forms.MessageBox]::Show("Unable to query free space, Computer may not be online or you don't have permissions to quary disks.") - } - - - } - - } - - $OnLoadForm_StateCorrection= - {#Correct the initial state of the form to prevent the .Net maximized form issue - $form1.WindowState = $InitialFormWindowState - } - - #---------------------------------------------- - #region Generated Form Code - $form1.AutoScaleMode = 3 - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 250 - $System_Drawing_Size.Width = 765 - $form1.ClientSize = $System_Drawing_Size - $form1.DataBindings.DefaultDataSourceUpdateMode = 0 - $form1.MaximizeBox = $False - $form1.Name = "form1" - $form1.StartPosition = 1 - $form1.Text = "DiskSpace Tool" - - $label2.DataBindings.DefaultDataSourceUpdateMode = 0 - $label2.Font = New-Object System.Drawing.Font("Tahoma",9.75,5,3,1) - - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 615 - $System_Drawing_Point.Y = 70 - $label2.Location = $System_Drawing_Point - $label2.Name = "label2" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 23 - $System_Drawing_Size.Width = 100 - $label2.Size = $System_Drawing_Size - $label2.TabIndex = 1 - $label2.Text = "PIE CHART" - - $form1.Controls.Add($label2) - - $textBox3.DataBindings.DefaultDataSourceUpdateMode = 0 - $textBox3.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",9.75,1,3,1) - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 498 - $System_Drawing_Point.Y = 26 - $textBox3.Location = $System_Drawing_Point - $textBox3.Name = "textBox3" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 22 - $System_Drawing_Size.Width = 27 - $textBox3.Size = $System_Drawing_Size - $textBox3.TabIndex = 7 - $textBox3.Text = "10" - - $form1.Controls.Add($textBox3) - - $textBox2.DataBindings.DefaultDataSourceUpdateMode = 0 - $textBox2.Font = New-Object System.Drawing.Font("Tahoma",9.75,1,3,1) - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 419 - $System_Drawing_Point.Y = 26 - $textBox2.Location = $System_Drawing_Point - $textBox2.Name = "textBox2" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 23 - $System_Drawing_Size.Width = 28 - $textBox2.Size = $System_Drawing_Size - $textBox2.TabIndex = 6 - $textBox2.Text = "20" - - $form1.Controls.Add($textBox2) - - $label4.BackColor = [System.Drawing.Color]::FromArgb(255,255,0,0) - $label4.DataBindings.DefaultDataSourceUpdateMode = 0 - $label4.Font = New-Object System.Drawing.Font("Tahoma",8.25,1,3,1) - - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 483 - $System_Drawing_Point.Y = 8 - $label4.Location = $System_Drawing_Point - $label4.Name = "label4" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 15 - $System_Drawing_Size.Width = 78 - $label4.Size = $System_Drawing_Size - $label4.TabIndex = 5 - $label4.Text = "CRITICAL %" - - $form1.Controls.Add($label4) - - $label3.BackColor = [System.Drawing.Color]::FromArgb(255,255,255,0) - $label3.DataBindings.DefaultDataSourceUpdateMode = 0 - $label3.Font = New-Object System.Drawing.Font("Tahoma",8.25,1,3,1) - - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 397 - $System_Drawing_Point.Y = 8 - $label3.Location = $System_Drawing_Point - $label3.Name = "label3" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 15 - $System_Drawing_Size.Width = 79 - $label3.Size = $System_Drawing_Size - $label3.TabIndex = 4 - $label3.Text = "WARNING %" - - $form1.Controls.Add($label3) - - - $panel1.DataBindings.DefaultDataSourceUpdateMode = 0 - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 13 - $System_Drawing_Point.Y = 55 - $panel1.Location = $System_Drawing_Point - $panel1.Name = "panel1" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 178 - $System_Drawing_Size.Width = 548 - $panel1.Size = $System_Drawing_Size - $panel1.TabIndex = 3 - - $form1.Controls.Add($panel1) - $dataGridView1.AllowUserToAddRows = $False - $dataGridView1.AutoSizeColumnsMode = 6 - $dataGridView1.AutoSizeRowsMode = 7 - $System_Windows_Forms_DataGridViewCellStyle_1 = New-Object System.Windows.Forms.DataGridViewCellStyle - $System_Windows_Forms_DataGridViewCellStyle_1.Alignment = 16 - $System_Windows_Forms_DataGridViewCellStyle_1.BackColor = [System.Drawing.Color]::FromArgb(255,240,240,240) - $System_Windows_Forms_DataGridViewCellStyle_1.Font = New-Object System.Drawing.Font("Tahoma",8.25,0,3,1) - $System_Windows_Forms_DataGridViewCellStyle_1.ForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0) - $System_Windows_Forms_DataGridViewCellStyle_1.SelectionBackColor = [System.Drawing.Color]::FromArgb(255,51,153,255) - $System_Windows_Forms_DataGridViewCellStyle_1.SelectionForeColor = [System.Drawing.Color]::FromArgb(255,255,255,255) - $System_Windows_Forms_DataGridViewCellStyle_1.WrapMode = 1 - $dataGridView1.ColumnHeadersDefaultCellStyle = $System_Windows_Forms_DataGridViewCellStyle_1 - $dataGridView1.DataBindings.DefaultDataSourceUpdateMode = 0 - $System_Windows_Forms_DataGridViewCellStyle_2 = New-Object System.Windows.Forms.DataGridViewCellStyle - $System_Windows_Forms_DataGridViewCellStyle_2.Alignment = 16 - $System_Windows_Forms_DataGridViewCellStyle_2.BackColor = [System.Drawing.Color]::FromArgb(255,255,255,255) - $System_Windows_Forms_DataGridViewCellStyle_2.Font = New-Object System.Drawing.Font("Tahoma",9.75,0,3,1) - $System_Windows_Forms_DataGridViewCellStyle_2.ForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0) - $System_Windows_Forms_DataGridViewCellStyle_2.SelectionBackColor = [System.Drawing.Color]::FromArgb(255,51,153,255) - $System_Windows_Forms_DataGridViewCellStyle_2.SelectionForeColor = [System.Drawing.Color]::FromArgb(255,255,255,255) - $System_Windows_Forms_DataGridViewCellStyle_2.WrapMode = 2 - $dataGridView1.DefaultCellStyle = $System_Windows_Forms_DataGridViewCellStyle_2 - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 4 - $System_Drawing_Point.Y = 4 - $dataGridView1.Location = $System_Drawing_Point - $dataGridView1.Name = "dataGridView1" - $System_Windows_Forms_DataGridViewCellStyle_3 = New-Object System.Windows.Forms.DataGridViewCellStyle - $System_Windows_Forms_DataGridViewCellStyle_3.Alignment = 16 - $System_Windows_Forms_DataGridViewCellStyle_3.BackColor = [System.Drawing.Color]::FromArgb(255,240,240,240) - $System_Windows_Forms_DataGridViewCellStyle_3.Font = New-Object System.Drawing.Font("Tahoma",9.75,0,3,1) - $System_Windows_Forms_DataGridViewCellStyle_3.ForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0) - $System_Windows_Forms_DataGridViewCellStyle_3.SelectionBackColor = [System.Drawing.Color]::FromArgb(255,51,153,255) - $System_Windows_Forms_DataGridViewCellStyle_3.SelectionForeColor = [System.Drawing.Color]::FromArgb(255,255,255,255) - $System_Windows_Forms_DataGridViewCellStyle_3.WrapMode = 1 - $dataGridView1.RowHeadersDefaultCellStyle = $System_Windows_Forms_DataGridViewCellStyle_3 - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 169 - $System_Drawing_Size.Width = 544 - $dataGridView1.Size = $System_Drawing_Size - $dataGridView1.TabIndex = 0 - $dataGridView1.add_CurrentCellChanged($handler_dataGridView1_CurrentCellChanged) - $panel1.Controls.Add($dataGridView1) - - - $textBox1.DataBindings.DefaultDataSourceUpdateMode = 0 - $textBox1.Font = New-Object System.Drawing.Font("Tahoma",9.75,0,3,1) - $textBox1.ForeColor = [System.Drawing.Color]::FromArgb(255,65,105,225) - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 140 - $System_Drawing_Point.Y = 13 - $textBox1.Location = $System_Drawing_Point - $textBox1.Name = "textBox1" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 23 - $System_Drawing_Size.Width = 140 - $textBox1.Size = $System_Drawing_Size - $textBox1.TabIndex = 2 - $textBox1.Text = "$ComputerName" - - $form1.Controls.Add($textBox1) - - $label1.DataBindings.DefaultDataSourceUpdateMode = 0 - $label1.Font = New-Object System.Drawing.Font("Tahoma",9.75,1,3,1) - - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 13 - $System_Drawing_Point.Y = 15 - $label1.Location = $System_Drawing_Point - $label1.Name = "label1" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 23 - $System_Drawing_Size.Width = 123 - $label1.Size = $System_Drawing_Size - $label1.TabIndex = 1 - $label1.Text = "Computer Name : " - - $form1.Controls.Add($label1) - - - $button1.DataBindings.DefaultDataSourceUpdateMode = 0 - - $System_Drawing_Point = New-Object System.Drawing.Point - $System_Drawing_Point.X = 678 - $System_Drawing_Point.Y = 8 - $button1.Location = $System_Drawing_Point - $button1.Name = "button1" - $System_Drawing_Size = New-Object System.Drawing.Size - $System_Drawing_Size.Height = 60 - $System_Drawing_Size.Width = 80 - $button1.Size = $System_Drawing_Size - $button1.TabIndex = 0 - $button1.Text = " Check Space" - $button1.UseVisualStyleBackColor = $True - $button1.add_Click($handler_button1_Click) - - $form1.Controls.Add($button1) - - #endregion Generated Form Code - - #Save the initial state of the form - $InitialFormWindowState = $form1.WindowState - #Init the OnLoad event to correct the initial state of the form - $form1.add_Load($OnLoadForm_StateCorrection) - #Show the Form - $form1.ShowDialog()| Out-Null - -} #End Function - - -Function Get-InstalledSoftware { - <# - .Synopsis - Generates a list of installed programs on a computer - - .DESCRIPTION - This function generates a list by querying the registry and returning the installed programs of a local or remote computer. - - .NOTES - Name: Get-InstalledSoftware - Author: Jaap Brasser - Version: 1.2.1 - DateCreated: 2013-08-23 - DateUpdated: 2015-02-28 - Blog: http://www.jaapbrasser.com - - .LINK - http://www.jaapbrasser.com - - .PARAMETER ComputerName - The computer to which connectivity will be checked - - .PARAMETER Property - Additional values to be loaded from the registry. Can contain a string or an array of string that will be attempted to retrieve from the registry for each program entry - - .EXAMPLE - Get-InstalledSoftware - - Description: - Will generate a list of installed programs on local machine - - .EXAMPLE - Get-InstalledSoftware -ComputerName server01,server02 - - Description: - Will generate a list of installed programs on server01 and server02 - - .EXAMPLE - Get-InstalledSoftware -ComputerName Server01 -Property DisplayVersion,VersionMajor - - Description: - Will gather the list of programs from Server01 and attempts to retrieve the displayversion and versionmajor subkeys from the registry for each installed program - - .EXAMPLE - 'server01','server02' | Get-InstalledSoftware -Property Uninstallstring - - Description - Will retrieve the installed programs on server01/02 that are passed on to the function through the pipeline and also retrieves the uninstall string for each program - #> - [CmdletBinding(SupportsShouldProcess=$true)] - param( - [Parameter(ValueFromPipeline=$true, - ValueFromPipelineByPropertyName=$true, - Position=0)] - [string[]] - $ComputerName = $env:COMPUTERNAME, - [Parameter(Position=0)] - [string[]]$Property - ) - - begin { - Write-OutputBox -OutputBoxMessage "Collecting Installed software for: $ComputerName" -Type "START: " -Object Tab1 - $RegistryLocation = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\', - 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\' - $HashProperty = @{} - $SelectProperty = @('ComputerName','ProgramName','Version','Date') - if ($Property) { - $SelectProperty += $Property - } - $products = @() - - } - process { - If (Test-Connection -quiet -count 1 $ComputerName){ - foreach ($Computer in $ComputerName) { - $RegBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$Computer) - foreach ($CurrentReg in $RegistryLocation) { - if ($RegBase) { - $CurrentRegKey = $RegBase.OpenSubKey($CurrentReg) - if ($CurrentRegKey) { - $CurrentRegKey.GetSubKeyNames() | ForEach-Object { - if ($Property) { - foreach ($CurrentProperty in $Property) { - $HashProperty.$CurrentProperty = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue($CurrentProperty) - } - } - $HashProperty.ComputerName = $Computer - $HashProperty.ProgramName = ($DisplayName = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('DisplayName')) - $HashProperty.Version = ($Version = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('DisplayVersion')) - $HashProperty.Date = ($installedOn = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('InstallDate')) - If ($installedOn) { - try { - $HashProperty.Date = [DateTime] $installedOn - } catch { - try { - $HashProperty.Date = [DateTime] ('{0}-{1}-{2}' -f ($installedOn.Substring(0, 4)), ($installedOn.Substring(4, 2)), ($installedOn.Substring(6, 2)) ) - } catch { - $HashProperty.Date = $null - } - } - } - if ($DisplayName) { - $product = New-Object -TypeName PSCustomObject -Property $HashProperty | - Select-Object -Property $SelectProperty - } - $products += $product - } - } - } - } - } - $products | Sort ComputerName | Out-GridView -Title "Installed Software" - } - Else{ - Write-OutputBox -OutputBoxMessage "Error collecting Installed software for: $ComputerName, system is not available" -Type "START: " -Object Tab1 - Return $false - } - } +Function Retrieve-SystemInfo { + <# + .SYNOPSIS + Get Complete details of any server Local or remote + .DESCRIPTION + This function uses WMI class to connect to remote machine and get all related details + .PARAMETER COMPUTERNAMES + Just Pass computer name as Its parameter + .EXAMPLE + Retrieve-SystemInfo + .EXAMPLE + Retrieve-SystemInfo -ComputerName HQSPDBSP01 + .NOTES + To get help: + Get-Help Retrieve-SystemInfo + .LINK + http://sqlpowershell.wordpress.com + #> + + + param( + [Parameter(Mandatory=$true)] $ComputerName, + [switch] $IgnorePing + ) + + $computer = $ComputerName + + # Declare main data hash to be populated later + $data = @{} + $data.' ComputerName'=$computer + + # Try an ICMP ping the only way Powershell knows how... + $ping = Test-Connection -quiet -count 1 $computer + $Ping = $(if ($ping) {$true} else {$false}) + + # Do a DNS lookup with a .NET class method. Suppress error messages. + $ErrorActionPreference = 'SilentlyContinue' + if ( $ips = [System.Net.Dns]::GetHostAddresses($computer) | foreach { $_.IPAddressToString } ) { + + $data.'IP Address(es) from DNS' = ($ips -join ', ') + } + else { + $data.'IP Address from DNS' = 'Could not resolve' + } + # Make errors visible again + $ErrorActionPreference = 'Continue' + + # We'll assume no ping reply means it's dead. Try this anyway if -IgnorePing is specified + if ($ping -or $ignorePing) { + $data.'WMI Data Collection Attempt' = 'Yes (ping reply or -IgnorePing)' + + # Get various info from the ComputerSystem WMI class + if ($wmi = Get-WmiObject -Computer $computer -Class Win32_ComputerSystem -ErrorAction SilentlyContinue) { + $data.'Computer Hardware Manufacturer' = $wmi.Manufacturer + $data.'Computer Hardware Model' = $wmi.Model + $data.'Memory Physical in MB' = ($wmi.TotalPhysicalMemory/1MB).ToString('N') + $data.'Logged On User' = $wmi.Username + } + $wmi = $null + + # Get the free/total disk space from local disks (DriveType 3) + if ($wmi = Get-WmiObject -Computer $computer -Class Win32_LogicalDisk -Filter 'DriveType=3' -ErrorAction SilentlyContinue) { + $wmi | Select 'DeviceID', 'Size', 'FreeSpace' | Foreach { + $data."Local disk $($_.DeviceID)" = ('' + ($_.FreeSpace/1MB).ToString('N') + ' MB free of ' + ($_.Size/1MB).ToString('N') + ' MB total space with ' + ($_.Size/1MB - $_.FreeSpace/1MB).ToString('N') +' MB Used Space') + } + } + $wmi = $null + + # Get IP addresses from all local network adapters through WMI + if ($wmi = Get-WmiObject -Computer $computer -Class Win32_NetworkAdapterConfiguration -ErrorAction SilentlyContinue) { + $Ips = @{} + $wmi | Where { $_.IPAddress -match '\S+' } | Foreach { $Ips.$($_.IPAddress -join ', ') = $_.MACAddress } + $counter = 0 + $Ips.GetEnumerator() | Foreach { + $counter++; $data."IP Address $counter" = '' + $_.Name + ' (MAC: ' + $_.Value + ')' + } + } + $wmi = $null + + # Get CPU information with WMI + if ($wmi = Get-WmiObject -Computer $computer -Class Win32_Processor -ErrorAction SilentlyContinue) { + $wmi | Foreach { + $maxClockSpeed = $_.MaxClockSpeed + $numberOfCores += $_.NumberOfCores + $description = $_.Description + $numberOfLogProc += $_.NumberOfLogicalProcessors + $socketDesignation = $_.SocketDesignation + $status = $_.Status + $manufacturer = $_.Manufacturer + $name = $_.Name + } + $data.'CPU Clock Speed' = $maxClockSpeed + $data.'CPU Cores' = $numberOfCores + $data.'CPU Description' = $description + $data.'CPU Logical Processors' = $numberOfLogProc + $data.'CPU Socket' = $socketDesignation + $data.'CPU Status' = $status + $data.'CPU Manufacturer' = $manufacturer + $data.'CPU Name' = $name -replace '\s+', ' ' + } + $wmi = $null + + # Get BIOS info from WMI + if ($wmi = Get-WmiObject -Computer $computer -Class Win32_Bios -ErrorAction SilentlyContinue) { + $data.'BIOS Manufacturer' = $wmi.Manufacturer + $data.'BIOS Name' = $wmi.Name + $data.'BIOS Version' = $wmi.Version + } + $wmi = $null + + # Get operating system info from WMI + if ($wmi = Get-WmiObject -Computer $computer -Class Win32_OperatingSystem -ErrorAction SilentlyContinue) { + $data.'OS Boot Time' = $wmi.ConvertToDateTime($wmi.LastBootUpTime) + $data.'OS System Drive' = $wmi.SystemDrive + $data.'OS System Device' = $wmi.SystemDevice + $data.'OS Language ' = $wmi.OSLanguage + $data.'OS Version' = $wmi.Version + $data.'OS Windows dir' = $wmi.WindowsDirectory + $data.'OS Name' = $wmi.Caption + $data.'OS Install Date' = $wmi.ConvertToDateTime($wmi.InstallDate) + $data.'OS Service Pack' = [string]$wmi.ServicePackMajorVersion + '.' + $wmi.ServicePackMinorVersion + } + # Scan for open ports + $ports = @{ + 'File shares/RPC' = '139' ; + 'File shares' = '445' ; + 'RDP' = '3389'; + #'Zenworks' = '1761'; + } + foreach ($service in $ports.Keys) { + $socket = New-Object Net.Sockets.TcpClient + # Suppress error messages + $ErrorActionPreference = 'SilentlyContinue' + # Try to connect + $socket.Connect($computer, $ports.$service) + # Make error messages visible again + $ErrorActionPreference = 'Continue' + if ($socket.Connected) { + $data."Port $($ports.$service) ($service)" = 'Open' + $socket.Close() + } + else { + $data."Port $($ports.$service) ($service)" = 'Closed or filtered' + } + $socket = $null + } + } + else { + #$data.'WMI Data Collected' = 'No (no ping reply and -IgnorePing not specified)' + Write-OutputBox -OutputBoxMessage "Unable to connect to $computer" -Type "ERROR: " -Object Tab1 + Return + } + $wmi = $null + + if ($wmi = Get-WmiObject -Class Win32_OperatingSystem -computername $Computer -ErrorAction SilentlyContinue| Select-Object Name, TotalVisibleMemorySize, FreePhysicalMemory,TotalVirtualMemorySize,FreeVirtualMemory,FreeSpaceInPagingFiles,NumberofProcesses,NumberOfUsers ) { + $wmi | Foreach { + $TotalRAM = $_.TotalVisibleMemorySize/1MB + $FreeRAM = $_.FreePhysicalMemory/1MB + $UsedRAM = $_.TotalVisibleMemorySize/1MB - $_.FreePhysicalMemory/1MB + $TotalRAM = [Math]::Round($TotalRAM, 2) + $FreeRAM = [Math]::Round($FreeRAM, 2) + $UsedRAM = [Math]::Round($UsedRAM, 2) + $RAMPercentFree = ($FreeRAM / $TotalRAM) * 100 + $RAMPercentFree = [Math]::Round($RAMPercentFree, 2) + $TotalVirtualMemorySize = [Math]::Round($_.TotalVirtualMemorySize/1MB, 3) + $FreeVirtualMemory = [Math]::Round($_.FreeVirtualMemory/1MB, 3) + $FreeSpaceInPagingFiles = [Math]::Round($_.FreeSpaceInPagingFiles/1MB, 3) + $NumberofProcesses = $_.NumberofProcesses + $NumberOfUsers = $_.NumberOfUsers + } + $data.'Memory - Total RAM GB ' = $TotalRAM + $data.'Memory - RAM Free GB' = $FreeRAM + $data.'Memory - RAM Used GB' = $UsedRAM + $data.'Memory - Percentage Free'= $RAMPercentFree + $data.'Memory - TotalVirtualMemorySize' = $TotalVirtualMemorySize + $data.'Memory - FreeVirtualMemory' = $FreeVirtualMemory + $data.'Memory - FreeSpaceInPagingFiles' = $FreeSpaceInPagingFiles + $data.'NumberofProcesses'= $NumberofProcesses + $data.'NumberOfUsers' = $NumberOfUsers -replace '\s+', ' ' + } + # Output data + "#"*80 + "OS Complete Information" + "Generated $(get-date)" + "Generated from $(gc env:computername)" + "#"*80 + + $data.GetEnumerator() | Sort-Object 'Name' | Format-Table -AutoSize + $data.GetEnumerator() | Sort-Object 'Name' | Out-GridView -Title "$computer Information" +} + + +# ——————————————- +# Function Name: Get-LoggedIn +# Return the current logged-in user of a remote machine. +# ——————————————- +function Get-LoggedIn { + [CmdletBinding()] + param ( + [Parameter(Mandatory=$True)] + [string[]]$computername, + [Parameter(Mandatory=$True)] + $Outbox + ) + + foreach ($pc in $computername){ + $logged_in = (gwmi win32_computersystem -COMPUTER $pc).username + $name = $logged_in.split("\")[1] + + Write-OutputBox -OutputBoxMessage "Current Logged in user: $("{0}: {1}" -f $pc,$name)" -Type "INFO: " -Object $Outbox + } +} + + +Function Test-PSRemoting { + [cmdletbinding()] + Param( + [Parameter(Position=0,Mandatory,HelpMessage = "Enter a computername",ValueFromPipeline)] + [ValidateNotNullorEmpty()] + [string]$Computername, + [System.Management.Automation.Credential()]$Credential = [System.Management.Automation.PSCredential]::Empty + ) + + Begin { + Write-Verbose -Message "Starting $($MyInvocation.Mycommand)" + } #begin + + Process { + Write-Verbose -Message "Testing $computername" + Try { + $r = Test-WSMan -ComputerName $Computername -Credential $Credential -Authentication Default -ErrorAction Stop + return $True | Out-Null + } + Catch { + Write-Verbose $_.Exception.Message + return $False | Out-Null + + } + + } #Process + + End { + Write-Verbose -Message "Ending $($MyInvocation.Mycommand)" + } #end + +} + +#http://gallery.technet.microsoft.com/scriptcenter/56962f03-0243-4c83-8cdd-88c37898ccc4 +function Run-RemoteCMD { + + param( + [Parameter(Mandatory=$true,valuefrompipeline=$true)] + [string]$ComputerName, + [string]$command = "gpupdate /force" + ) + begin { + [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') + $command = [microsoft.visualbasic.interaction]::InputBox('Enter command to run','Command',$command) + [string]$cmd = "CMD.EXE /C " +$command + } + process { + $newproc = Invoke-WmiMethod -class Win32_process -name Create -ArgumentList ($cmd) -ComputerName $ComputerName + if ($newproc.ReturnValue -eq 0 ) + { Write-Output " Command $($command) invoked Sucessfully on $($ComputerName)" } + # if command is sucessfully invoked it doesn't mean that it did what its supposed to do + #it means that the command only sucessfully ran on the cmd.exe of the server + #syntax errors can occur due to user input + } + End{Write-Output "Script ...END"} +} + + +function Ping-RemoteSystem { + param( + [parameter(Mandatory=$true,ValueFromPipeline)] + [string]$Remote, + [switch]$TestOnly + ) + If ($Remote -ne $null){ + If (Test-Connection -quiet -count 1 $Remote){ + If (!$TestOnly){$pingResult=ping $Remote | fl | out-string;} + Write-OutputBox -OutputBoxMessage $pingResult -Type "PING: " -Object Tab1 + } + Else{ + Write-OutputBox -OutputBoxMessage "Unable to connect to $Remote" -Type "ERROR: " -Object Tab1 + } + } + Else { + If (!$TestOnly){$pingResult=ping | fl | out-string;}; + } + Write-OutputBox -OutputBoxMessage $pingResult -Type "PING: " -Object Tab1 +} + +function Get-DiskSpace { + [CmdletBinding(DefaultParameterSetName="Computer")] + Param ( + [Parameter(ParameterSetName="Computer", Position=1, Mandatory=$False)] [string] $Computername + ) + ######################################################################## + # Code Generated By: SAPIEN Technologies PrimalForms (Community Edition) v1.0.9.0 + # Generated On: 4/29/2011 9:19 PM + # Generated By: tparthib + ######################################################################## + + #region Import the Assemblies + [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null + [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null + #endregion + + #region Generated Form Objects + $form1 = New-Object System.Windows.Forms.Form + $label2 = New-Object System.Windows.Forms.Label + $textBox3 = New-Object System.Windows.Forms.TextBox + $textBox2 = New-Object System.Windows.Forms.TextBox + $label4 = New-Object System.Windows.Forms.Label + $label3 = New-Object System.Windows.Forms.Label + $panel1 = New-Object System.Windows.Forms.Panel + $dataGridView1 = New-Object System.Windows.Forms.DataGridView + $textBox1 = New-Object System.Windows.Forms.TextBox + $label1 = New-Object System.Windows.Forms.Label + $button1 = New-Object System.Windows.Forms.Button + $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState + #endregion Generated Form Objects + + #---------------------------------------------- + #Generated Event Script Blocks + #---------------------------------------------- + #Provide Custom Code for events specified in PrimalForms. + $handler_dataGridView1_CurrentCellChanged= + { + $graphics = $form1.createGraphics() + #$myBrush = new-object Drawing.SolidBrush red + #$graphics.FillEllipse($myBrush, 590, 80, 140, 140) + $rectangle = New-Object Drawing.Rectangle 590,95,140,140 + $greenBrush = New-Object Drawing.SolidBrush Green + $redBrush = New-Object Drawing.SolidBrush Red + $pen = New-Object Drawing.Pen Black + #$pen.Color = "Black" + $pen.Width = 4 + $currentRow = $dataGridView1.CurrentRow.Index + [int]$abc = $dataGridView1.rows[$currentRow].Cells[5].value + [int]$xyz = 100 - $abc + [double]$tt = $abc + $xyz + [double]$deg1 = ($abc/$tt) * 360 + [double]$deg2 = ($xyz/$tt) * 360 + $graphics.DrawPie($pen,$rectangle,0,$deg1) + $graphics.FillPie($greenBrush,$rectangle,0,$deg1) + $graphics.DrawPie($pen,$rectangle,$deg1,$deg2) + $graphics.FillPie($redBrush,$rectangle,$deg1,$deg2) + + } + + $handler_button1_Click= + { + if ($textBox1.text -eq ""){ + [System.Windows.Forms.MessageBox]::Show("Please type in a computer, then click Check Space") + } + else + { + if ( Test-Connection $textBox1.text -Quiet -Count 1){ + $dataGridView1.ColumnCount = 0 + $dataGridView1.RowCount=0 + $dataGridView1.ColumnCount = 6 + [double]$warningPercent = $textBox2.text + [double]$criticalPercent = $textBox3.text + $dataGridView1.Columns[0].Name = "Drive" + $dataGridView1.Columns[1].Name = "Label" + $dataGridView1.Columns[2].Name = "Total(GB)" + $dataGridView1.Columns[3].Name = "Used(GB)" + $dataGridView1.Columns[4].Name = "Free(GB)" + $dataGridView1.Columns[5].Name = "Free(%)" + $disks = Get-WmiObject -Class Win32_LogicalDisk -ComputerName "localhost" | Where {$_.drivetype -eq 3} + foreach($disk in $disks) + { + $totalSize = "{0:N2}" -f ($disk.size/1gb) + $freeSpace = "{0:N2}" -f ($disk.freespace/1gb) + $usedSize = "{0:N2}" -f ($totalSize - $freeSpace) + $freeP = ($freeSpace/$totalSize) * 100 + $freeP = [math]::round($freeP, 2) + $dataGridView1.Rows.Add($disk.deviceid,$disk.volumename,$totalSize,$usedSize,$freeSpace,$freeP) + } + for ($r = 0; $r -lt $disks.count; $r++) + { + $value = $dataGridView1.rows[$r].Cells[5].value + + if ($value -gt $warningPercent) + { + $dataGridView1.Rows[$r].Cells[5].Style.BackColor = [System.Drawing.Color]::FromArgb(0,153,0) + } + elseif ($value -lt $criticalPercent) + { + $dataGridView1.Rows[$r].Cells[5].Style.BackColor = [System.Drawing.Color]::FromArgb(255, 0, 51) + } + else + { + $dataGridView1.Rows[$r].Cells[5].Style.BackColor = [System.Drawing.Color]::FromArgb(255, 227, 3) + } + } + + } + else{ + [System.Windows.Forms.MessageBox]::Show("Unable to query free space, Computer may not be online or you don't have permissions to quary disks.") + } + + + } + + } + + $OnLoadForm_StateCorrection= + {#Correct the initial state of the form to prevent the .Net maximized form issue + $form1.WindowState = $InitialFormWindowState + } + + #---------------------------------------------- + #region Generated Form Code + $form1.AutoScaleMode = 3 + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 250 + $System_Drawing_Size.Width = 765 + $form1.ClientSize = $System_Drawing_Size + $form1.DataBindings.DefaultDataSourceUpdateMode = 0 + $form1.MaximizeBox = $False + $form1.Name = "form1" + $form1.StartPosition = 1 + $form1.Text = "DiskSpace Tool" + + $label2.DataBindings.DefaultDataSourceUpdateMode = 0 + $label2.Font = New-Object System.Drawing.Font("Tahoma",9.75,5,3,1) + + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 615 + $System_Drawing_Point.Y = 70 + $label2.Location = $System_Drawing_Point + $label2.Name = "label2" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 23 + $System_Drawing_Size.Width = 100 + $label2.Size = $System_Drawing_Size + $label2.TabIndex = 1 + $label2.Text = "PIE CHART" + + $form1.Controls.Add($label2) + + $textBox3.DataBindings.DefaultDataSourceUpdateMode = 0 + $textBox3.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",9.75,1,3,1) + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 498 + $System_Drawing_Point.Y = 26 + $textBox3.Location = $System_Drawing_Point + $textBox3.Name = "textBox3" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 22 + $System_Drawing_Size.Width = 27 + $textBox3.Size = $System_Drawing_Size + $textBox3.TabIndex = 7 + $textBox3.Text = "10" + + $form1.Controls.Add($textBox3) + + $textBox2.DataBindings.DefaultDataSourceUpdateMode = 0 + $textBox2.Font = New-Object System.Drawing.Font("Tahoma",9.75,1,3,1) + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 419 + $System_Drawing_Point.Y = 26 + $textBox2.Location = $System_Drawing_Point + $textBox2.Name = "textBox2" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 23 + $System_Drawing_Size.Width = 28 + $textBox2.Size = $System_Drawing_Size + $textBox2.TabIndex = 6 + $textBox2.Text = "20" + + $form1.Controls.Add($textBox2) + + $label4.BackColor = [System.Drawing.Color]::FromArgb(255,255,0,0) + $label4.DataBindings.DefaultDataSourceUpdateMode = 0 + $label4.Font = New-Object System.Drawing.Font("Tahoma",8.25,1,3,1) + + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 483 + $System_Drawing_Point.Y = 8 + $label4.Location = $System_Drawing_Point + $label4.Name = "label4" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 15 + $System_Drawing_Size.Width = 78 + $label4.Size = $System_Drawing_Size + $label4.TabIndex = 5 + $label4.Text = "CRITICAL %" + + $form1.Controls.Add($label4) + + $label3.BackColor = [System.Drawing.Color]::FromArgb(255,255,255,0) + $label3.DataBindings.DefaultDataSourceUpdateMode = 0 + $label3.Font = New-Object System.Drawing.Font("Tahoma",8.25,1,3,1) + + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 397 + $System_Drawing_Point.Y = 8 + $label3.Location = $System_Drawing_Point + $label3.Name = "label3" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 15 + $System_Drawing_Size.Width = 79 + $label3.Size = $System_Drawing_Size + $label3.TabIndex = 4 + $label3.Text = "WARNING %" + + $form1.Controls.Add($label3) + + + $panel1.DataBindings.DefaultDataSourceUpdateMode = 0 + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 13 + $System_Drawing_Point.Y = 55 + $panel1.Location = $System_Drawing_Point + $panel1.Name = "panel1" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 178 + $System_Drawing_Size.Width = 548 + $panel1.Size = $System_Drawing_Size + $panel1.TabIndex = 3 + + $form1.Controls.Add($panel1) + $dataGridView1.AllowUserToAddRows = $False + $dataGridView1.AutoSizeColumnsMode = 6 + $dataGridView1.AutoSizeRowsMode = 7 + $System_Windows_Forms_DataGridViewCellStyle_1 = New-Object System.Windows.Forms.DataGridViewCellStyle + $System_Windows_Forms_DataGridViewCellStyle_1.Alignment = 16 + $System_Windows_Forms_DataGridViewCellStyle_1.BackColor = [System.Drawing.Color]::FromArgb(255,240,240,240) + $System_Windows_Forms_DataGridViewCellStyle_1.Font = New-Object System.Drawing.Font("Tahoma",8.25,0,3,1) + $System_Windows_Forms_DataGridViewCellStyle_1.ForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0) + $System_Windows_Forms_DataGridViewCellStyle_1.SelectionBackColor = [System.Drawing.Color]::FromArgb(255,51,153,255) + $System_Windows_Forms_DataGridViewCellStyle_1.SelectionForeColor = [System.Drawing.Color]::FromArgb(255,255,255,255) + $System_Windows_Forms_DataGridViewCellStyle_1.WrapMode = 1 + $dataGridView1.ColumnHeadersDefaultCellStyle = $System_Windows_Forms_DataGridViewCellStyle_1 + $dataGridView1.DataBindings.DefaultDataSourceUpdateMode = 0 + $System_Windows_Forms_DataGridViewCellStyle_2 = New-Object System.Windows.Forms.DataGridViewCellStyle + $System_Windows_Forms_DataGridViewCellStyle_2.Alignment = 16 + $System_Windows_Forms_DataGridViewCellStyle_2.BackColor = [System.Drawing.Color]::FromArgb(255,255,255,255) + $System_Windows_Forms_DataGridViewCellStyle_2.Font = New-Object System.Drawing.Font("Tahoma",9.75,0,3,1) + $System_Windows_Forms_DataGridViewCellStyle_2.ForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0) + $System_Windows_Forms_DataGridViewCellStyle_2.SelectionBackColor = [System.Drawing.Color]::FromArgb(255,51,153,255) + $System_Windows_Forms_DataGridViewCellStyle_2.SelectionForeColor = [System.Drawing.Color]::FromArgb(255,255,255,255) + $System_Windows_Forms_DataGridViewCellStyle_2.WrapMode = 2 + $dataGridView1.DefaultCellStyle = $System_Windows_Forms_DataGridViewCellStyle_2 + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 4 + $System_Drawing_Point.Y = 4 + $dataGridView1.Location = $System_Drawing_Point + $dataGridView1.Name = "dataGridView1" + $System_Windows_Forms_DataGridViewCellStyle_3 = New-Object System.Windows.Forms.DataGridViewCellStyle + $System_Windows_Forms_DataGridViewCellStyle_3.Alignment = 16 + $System_Windows_Forms_DataGridViewCellStyle_3.BackColor = [System.Drawing.Color]::FromArgb(255,240,240,240) + $System_Windows_Forms_DataGridViewCellStyle_3.Font = New-Object System.Drawing.Font("Tahoma",9.75,0,3,1) + $System_Windows_Forms_DataGridViewCellStyle_3.ForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0) + $System_Windows_Forms_DataGridViewCellStyle_3.SelectionBackColor = [System.Drawing.Color]::FromArgb(255,51,153,255) + $System_Windows_Forms_DataGridViewCellStyle_3.SelectionForeColor = [System.Drawing.Color]::FromArgb(255,255,255,255) + $System_Windows_Forms_DataGridViewCellStyle_3.WrapMode = 1 + $dataGridView1.RowHeadersDefaultCellStyle = $System_Windows_Forms_DataGridViewCellStyle_3 + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 169 + $System_Drawing_Size.Width = 544 + $dataGridView1.Size = $System_Drawing_Size + $dataGridView1.TabIndex = 0 + $dataGridView1.add_CurrentCellChanged($handler_dataGridView1_CurrentCellChanged) + $panel1.Controls.Add($dataGridView1) + + + $textBox1.DataBindings.DefaultDataSourceUpdateMode = 0 + $textBox1.Font = New-Object System.Drawing.Font("Tahoma",9.75,0,3,1) + $textBox1.ForeColor = [System.Drawing.Color]::FromArgb(255,65,105,225) + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 140 + $System_Drawing_Point.Y = 13 + $textBox1.Location = $System_Drawing_Point + $textBox1.Name = "textBox1" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 23 + $System_Drawing_Size.Width = 140 + $textBox1.Size = $System_Drawing_Size + $textBox1.TabIndex = 2 + $textBox1.Text = "$ComputerName" + + $form1.Controls.Add($textBox1) + + $label1.DataBindings.DefaultDataSourceUpdateMode = 0 + $label1.Font = New-Object System.Drawing.Font("Tahoma",9.75,1,3,1) + + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 13 + $System_Drawing_Point.Y = 15 + $label1.Location = $System_Drawing_Point + $label1.Name = "label1" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 23 + $System_Drawing_Size.Width = 123 + $label1.Size = $System_Drawing_Size + $label1.TabIndex = 1 + $label1.Text = "Computer Name : " + + $form1.Controls.Add($label1) + + + $button1.DataBindings.DefaultDataSourceUpdateMode = 0 + + $System_Drawing_Point = New-Object System.Drawing.Point + $System_Drawing_Point.X = 678 + $System_Drawing_Point.Y = 8 + $button1.Location = $System_Drawing_Point + $button1.Name = "button1" + $System_Drawing_Size = New-Object System.Drawing.Size + $System_Drawing_Size.Height = 60 + $System_Drawing_Size.Width = 80 + $button1.Size = $System_Drawing_Size + $button1.TabIndex = 0 + $button1.Text = " Check Space" + $button1.UseVisualStyleBackColor = $True + $button1.add_Click($handler_button1_Click) + + $form1.Controls.Add($button1) + + #endregion Generated Form Code + + #Save the initial state of the form + $InitialFormWindowState = $form1.WindowState + #Init the OnLoad event to correct the initial state of the form + $form1.add_Load($OnLoadForm_StateCorrection) + #Show the Form + $form1.ShowDialog()| Out-Null + +} #End Function + + +Function Get-InstalledSoftware { + <# + .Synopsis + Generates a list of installed programs on a computer + + .DESCRIPTION + This function generates a list by querying the registry and returning the installed programs of a local or remote computer. + + .NOTES + Name: Get-InstalledSoftware + Author: Jaap Brasser + Version: 1.2.1 + DateCreated: 2013-08-23 + DateUpdated: 2015-02-28 + Blog: http://www.jaapbrasser.com + + .LINK + http://www.jaapbrasser.com + + .PARAMETER ComputerName + The computer to which connectivity will be checked + + .PARAMETER Property + Additional values to be loaded from the registry. Can contain a string or an array of string that will be attempted to retrieve from the registry for each program entry + + .EXAMPLE + Get-InstalledSoftware + + Description: + Will generate a list of installed programs on local machine + + .EXAMPLE + Get-InstalledSoftware -ComputerName server01,server02 + + Description: + Will generate a list of installed programs on server01 and server02 + + .EXAMPLE + Get-InstalledSoftware -ComputerName Server01 -Property DisplayVersion,VersionMajor + + Description: + Will gather the list of programs from Server01 and attempts to retrieve the displayversion and versionmajor subkeys from the registry for each installed program + + .EXAMPLE + 'server01','server02' | Get-InstalledSoftware -Property Uninstallstring + + Description + Will retrieve the installed programs on server01/02 that are passed on to the function through the pipeline and also retrieves the uninstall string for each program + #> + [CmdletBinding(SupportsShouldProcess=$true)] + param( + [Parameter(ValueFromPipeline=$true, + ValueFromPipelineByPropertyName=$true, + Position=0)] + [string[]] + $ComputerName = $env:COMPUTERNAME, + [Parameter(Position=0)] + [string[]]$Property + ) + + begin { + Write-OutputBox -OutputBoxMessage "Collecting Installed software for: $ComputerName" -Type "START: " -Object Tab1 + $RegistryLocation = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\', + 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\' + $HashProperty = @{} + $SelectProperty = @('ComputerName','ProgramName','Version','Date') + if ($Property) { + $SelectProperty += $Property + } + $products = @() + + } + process { + If (Test-Connection -quiet -count 1 $ComputerName){ + foreach ($Computer in $ComputerName) { + $RegBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$Computer) + foreach ($CurrentReg in $RegistryLocation) { + if ($RegBase) { + $CurrentRegKey = $RegBase.OpenSubKey($CurrentReg) + if ($CurrentRegKey) { + $CurrentRegKey.GetSubKeyNames() | ForEach-Object { + if ($Property) { + foreach ($CurrentProperty in $Property) { + $HashProperty.$CurrentProperty = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue($CurrentProperty) + } + } + $HashProperty.ComputerName = $Computer + $HashProperty.ProgramName = ($DisplayName = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('DisplayName')) + $HashProperty.Version = ($Version = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('DisplayVersion')) + $HashProperty.Date = ($installedOn = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('InstallDate')) + If ($installedOn) { + try { + $HashProperty.Date = [DateTime] $installedOn + } catch { + try { + $HashProperty.Date = [DateTime] ('{0}-{1}-{2}' -f ($installedOn.Substring(0, 4)), ($installedOn.Substring(4, 2)), ($installedOn.Substring(6, 2)) ) + } catch { + $HashProperty.Date = $null + } + } + } + if ($DisplayName) { + $product = New-Object -TypeName PSCustomObject -Property $HashProperty | + Select-Object -Property $SelectProperty + } + $products += $product + } + } + } + } + } + $products | Sort ComputerName | Out-GridView -Title "Installed Software" + } + Else{ + Write-OutputBox -OutputBoxMessage "Error collecting Installed software for: $ComputerName, system is not available" -Type "START: " -Object Tab1 + Return $false + } + } } \ No newline at end of file diff --git a/App/Extensions/TabControl/AdminMenu-Tab1.ps1 b/Extensions/TabControl/AdminMenu-Tab1.ps1 similarity index 97% rename from App/Extensions/TabControl/AdminMenu-Tab1.ps1 rename to Extensions/TabControl/AdminMenu-Tab1.ps1 index ba5513e..244bc43 100644 --- a/App/Extensions/TabControl/AdminMenu-Tab1.ps1 +++ b/Extensions/TabControl/AdminMenu-Tab1.ps1 @@ -1,628 +1,628 @@ -##*============================================= -##* LOAD TAB 2 FROM CONFIG -##*============================================= -$ConfigTab1 = $AppMenuTabandButtons.tab[0] -If ($HashNames.Keys -eq "Tab1"){ - Write-Host "Found Tab2 section in names file" -ForegroundColor Gray - $Tab1HashNames = $HashNames.Tab1 - [string]$Tab1HashList = $Tab1HashNames| out-string -stream - write-Host "`nNames found in list: `n$Tab1HashList" -} -Else{ - Write-Host "No Tab1 section found in names file" -ForegroundColor Gray -} - -$WPFtxtTab1Name1.Text = $envComputerName - -$WPFbtnTab1Name1List.add_Click({Save-ComputerList -TitleDesc "List of Workstations" -TabObject Tab1} ) -##*============================================= -##* FORM ADD CLICK FUNCTIONS -##*============================================= -<# - Examples to use (place in function): - - SIMPLE: - Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal - - SEND TO OUTPUT (PASSTHRU): - Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 - $PasstoOutput = Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String - If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} - - OPEN EXTERNAL PS1 - . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") - - USE INTGRATED FUNCTION (EASIEST) - - to log to output box in tab, use -OutputTab switch - - to identify process alias, use -Alias switch, otherwise the button name will be used - - to specify a custom run message use the -CustomRunMsg switch - - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) - - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch - - EXAMPLE (EXE): - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (EXE) with Parameters: - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab1Name1.Text) -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (PS1): - Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow - -#> -# Set of 6 large buttons under left column -function Call-btnTab1_01{ - Start-ButtonProcess -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal -} - -function Call-btnTab1_02{ - Start-ButtonProcess -Path "$envComSpec" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal -} - -function Call-btnTab1_03{ - If ($WPFtxtTab1Name1.Text -eq $envComputerName){ - Start-ButtonProcess -Path "$envWinDir\system32\compmgmt.msc" -CustomRunMsg "Opening [$ButtonClicked] for local system, change remote system and try again OR right click on local system in the Computer Managmeent window and select 'connect to another computer'." -OutputTab tab1 -WindowStyle Normal - } - Else{ - If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ - Start-ButtonProcess -Path "$envWinDir\system32\compmgmt.msc" -Parameters ("/computer:" + $WPFtxtTab1Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for: $($WPFtxtTab1Name1.Text)" -Object Tab1 -WindowStyle Normal - } - Else { - Write-OutputBox -OutputBoxMessage "Unable to remotely open [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 - } - } -} - -function Call-btnTab1_04{ - Start-ButtonProcess -Path "$envWinDir\system32\mmc.exe" -OutputTab tab1 -WindowStyle Normal -} - -function Call-btnTab1_05{ - If ($WPFtxtTab1Name1.Text -eq $envComputerName){ - Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked] for local system, change remote system and try again" -Type "ERROR: " -Object Tab1 - } - ElseIf ($Global:SelectedRunAs){ - Start-ButtonProcess -ProcessCall ps1 -File "Connect-Mstsc.ps1" -Parameters "-ComputerName $($WPFtxtTab1Name1.Text)" -OutputTab tab1 -CreateNoWindow - } - Else{ - Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab1Name1.Text) -OutputTab tab1 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab1Name1.Text)" -NeverRunAs -WindowStyle Normal - } -} - -function Call-btnTab1_06{ - -} - -# Set of 4 small buttons under left column -function Call-btnTab1_07{ - #clear Registries last used path - Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit" -Name "FindFlags" -Force -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit" -Name "LastKey" -Force -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit" -Name "View" -Force -ErrorAction SilentlyContinue - Start-ButtonProcess -Path "$envWinDir\system32\regedt32.exe" -OutputTab tab1 -WindowStyle Normal -} - -function Call-btnTab1_08{ - $CMToolkitPath = "$envProgramFilesX86\ConfigMgr 2012 Toolkit R2\ClientTools" - $ClassRootValue = (Get-ItemProperty "Registry::HKEY_CLASSES_ROOT\Log.File\shell\open\command" "(Default)" | Select-Object -ExpandProperty "(Default)" -ErrorAction SilentlyContinue).split("%1")[0].Replace('"','').Trim() - If (Test-Path $CMToolkitPath){ - Start-ButtonProcess -Path "$CMToolkitPath\cmtrace.exe" -OutputTab tab1 -WindowStyle Normal - } - ElseIf (Test-Path "$envWinDir\system32\cmtrace.exe"){ - Start-ButtonProcess -Path "$envWinDir\system32\cmtrace.exe" -OutputTab tab1 -WindowStyle Normal - } - ElseIf (Test-Path $ClassRootValue){ - Start-ButtonProcess -Path "$ClassRootValue" -OutputTab tab1 -WindowStyle Normal - } - Else{ - Start-ButtonProcess -Path "$UtilPath\cmtrace.exe" -OutputTab tab1 -WindowStyle Normal - } -} - - -function Call-btnTab1_09{ - If ($WPFtxtTab1Name1.Text -eq $envComputerName){ - Start-ButtonProcess -ProcessCall vbs -Path "BypassCAC.vbs" -OutputTab tab1 -WindowStyle Normal - } - Else{ - Start-ButtonProcess -ProcessCall vbs -Path "BypassCAC.vbs" -Parameters $WPFtxtTab1Name1.Text -WindowStyle Normal - } -} - - -function Call-btnTab1_10{ - -} - - -# Set of 4 large buttons under right column -function Call-btnTab1_11{ - $DameWarePath = "$envProgramFilesX86\DameWare Development\DameWare NT Utilities" - Start-ButtonProcess -Path "$DameWarePath\DNTU.exe" -OutputTab tab1 -WindowStyle Normal -CustomErrMsg "Unable to open [$ButtonClicked], it may not be installed" -} - -function Call-btnTab1_12{ - $DameWarePath = "$envProgramFilesX86\DameWare Development\DameWare NT Utilities" - If ($WPFtxtTab1Name1.Text -eq $envComputerName){ - Start-ButtonProcess -Path "$DameWarePath\DWRCC.exe" -OutputTab tab1 -WindowStyle Normal - } - Else{ - Start-ButtonProcess -Path "$DameWarePath\DWRCC.exe" -Parameters "-m:$($WPFtxtTab1Name1.Text) -u:$Global:runAsAccount -p:$Global:runAsPassword -x:" -CustomRunMsg "Connecting to $($WPFtxtTab1Name1.Text) with [$ButtonClicked]" -OutputTab tab1 -WindowStyle Normal - } - -} - -function Call-btnTab1_13{ - -} - -function Call-btnTab1_14{ - -} - -# Set of 12 small buttons under right column -function Call-btnTab1_15{ - $Pingtest = Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Count 4 | Select Address,IPv4Address,ResponseTime,BufferSize | out-string - Write-OutputBox -OutputBoxMessage "$($WPFtxtTab1Name1.Text) $Pingtest" -Type "PING: " -Object Tab1 - -} - -function Call-btnTab1_16{ - If ($WPFtxtTab1Name1.Text -eq $envComputerName){ - Start-ButtonProcess -ProcessCall cmd -File "systeminfo.exe" -CustomRunMsg "Retrieving [$ButtonClicked] for local system, change remote system and try again." -OutputTab tab1 -CreateNoWindow - } - Else{ - If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ - Start-ButtonProcess -ProcessCall cmd -File "systeminfo.exe" -Parameters ("/S " + $WPFtxtTab1Name1.Text) -CustomRunMsg "Retrieving [$ButtonClicked] for: $($WPFtxtTab1Name1.Text)" -Object Tab1 -WindowStyle Normal - } - Else { - Write-OutputBox -OutputBoxMessage "Unable to retrieve [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 - } - } -} - -function Call-btnTab1_17{ - #Start-ButtonProcess -ProcessCall ps1 -File "Get-SystemInfo.ps1" -WorkingDirectory "E:\Software\Scripts\AdminMenu\Scripts" -Parameters "-ComputerName PLEXSVR" -OutputTab tab1 -CreateNoWindow - Retrieve-SystemInfo -ComputerName $WPFtxtTab1Name1.Text -} - -function Call-btnTab1_18{ - If ($WPFtxtTab1Name1.Text -eq $envComputerName){ - Start-ButtonProcess -Path "$envWinDir\system32\services.msc" -CustomRunMsg "Opening [$ButtonClicked] for local system, change remote system and try again OR right click on local system in the window and select 'connect to another computer'." -OutputTab tab1 -WindowStyle Normal - } - Else{ - If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ - Start-ButtonProcess -Path "$envWinDir\system32\services.msc" -Parameters ("/computer:" + $WPFtxtTab1Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for: $($WPFtxtTab1Name1.Text)" -Object Tab1 -WindowStyle Normal - } - Else { - Write-OutputBox -OutputBoxMessage "Unable to remotely open [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 - } - } -} - -function Call-btnTab1_19{ - -} - -function Call-btnTab1_20{ - -} - -function Call-btnTab1_21{ - Get-LoggedIn -computername $WPFtxtTab1Name1.Text -Outbox Tab1 -} - -function Call-btnTab1_22{ - If ($WPFtxtTab1Name1.Text -eq $envComputerName){ - Start-ButtonProcess -Path "$envWinDir\system32\eventvwr.msc" -CustomRunMsg "Opening [$ButtonClicked] for local system, change remote system and try again OR right click on local system in the window and select 'connect to another computer'." -OutputTab tab1 -WindowStyle Normal - } - Else{ - If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ - Start-ButtonProcess -Path "$envWinDir\system32\seventvwr.msc" -Parameters ("/computer:" + $WPFtxtTab1Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for: $($WPFtxtTab1Name1.Text)" -Object Tab1 -WindowStyle Normal - } - Else { - Write-OutputBox -OutputBoxMessage "Unable to remotely open [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 - } - } - -} - -function Call-btnTab1_23{ - Run-RemoteCMD -ComputerName $WPFtxtTab1Name1.Text -Command $RemoteCommand - Write-OutputBox -OutputBoxMessage "$($WPFtxtTab1Name1.Text) >> sent Remote Command: '$RemoteCommand'" -Type "INFO: " -Object Tab1 -} - -function Call-btnTab1_24{ - Start-ButtonProcess -ProcessCall ps1 -File "Get-DiskSpaceChart.ps1" -Parameters "-ComputerName $($WPFtxtTab1Name1.Text)" -OutputTab tab1 -CreateNoWindow - <#If ($WPFtxtTab1Name1.Text -eq $envComputerName){ - Write-OutputBox -OutputBoxMessage "Retrieving [$ButtonClicked] for local system" -Type "INFO: " -Object Tab1 - Get-WmiObject -Class Win32_LogicalDisk | Out-GridView -Title "Disk Info" - } - Else{ - If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ - Write-OutputBox -OutputBoxMessage "Retrieving [$ButtonClicked] for [$($WPFtxtTab1Name1.Text)]" -Type "INFO: " -Object Tab1 - Get-WmiObject -Class Win32_LogicalDisk -ComputerName $WPFtxtTab1Name1.Text | Out-GridView -Title "Disk Info" - } - Else { - Write-OutputBox -OutputBoxMessage "Unable to retrieve [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 - } - } - #Get-DiskSpace -computername $WPFtxtTab1Name1.Text #> -} - -function Call-btnTab1_25{ - Get-InstalledSoftware -computername $WPFtxtTab1Name1.Text -Property InstallLocation,UninstallString,QuietUninstallString - #$Script = {Get-InstalledSoftware} - #$Params = @{computername= $WPFtxtTab1Name1.Text; Property = Uninstallstring} - #Start-ButtonProcess -ProcessCall ps1 -File "Invoke-Runspace.ps1" -Parameters "-AddFunction Get-InstalledSoftware -ParamStatic $Params" -WindowStyle Normal - #Invoke-Runspace -ScriptBlock $Script -ParamStatic $Params -} - -function Call-btnTab1_26{ - Start-ButtonProcess -ProcessCall ps1 -File "Remote-TaskMgr.ps1" -Parameters "-ComputerName $($WPFtxtTab1Name1.Text)" -OutputTab tab1 -CreateNoWindow - #. ($scriptRoot + "\Scripts\Remote-TaskMgr.ps1") $WPFtxtTab1Name1.Text - #Build-TskMgrForm -Remote $WPFtxtTab1Name1.Text -} - - -##*============================================= -##* TAB 1 OTHER FUNCTIONS -##*============================================= - - - - -##*============================================= -##* BUILD TAB 1 BUTTONS IF CONFIGURED -##*============================================= -$ConfigTab1_Name = $ConfigTab1.Name - -$WPFTab1.Header = $ConfigTab1_Name -$WPFlblTab1Section1.Content = $ConfigTab1.section1Label -$WPFlblTab1Section2.Content = $ConfigTab1.section2Label - - -$ConfigTab1_btns = $ConfigTab1.button - -Foreach ($button in $ConfigTab1_btns){ - - [string]$buttonID = $button.id - If ($AppOptionDebugeMode){Write-Host "Tab1: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} - - If ($buttonID -eq "01"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_01.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_01.IsEnabled = $false} Else {$WPFbtnTab1_01.IsEnabled = $true} - $WPFbtnTextTab1_01.Text = $button.Name - $WPFbtnTab1_01.Background = $button.bgcolor - $WPFbtnTab1_01.Foreground = $button.textcolor - #$WPFbtnTab1_01.Add_Click({Call-btnTab1_01}) - $WPFbtnTab1_01.add_Click({ - $ButtonClicked = $WPFbtnTextTab1_01.Text - Call-btnTab1_01 - }) - } - - If ($buttonID -eq "02"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_02.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_02.IsEnabled = $false} Else {$WPFbtnTab1_02.IsEnabled = $true} - $WPFbtnTextTab1_02.Text = $button.Name - $WPFbtnTab1_02.Background = $button.bgcolor - $WPFbtnTab1_02.Foreground = $button.textcolor - $WPFbtnTab1_02.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_02.Text - Call-btnTab1_02 - }) - } - - If ($buttonID -eq "03"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_03.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_03.IsEnabled = $false} Else {$WPFbtnTab1_03.IsEnabled = $true} - $WPFbtnTextTab1_03.Text = $button.Name - $WPFbtnTab1_03.Background = $button.bgcolor - $WPFbtnTab1_03.Foreground = $button.textcolor - $WPFbtnTab1_03.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_03.Text - Call-btnTab1_03 - }) - } - - If ($buttonID -eq "04"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_04.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_04.IsEnabled = $false} Else {$WPFbtnTab1_04.IsEnabled = $true} - $WPFbtnTextTab1_04.Text = $button.Name - $WPFbtnTab1_04.Background = $button.bgcolor - $WPFbtnTab1_04.Foreground = $button.textcolor - $WPFbtnTab1_04.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_04.Text - Call-btnTab1_04 - }) - } - - If ($buttonID -eq "05"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_05.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_05.IsEnabled = $false} Else {$WPFbtnTab1_05.IsEnabled = $true} - $WPFbtnTextTab1_05.Text = $button.Name - $WPFbtnTab1_05.Background = $button.bgcolor - $WPFbtnTab1_05.Foreground = $button.textcolor - $WPFbtnTab1_05.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_05.Text - Call-btnTab1_05 - }) - } - - If ($buttonID -eq "06"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_06.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_06.IsEnabled = $false} Else {$WPFbtnTab1_06.IsEnabled = $true} - $WPFbtnTextTab1_06.Text = $button.Name - $WPFbtnTab1_06.Background = $button.bgcolor - $WPFbtnTab1_06.Foreground = $button.textcolor - $WPFbtnTab1_06.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_06.Text - Call-btnTab1_06 - }) - } - - If ($buttonID -eq "07"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_07.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_07.IsEnabled = $false} Else {$WPFbtnTab1_07.IsEnabled = $true} - $WPFbtnTextTab1_07.Text = $button.Name - $WPFbtnTab1_07.Background = $button.bgcolor - $WPFbtnTab1_07.Foreground = $button.textcolor - $WPFbtnTab1_07.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_07.Text - Call-btnTab1_07 - }) - } - - If ($buttonID -eq "08"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_08.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_08.IsEnabled = $false} Else {$WPFbtnTab1_08.IsEnabled = $true} - $WPFbtnTextTab1_08.Text = $button.Name - $WPFbtnTab1_08.Background = $button.bgcolor - $WPFbtnTab1_08.Foreground = $button.textcolor - $WPFbtnTab1_08.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_08.Text - Call-btnTab1_08 - }) - } - - If ($buttonID -eq "09"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_09.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_09.IsEnabled = $false} Else {$WPFbtnTab1_09.IsEnabled = $true} - $WPFbtnTextTab1_09.Text = $button.Name - $WPFbtnTab1_09.Background = $button.bgcolor - $WPFbtnTab1_09.Foreground = $button.textcolor - $WPFbtnTab1_09.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_09.Text - Call-btnTab1_09 - }) - } - - If ($buttonID -eq "10"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_10.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_10.IsEnabled = $false} Else {$WPFbtnTab1_10.IsEnabled = $true} - $WPFbtnTextTab1_10.Text = $button.Name - $WPFbtnTab1_10.Background = $button.bgcolor - $WPFbtnTab1_10.Foreground = $button.textcolor - $WPFbtnTab1_10.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_10.Text - Call-btnTab1_10 - }) - } - - If ($buttonID -eq "11"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_11.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_11.IsEnabled = $false} Else {$WPFbtnTab1_11.IsEnabled = $true} - $WPFbtnTextTab1_11.Text = $button.Name - $WPFbtnTab1_11.Background = $button.bgcolor - $WPFbtnTab1_11.Foreground = $button.textcolor - $WPFbtnTab1_11.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_11.Text - Call-btnTab1_11 - }) - } - - If ($buttonID -eq "12"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_12.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_12.IsEnabled = $false} Else {$WPFbtnTab1_12.IsEnabled = $true} - $WPFbtnTextTab1_12.Text = $button.Name - $WPFbtnTab1_12.Background = $button.bgcolor - $WPFbtnTab1_12.Foreground = $button.textcolor - $WPFbtnTab1_12.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_12.Text - Call-btnTab1_12 - }) - } - - If ($buttonID -eq "13"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_13.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_13.IsEnabled = $false} Else {$WPFbtnTab1_13.IsEnabled = $true} - $WPFbtnTextTab1_13.Text = $button.Name - $WPFbtnTab1_13.Background = $button.bgcolor - $WPFbtnTab1_13.Foreground = $button.textcolor - $WPFbtnTab1_13.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_13.Text - Call-btnTab1_13 - }) - } - If ($buttonID -eq "14"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_14.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_14.IsEnabled = $false} Else {$WPFbtnTab1_14.IsEnabled = $true} - $WPFbtnTextTab1_14.Text = $button.Name - $WPFbtnTab1_14.Background = $button.bgcolor - $WPFbtnTab1_14.Foreground = $button.textcolor - $WPFbtnTab1_14.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_14.Text - Call-btnTab1_14 - }) - } - - If ($buttonID -eq "15"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_15.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_15.IsEnabled = $false} Else {$WPFbtnTab1_15.IsEnabled = $true} - $WPFbtnTextTab1_15.Text = $button.Name - $WPFbtnTab1_15.Background = $button.bgcolor - $WPFbtnTab1_15.Foreground = $button.textcolor - $WPFbtnTab1_15.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_15.Text - Call-btnTab1_15 - }) - } - - If ($buttonID -eq "16"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_16.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_16.IsEnabled = $false} Else {$WPFbtnTab1_16.IsEnabled = $true} - $WPFbtnTextTab1_16.Text = $button.Name - $WPFbtnTab1_16.Background = $button.bgcolor - $WPFbtnTab1_16.Foreground = $button.textcolor - $WPFbtnTab1_16.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_16.Text - Call-btnTab1_16 - }) - } - - If ($buttonID -eq "17"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_17.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_17.IsEnabled = $false} Else {$WPFbtnTab1_17.IsEnabled = $true} - $WPFbtnTextTab1_17.Text = $button.Name - $WPFbtnTab1_17.Background = $button.bgcolor - $WPFbtnTab1_17.Foreground = $button.textcolor - $WPFbtnTab1_17.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_17.Text - Call-btnTab1_17 - }) - } - - If ($buttonID -eq "18"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_18.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_18.IsEnabled = $false} Else {$WPFbtnTab1_18.IsEnabled = $true} - $WPFbtnTextTab1_18.Text = $button.Name - $WPFbtnTab1_18.Background = $button.bgcolor - $WPFbtnTab1_18.Foreground = $button.textcolor - $WPFbtnTab1_18.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_18.Text - Call-btnTab1_18 - }) - } - - If ($buttonID -eq "19"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_19.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_19.IsEnabled = $false} Else {$WPFbtnTab1_19.IsEnabled = $true} - $WPFbtnTextTab1_19.Text = $button.Name - $WPFbtnTab1_19.Background = $button.bgcolor - $WPFbtnTab1_19.Foreground = $button.textcolor - $WPFbtnTab1_19.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_19.Text - Call-btnTab1_19 - }) - } - - If ($buttonID -eq "20"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_20.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_20.IsEnabled = $false} Else {$WPFbtnTab1_20.IsEnabled = $true} - $WPFbtnTextTab1_20.Text = $button.Name - $WPFbtnTab1_20.Background = $button.bgcolor - $WPFbtnTab1_20.Foreground = $button.textcolor - $WPFbtnTab1_20.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_20.Text - Call-btnTab1_20 - }) - } - - If ($buttonID -eq "21"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_21.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_21.IsEnabled = $false} Else {$WPFbtnTab1_21.IsEnabled = $true} - $WPFbtnTextTab1_21.Text = $button.Name - $WPFbtnTab1_21.Background = $button.bgcolor - $WPFbtnTab1_21.Foreground = $button.textcolor - $WPFbtnTab1_21.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_21.Text - Call-btnTab1_21 - }) - } - - If ($buttonID -eq "22"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_22.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_22.IsEnabled = $false} Else {$WPFbtnTab1_22.IsEnabled = $true} - $WPFbtnTextTab1_22.Text = $button.Name - $WPFbtnTab1_22.Background = $button.bgcolor - $WPFbtnTab1_22.Foreground = $button.textcolor - $WPFbtnTab1_22.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_22.Text - Call-btnTab1_22 - }) - } - - If ($buttonID -eq "23"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_23.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_23.IsEnabled = $false} Else {$WPFbtnTab1_23.IsEnabled = $true} - $WPFbtnTextTab1_23.Text = $button.Name - $WPFbtnTab1_23.Background = $button.bgcolor - $WPFbtnTab1_23.Foreground = $button.textcolor - $WPFbtnTab1_23.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_23.Text - Call-btnTab1_23 - }) - } - - If ($buttonID -eq "24"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_24.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_24.IsEnabled = $false} Else {$WPFbtnTab1_24.IsEnabled = $true} - $WPFbtnTextTab1_24.Text = $button.Name - $WPFbtnTab1_24.Background = $button.bgcolor - $WPFbtnTab1_24.Foreground = $button.textcolor - $WPFbtnTab1_24.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_24.Text - Call-btnTab1_24 - }) - } - - If ($buttonID -eq "25"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_25.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_25.IsEnabled = $false} Else {$WPFbtnTab1_25.IsEnabled = $true} - $WPFbtnTextTab1_25.Text = $button.Name - $WPFbtnTab1_25.Background = $button.bgcolor - $WPFbtnTab1_25.Foreground = $button.textcolor - $WPFbtnTab1_25.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_25.Text - Call-btnTab1_25 - }) - } - - If ($buttonID -eq "26"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab1_26.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab1_26.IsEnabled = $false} Else {$WPFbtnTab1_26.IsEnabled = $true} - $WPFbtnTextTab1_26.Text = $button.Name - $WPFbtnTab1_26.Background = $button.bgcolor - $WPFbtnTab1_26.Foreground = $button.textcolor - $WPFbtnTab1_26.Add_Click({ - $ButtonClicked = $WPFbtnTextTab1_26.Text - Call-btnTab1_26 - }) - } -} +##*============================================= +##* LOAD TAB 2 FROM CONFIG +##*============================================= +$ConfigTab1 = $AppMenuTabandButtons.tab[0] +If ($HashNames.Keys -eq "Tab1"){ + Write-Host "Found Tab2 section in names file" -ForegroundColor Gray + $Tab1HashNames = $HashNames.Tab1 + [string]$Tab1HashList = $Tab1HashNames| out-string -stream + write-Host "`nNames found in list: `n$Tab1HashList" +} +Else{ + Write-Host "No Tab1 section found in names file" -ForegroundColor Gray +} + +$WPFtxtTab1Name1.Text = $envComputerName + +$WPFbtnTab1Name1List.add_Click({Save-ComputerList -TitleDesc "List of Workstations" -TabObject Tab1} ) +##*============================================= +##* FORM ADD CLICK FUNCTIONS +##*============================================= +<# + Examples to use (place in function): + + SIMPLE: + Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal + + SEND TO OUTPUT (PASSTHRU): + Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 + $PasstoOutput = Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String + If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} + + OPEN EXTERNAL PS1 + . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") + + USE INTGRATED FUNCTION (EASIEST) + - to log to output box in tab, use -OutputTab switch + - to identify process alias, use -Alias switch, otherwise the button name will be used + - to specify a custom run message use the -CustomRunMsg switch + - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) + - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch + + EXAMPLE (EXE): + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (EXE) with Parameters: + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab1Name1.Text) -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (PS1): + Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow + +#> +# Set of 6 large buttons under left column +function Call-btnTab1_01{ + Start-ButtonProcess -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal +} + +function Call-btnTab1_02{ + Start-ButtonProcess -Path "$envComSpec" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal +} + +function Call-btnTab1_03{ + If ($WPFtxtTab1Name1.Text -eq $envComputerName){ + Start-ButtonProcess -Path "$envWinDir\system32\compmgmt.msc" -CustomRunMsg "Opening [$ButtonClicked] for local system, change remote system and try again OR right click on local system in the Computer Managmeent window and select 'connect to another computer'." -OutputTab tab1 -WindowStyle Normal + } + Else{ + If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ + Start-ButtonProcess -Path "$envWinDir\system32\compmgmt.msc" -Parameters ("/computer:" + $WPFtxtTab1Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for: $($WPFtxtTab1Name1.Text)" -Object Tab1 -WindowStyle Normal + } + Else { + Write-OutputBox -OutputBoxMessage "Unable to remotely open [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 + } + } +} + +function Call-btnTab1_04{ + Start-ButtonProcess -Path "$envWinDir\system32\mmc.exe" -OutputTab tab1 -WindowStyle Normal +} + +function Call-btnTab1_05{ + If ($WPFtxtTab1Name1.Text -eq $envComputerName){ + Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked] for local system, change remote system and try again" -Type "ERROR: " -Object Tab1 + } + ElseIf ($Global:SelectedRunAs){ + Start-ButtonProcess -ProcessCall ps1 -File "Connect-Mstsc.ps1" -Parameters "-ComputerName $($WPFtxtTab1Name1.Text)" -OutputTab tab1 -CreateNoWindow + } + Else{ + Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab1Name1.Text) -OutputTab tab1 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab1Name1.Text)" -NeverRunAs -WindowStyle Normal + } +} + +function Call-btnTab1_06{ + +} + +# Set of 4 small buttons under left column +function Call-btnTab1_07{ + #clear Registries last used path + Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit" -Name "FindFlags" -Force -ErrorAction SilentlyContinue + Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit" -Name "LastKey" -Force -ErrorAction SilentlyContinue + Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit" -Name "View" -Force -ErrorAction SilentlyContinue + Start-ButtonProcess -Path "$envWinDir\system32\regedt32.exe" -OutputTab tab1 -WindowStyle Normal +} + +function Call-btnTab1_08{ + $CMToolkitPath = "$envProgramFilesX86\ConfigMgr 2012 Toolkit R2\ClientTools" + $ClassRootValue = (Get-ItemProperty "Registry::HKEY_CLASSES_ROOT\Log.File\shell\open\command" "(Default)" | Select-Object -ExpandProperty "(Default)" -ErrorAction SilentlyContinue).split("%1")[0].Replace('"','').Trim() + If (Test-Path $CMToolkitPath){ + Start-ButtonProcess -Path "$CMToolkitPath\cmtrace.exe" -OutputTab tab1 -WindowStyle Normal + } + ElseIf (Test-Path "$envWinDir\system32\cmtrace.exe"){ + Start-ButtonProcess -Path "$envWinDir\system32\cmtrace.exe" -OutputTab tab1 -WindowStyle Normal + } + ElseIf (Test-Path $ClassRootValue){ + Start-ButtonProcess -Path "$ClassRootValue" -OutputTab tab1 -WindowStyle Normal + } + Else{ + Start-ButtonProcess -Path "$UtilPath\cmtrace.exe" -OutputTab tab1 -WindowStyle Normal + } +} + + +function Call-btnTab1_09{ + If ($WPFtxtTab1Name1.Text -eq $envComputerName){ + Start-ButtonProcess -ProcessCall vbs -Path "BypassCAC.vbs" -OutputTab tab1 -WindowStyle Normal + } + Else{ + Start-ButtonProcess -ProcessCall vbs -Path "BypassCAC.vbs" -Parameters $WPFtxtTab1Name1.Text -WindowStyle Normal + } +} + + +function Call-btnTab1_10{ + +} + + +# Set of 4 large buttons under right column +function Call-btnTab1_11{ + $DameWarePath = "$envProgramFilesX86\DameWare Development\DameWare NT Utilities" + Start-ButtonProcess -Path "$DameWarePath\DNTU.exe" -OutputTab tab1 -WindowStyle Normal -CustomErrMsg "Unable to open [$ButtonClicked], it may not be installed" +} + +function Call-btnTab1_12{ + $DameWarePath = "$envProgramFilesX86\DameWare Development\DameWare NT Utilities" + If ($WPFtxtTab1Name1.Text -eq $envComputerName){ + Start-ButtonProcess -Path "$DameWarePath\DWRCC.exe" -OutputTab tab1 -WindowStyle Normal + } + Else{ + Start-ButtonProcess -Path "$DameWarePath\DWRCC.exe" -Parameters "-m:$($WPFtxtTab1Name1.Text) -u:$Global:runAsAccount -p:$Global:runAsPassword -x:" -CustomRunMsg "Connecting to $($WPFtxtTab1Name1.Text) with [$ButtonClicked]" -OutputTab tab1 -WindowStyle Normal + } + +} + +function Call-btnTab1_13{ + +} + +function Call-btnTab1_14{ + +} + +# Set of 12 small buttons under right column +function Call-btnTab1_15{ + $Pingtest = Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Count 4 | Select Address,IPv4Address,ResponseTime,BufferSize | out-string + Write-OutputBox -OutputBoxMessage "$($WPFtxtTab1Name1.Text) $Pingtest" -Type "PING: " -Object Tab1 + +} + +function Call-btnTab1_16{ + If ($WPFtxtTab1Name1.Text -eq $envComputerName){ + Start-ButtonProcess -ProcessCall cmd -File "systeminfo.exe" -CustomRunMsg "Retrieving [$ButtonClicked] for local system, change remote system and try again." -OutputTab tab1 -CreateNoWindow + } + Else{ + If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ + Start-ButtonProcess -ProcessCall cmd -File "systeminfo.exe" -Parameters ("/S " + $WPFtxtTab1Name1.Text) -CustomRunMsg "Retrieving [$ButtonClicked] for: $($WPFtxtTab1Name1.Text)" -Object Tab1 -WindowStyle Normal + } + Else { + Write-OutputBox -OutputBoxMessage "Unable to retrieve [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 + } + } +} + +function Call-btnTab1_17{ + #Start-ButtonProcess -ProcessCall ps1 -File "Get-SystemInfo.ps1" -WorkingDirectory "E:\Software\Scripts\AdminMenu\Scripts" -Parameters "-ComputerName PLEXSVR" -OutputTab tab1 -CreateNoWindow + Retrieve-SystemInfo -ComputerName $WPFtxtTab1Name1.Text +} + +function Call-btnTab1_18{ + If ($WPFtxtTab1Name1.Text -eq $envComputerName){ + Start-ButtonProcess -Path "$envWinDir\system32\services.msc" -CustomRunMsg "Opening [$ButtonClicked] for local system, change remote system and try again OR right click on local system in the window and select 'connect to another computer'." -OutputTab tab1 -WindowStyle Normal + } + Else{ + If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ + Start-ButtonProcess -Path "$envWinDir\system32\services.msc" -Parameters ("/computer:" + $WPFtxtTab1Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for: $($WPFtxtTab1Name1.Text)" -Object Tab1 -WindowStyle Normal + } + Else { + Write-OutputBox -OutputBoxMessage "Unable to remotely open [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 + } + } +} + +function Call-btnTab1_19{ + +} + +function Call-btnTab1_20{ + +} + +function Call-btnTab1_21{ + Get-LoggedIn -computername $WPFtxtTab1Name1.Text -Outbox Tab1 +} + +function Call-btnTab1_22{ + If ($WPFtxtTab1Name1.Text -eq $envComputerName){ + Start-ButtonProcess -Path "$envWinDir\system32\eventvwr.msc" -CustomRunMsg "Opening [$ButtonClicked] for local system, change remote system and try again OR right click on local system in the window and select 'connect to another computer'." -OutputTab tab1 -WindowStyle Normal + } + Else{ + If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ + Start-ButtonProcess -Path "$envWinDir\system32\seventvwr.msc" -Parameters ("/computer:" + $WPFtxtTab1Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for: $($WPFtxtTab1Name1.Text)" -Object Tab1 -WindowStyle Normal + } + Else { + Write-OutputBox -OutputBoxMessage "Unable to remotely open [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 + } + } + +} + +function Call-btnTab1_23{ + Run-RemoteCMD -ComputerName $WPFtxtTab1Name1.Text -Command $RemoteCommand + Write-OutputBox -OutputBoxMessage "$($WPFtxtTab1Name1.Text) >> sent Remote Command: '$RemoteCommand'" -Type "INFO: " -Object Tab1 +} + +function Call-btnTab1_24{ + Start-ButtonProcess -ProcessCall ps1 -File "Get-DiskSpaceChart.ps1" -Parameters "-ComputerName $($WPFtxtTab1Name1.Text)" -OutputTab tab1 -CreateNoWindow + <#If ($WPFtxtTab1Name1.Text -eq $envComputerName){ + Write-OutputBox -OutputBoxMessage "Retrieving [$ButtonClicked] for local system" -Type "INFO: " -Object Tab1 + Get-WmiObject -Class Win32_LogicalDisk | Out-GridView -Title "Disk Info" + } + Else{ + If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ + Write-OutputBox -OutputBoxMessage "Retrieving [$ButtonClicked] for [$($WPFtxtTab1Name1.Text)]" -Type "INFO: " -Object Tab1 + Get-WmiObject -Class Win32_LogicalDisk -ComputerName $WPFtxtTab1Name1.Text | Out-GridView -Title "Disk Info" + } + Else { + Write-OutputBox -OutputBoxMessage "Unable to retrieve [$ButtonClicked] for: $($WPFtxtTab1Name1.Text), system may be offline." -Type "ERROR: " -Object Tab1 + } + } + #Get-DiskSpace -computername $WPFtxtTab1Name1.Text #> +} + +function Call-btnTab1_25{ + Get-InstalledSoftware -computername $WPFtxtTab1Name1.Text -Property InstallLocation,UninstallString,QuietUninstallString + #$Script = {Get-InstalledSoftware} + #$Params = @{computername= $WPFtxtTab1Name1.Text; Property = Uninstallstring} + #Start-ButtonProcess -ProcessCall ps1 -File "Invoke-Runspace.ps1" -Parameters "-AddFunction Get-InstalledSoftware -ParamStatic $Params" -WindowStyle Normal + #Invoke-Runspace -ScriptBlock $Script -ParamStatic $Params +} + +function Call-btnTab1_26{ + Start-ButtonProcess -ProcessCall ps1 -File "Remote-TaskMgr.ps1" -Parameters "-ComputerName $($WPFtxtTab1Name1.Text)" -OutputTab tab1 -CreateNoWindow + #. ($scriptRoot + "\Scripts\Remote-TaskMgr.ps1") $WPFtxtTab1Name1.Text + #Build-TskMgrForm -Remote $WPFtxtTab1Name1.Text +} + + +##*============================================= +##* TAB 1 OTHER FUNCTIONS +##*============================================= + + + + +##*============================================= +##* BUILD TAB 1 BUTTONS IF CONFIGURED +##*============================================= +$ConfigTab1_Name = $ConfigTab1.Name + +$WPFTab1.Header = $ConfigTab1_Name +$WPFlblTab1Section1.Content = $ConfigTab1.section1Label +$WPFlblTab1Section2.Content = $ConfigTab1.section2Label + + +$ConfigTab1_btns = $ConfigTab1.button + +Foreach ($button in $ConfigTab1_btns){ + + [string]$buttonID = $button.id + If ($AppOptionDebugeMode){Write-Host "Tab1: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} + + If ($buttonID -eq "01"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_01.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_01.IsEnabled = $false} Else {$WPFbtnTab1_01.IsEnabled = $true} + $WPFbtnTextTab1_01.Text = $button.Name + $WPFbtnTab1_01.Background = $button.bgcolor + $WPFbtnTab1_01.Foreground = $button.textcolor + #$WPFbtnTab1_01.Add_Click({Call-btnTab1_01}) + $WPFbtnTab1_01.add_Click({ + $ButtonClicked = $WPFbtnTextTab1_01.Text + Call-btnTab1_01 + }) + } + + If ($buttonID -eq "02"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_02.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_02.IsEnabled = $false} Else {$WPFbtnTab1_02.IsEnabled = $true} + $WPFbtnTextTab1_02.Text = $button.Name + $WPFbtnTab1_02.Background = $button.bgcolor + $WPFbtnTab1_02.Foreground = $button.textcolor + $WPFbtnTab1_02.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_02.Text + Call-btnTab1_02 + }) + } + + If ($buttonID -eq "03"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_03.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_03.IsEnabled = $false} Else {$WPFbtnTab1_03.IsEnabled = $true} + $WPFbtnTextTab1_03.Text = $button.Name + $WPFbtnTab1_03.Background = $button.bgcolor + $WPFbtnTab1_03.Foreground = $button.textcolor + $WPFbtnTab1_03.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_03.Text + Call-btnTab1_03 + }) + } + + If ($buttonID -eq "04"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_04.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_04.IsEnabled = $false} Else {$WPFbtnTab1_04.IsEnabled = $true} + $WPFbtnTextTab1_04.Text = $button.Name + $WPFbtnTab1_04.Background = $button.bgcolor + $WPFbtnTab1_04.Foreground = $button.textcolor + $WPFbtnTab1_04.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_04.Text + Call-btnTab1_04 + }) + } + + If ($buttonID -eq "05"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_05.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_05.IsEnabled = $false} Else {$WPFbtnTab1_05.IsEnabled = $true} + $WPFbtnTextTab1_05.Text = $button.Name + $WPFbtnTab1_05.Background = $button.bgcolor + $WPFbtnTab1_05.Foreground = $button.textcolor + $WPFbtnTab1_05.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_05.Text + Call-btnTab1_05 + }) + } + + If ($buttonID -eq "06"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_06.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_06.IsEnabled = $false} Else {$WPFbtnTab1_06.IsEnabled = $true} + $WPFbtnTextTab1_06.Text = $button.Name + $WPFbtnTab1_06.Background = $button.bgcolor + $WPFbtnTab1_06.Foreground = $button.textcolor + $WPFbtnTab1_06.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_06.Text + Call-btnTab1_06 + }) + } + + If ($buttonID -eq "07"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_07.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_07.IsEnabled = $false} Else {$WPFbtnTab1_07.IsEnabled = $true} + $WPFbtnTextTab1_07.Text = $button.Name + $WPFbtnTab1_07.Background = $button.bgcolor + $WPFbtnTab1_07.Foreground = $button.textcolor + $WPFbtnTab1_07.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_07.Text + Call-btnTab1_07 + }) + } + + If ($buttonID -eq "08"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_08.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_08.IsEnabled = $false} Else {$WPFbtnTab1_08.IsEnabled = $true} + $WPFbtnTextTab1_08.Text = $button.Name + $WPFbtnTab1_08.Background = $button.bgcolor + $WPFbtnTab1_08.Foreground = $button.textcolor + $WPFbtnTab1_08.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_08.Text + Call-btnTab1_08 + }) + } + + If ($buttonID -eq "09"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_09.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_09.IsEnabled = $false} Else {$WPFbtnTab1_09.IsEnabled = $true} + $WPFbtnTextTab1_09.Text = $button.Name + $WPFbtnTab1_09.Background = $button.bgcolor + $WPFbtnTab1_09.Foreground = $button.textcolor + $WPFbtnTab1_09.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_09.Text + Call-btnTab1_09 + }) + } + + If ($buttonID -eq "10"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_10.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_10.IsEnabled = $false} Else {$WPFbtnTab1_10.IsEnabled = $true} + $WPFbtnTextTab1_10.Text = $button.Name + $WPFbtnTab1_10.Background = $button.bgcolor + $WPFbtnTab1_10.Foreground = $button.textcolor + $WPFbtnTab1_10.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_10.Text + Call-btnTab1_10 + }) + } + + If ($buttonID -eq "11"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_11.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_11.IsEnabled = $false} Else {$WPFbtnTab1_11.IsEnabled = $true} + $WPFbtnTextTab1_11.Text = $button.Name + $WPFbtnTab1_11.Background = $button.bgcolor + $WPFbtnTab1_11.Foreground = $button.textcolor + $WPFbtnTab1_11.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_11.Text + Call-btnTab1_11 + }) + } + + If ($buttonID -eq "12"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_12.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_12.IsEnabled = $false} Else {$WPFbtnTab1_12.IsEnabled = $true} + $WPFbtnTextTab1_12.Text = $button.Name + $WPFbtnTab1_12.Background = $button.bgcolor + $WPFbtnTab1_12.Foreground = $button.textcolor + $WPFbtnTab1_12.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_12.Text + Call-btnTab1_12 + }) + } + + If ($buttonID -eq "13"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_13.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_13.IsEnabled = $false} Else {$WPFbtnTab1_13.IsEnabled = $true} + $WPFbtnTextTab1_13.Text = $button.Name + $WPFbtnTab1_13.Background = $button.bgcolor + $WPFbtnTab1_13.Foreground = $button.textcolor + $WPFbtnTab1_13.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_13.Text + Call-btnTab1_13 + }) + } + If ($buttonID -eq "14"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_14.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_14.IsEnabled = $false} Else {$WPFbtnTab1_14.IsEnabled = $true} + $WPFbtnTextTab1_14.Text = $button.Name + $WPFbtnTab1_14.Background = $button.bgcolor + $WPFbtnTab1_14.Foreground = $button.textcolor + $WPFbtnTab1_14.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_14.Text + Call-btnTab1_14 + }) + } + + If ($buttonID -eq "15"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_15.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_15.IsEnabled = $false} Else {$WPFbtnTab1_15.IsEnabled = $true} + $WPFbtnTextTab1_15.Text = $button.Name + $WPFbtnTab1_15.Background = $button.bgcolor + $WPFbtnTab1_15.Foreground = $button.textcolor + $WPFbtnTab1_15.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_15.Text + Call-btnTab1_15 + }) + } + + If ($buttonID -eq "16"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_16.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_16.IsEnabled = $false} Else {$WPFbtnTab1_16.IsEnabled = $true} + $WPFbtnTextTab1_16.Text = $button.Name + $WPFbtnTab1_16.Background = $button.bgcolor + $WPFbtnTab1_16.Foreground = $button.textcolor + $WPFbtnTab1_16.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_16.Text + Call-btnTab1_16 + }) + } + + If ($buttonID -eq "17"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_17.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_17.IsEnabled = $false} Else {$WPFbtnTab1_17.IsEnabled = $true} + $WPFbtnTextTab1_17.Text = $button.Name + $WPFbtnTab1_17.Background = $button.bgcolor + $WPFbtnTab1_17.Foreground = $button.textcolor + $WPFbtnTab1_17.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_17.Text + Call-btnTab1_17 + }) + } + + If ($buttonID -eq "18"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_18.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_18.IsEnabled = $false} Else {$WPFbtnTab1_18.IsEnabled = $true} + $WPFbtnTextTab1_18.Text = $button.Name + $WPFbtnTab1_18.Background = $button.bgcolor + $WPFbtnTab1_18.Foreground = $button.textcolor + $WPFbtnTab1_18.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_18.Text + Call-btnTab1_18 + }) + } + + If ($buttonID -eq "19"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_19.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_19.IsEnabled = $false} Else {$WPFbtnTab1_19.IsEnabled = $true} + $WPFbtnTextTab1_19.Text = $button.Name + $WPFbtnTab1_19.Background = $button.bgcolor + $WPFbtnTab1_19.Foreground = $button.textcolor + $WPFbtnTab1_19.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_19.Text + Call-btnTab1_19 + }) + } + + If ($buttonID -eq "20"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_20.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_20.IsEnabled = $false} Else {$WPFbtnTab1_20.IsEnabled = $true} + $WPFbtnTextTab1_20.Text = $button.Name + $WPFbtnTab1_20.Background = $button.bgcolor + $WPFbtnTab1_20.Foreground = $button.textcolor + $WPFbtnTab1_20.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_20.Text + Call-btnTab1_20 + }) + } + + If ($buttonID -eq "21"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_21.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_21.IsEnabled = $false} Else {$WPFbtnTab1_21.IsEnabled = $true} + $WPFbtnTextTab1_21.Text = $button.Name + $WPFbtnTab1_21.Background = $button.bgcolor + $WPFbtnTab1_21.Foreground = $button.textcolor + $WPFbtnTab1_21.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_21.Text + Call-btnTab1_21 + }) + } + + If ($buttonID -eq "22"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_22.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_22.IsEnabled = $false} Else {$WPFbtnTab1_22.IsEnabled = $true} + $WPFbtnTextTab1_22.Text = $button.Name + $WPFbtnTab1_22.Background = $button.bgcolor + $WPFbtnTab1_22.Foreground = $button.textcolor + $WPFbtnTab1_22.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_22.Text + Call-btnTab1_22 + }) + } + + If ($buttonID -eq "23"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_23.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_23.IsEnabled = $false} Else {$WPFbtnTab1_23.IsEnabled = $true} + $WPFbtnTextTab1_23.Text = $button.Name + $WPFbtnTab1_23.Background = $button.bgcolor + $WPFbtnTab1_23.Foreground = $button.textcolor + $WPFbtnTab1_23.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_23.Text + Call-btnTab1_23 + }) + } + + If ($buttonID -eq "24"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_24.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_24.IsEnabled = $false} Else {$WPFbtnTab1_24.IsEnabled = $true} + $WPFbtnTextTab1_24.Text = $button.Name + $WPFbtnTab1_24.Background = $button.bgcolor + $WPFbtnTab1_24.Foreground = $button.textcolor + $WPFbtnTab1_24.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_24.Text + Call-btnTab1_24 + }) + } + + If ($buttonID -eq "25"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_25.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_25.IsEnabled = $false} Else {$WPFbtnTab1_25.IsEnabled = $true} + $WPFbtnTextTab1_25.Text = $button.Name + $WPFbtnTab1_25.Background = $button.bgcolor + $WPFbtnTab1_25.Foreground = $button.textcolor + $WPFbtnTab1_25.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_25.Text + Call-btnTab1_25 + }) + } + + If ($buttonID -eq "26"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab1_26.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab1_26.IsEnabled = $false} Else {$WPFbtnTab1_26.IsEnabled = $true} + $WPFbtnTextTab1_26.Text = $button.Name + $WPFbtnTab1_26.Background = $button.bgcolor + $WPFbtnTab1_26.Foreground = $button.textcolor + $WPFbtnTab1_26.Add_Click({ + $ButtonClicked = $WPFbtnTextTab1_26.Text + Call-btnTab1_26 + }) + } +} diff --git a/App/Extensions/TabControl/AdminMenu-Tab2.ps1 b/Extensions/TabControl/AdminMenu-Tab2.ps1 similarity index 96% rename from App/Extensions/TabControl/AdminMenu-Tab2.ps1 rename to Extensions/TabControl/AdminMenu-Tab2.ps1 index 6db4e5b..531dbd4 100644 --- a/App/Extensions/TabControl/AdminMenu-Tab2.ps1 +++ b/Extensions/TabControl/AdminMenu-Tab2.ps1 @@ -1,595 +1,595 @@ -##*============================================= -##* LOAD TAB 2 FROM CONFIG -##*============================================= -$ConfigTab2 = $AppMenuTabandButtons.tab[1] -If ($HashNames.Keys -eq "Tab2"){ - Write-Host "Found Tab2 section in Names File" -ForegroundColor Gray - $Tab2HashNames = $HashNames.Tab2 - [string]$Tab2HashList = $Tab2HashNames| out-string -stream - write-Host "`nNames found in list: `n$Tab2HashList" -} -Else{ - Write-Host "No Tab2 section found in names file" -ForegroundColor Gray -} - -If($IsMachinePartOfDomain){$WPFtxtTab2Name1.Text = $envMachineADDomain}Else{$WPFtxtTab2Name1.Text = $envComputerName} - -$WPFbtnTab2Name2List.add_Click({Save-ComputerList -TitleDesc "List of Domain Controllers" -TabObject Tab2}) -##*============================================= -##* FORM ADD CLICK FUNCTIONS -##*============================================= -<# - Examples to use (place in function): - - SIMPLE: - Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal - - SEND TO OUTPUT (PASSTHRU): - Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 - $PasstoOutput = Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String - If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} - - OPEN EXTERNAL PS1 - . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") - - USE INTGRATED FUNCTION (EASIEST) - - to log to output box in tab, use -OutputTab switch - - to identify process alias, use -Alias switch, otherwise path will be used instead - - to specify a custom run message use the -CustomRunMsg switch - - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) - - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch - - EXAMPLE (EXE): - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (EXE) with Parameters: - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (PS1): - Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow - -#> -# Set of 6 large buttons under left column -function Call-btnTab2_01{ - $ADMSC = "$envWinDir\system32\dsa.msc" - If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ - If ($WPFtxtTab2Name2.Text){ - Start-ButtonProcess -Path "$ADMSC" -Parameters ("/server=" + $WPFtxtTab2Name2.Text) -CustomRunMsg "Opening [$ButtonClicked] on DC: $($WPFtxtTab2Name2.Text)" -OutputTab Tab2 -WindowStyle Normal - } - ElseIf($WPFtxtTab2Name1.Text){ - Start-ButtonProcess -Path "$ADMSC" -Parameters ("/domain=" + $WPFtxtTab2Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for Domain: $($WPFtxtTab2Name1.Text)" -OutputTab Tab2 -WindowStyle Normal - } - Else{ - Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal - } - } - Else{ - Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 - } -} - -function Call-btnTab2_02{ - $ADMSC = "$envWinDir\system32\dssite.msc" - If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ - If ($WPFtxtTab2Name1.Text){ - Start-ButtonProcess -Path "$ADMSC" -Parameters ("/domain=" + $WPFtxtTab2Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for: $($WPFtxtTab2Name1.Text)" -OutputTab Tab2 -WindowStyle Normal - } - Else{ - Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal - } - } - Else{ - Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 - } -} - -function Call-btnTab2_03{ - $ADMSC = "$envWinDir\system32\gpmc.msc" - If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ - If ($WPFtxtTab2Name2.Text){ - Start-ButtonProcess -Path "$ADMSC" -Parameters ("/server=" + $WPFtxtTab2Name2.Text) -CustomRunMsg "Opening [$ButtonClicked] on DC: $($WPFtxtTab2Name2.Text)" -OutputTab Tab2 -WindowStyle Normal - } - ElseIf ($WPFtxtTab2Name1.Text){ - Start-ButtonProcess -Path "$ADMSC" -Parameters ("/domain=" + $WPFtxtTab2Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for Domain: $($WPFtxtTab2Name1.Text)" -OutputTab Tab2 -WindowStyle Normal - } - Else{ - Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal - } - } - Else{ - Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 - } -} - -function Call-btnTab2_04{ - -} - -function Call-btnTab2_05{ - -} - -function Call-btnTab2_06{ - -} - -# Set of 4 small buttons under left column -function Call-btnTab2_07{ - -} - -function Call-btnTab2_08{ - $ADMSC = "$envWinDir\system32\dnsmgmt.msc" - If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ - If ($WPFtxtTab2Name2.Text){ - Start-ButtonProcess -Path "$ADMSC" -Parameters ("/ComputerName " + $WPFtxtTab2Name2.Text) -CustomRunMsg "Opening [$ButtonClicked] on DNS Server: $($WPFtxtTab2Name2.Text)" -OutputTab Tab2 -WindowStyle Normal - } - ElseIf ($WPFtxtTab2Name1.Text){ - Start-ButtonProcess -Path "$ADMSC" -Parameters ("/ComputerName " + $WPFtxtTab2Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for Domain: $($WPFtxtTab2Name1.Text)" -OutputTab Tab2 -WindowStyle Normal - } - Else{ - Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal - } - } - Else{ - Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 - } -} - - -function Call-btnTab2_09{ - $ADMSC = "$envWinDir\system32\dhcpmgmt.msc" - If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ - If ($WPFtxtTab2Name2.Text){ - Start-ButtonProcess -Path "$ADMSC" -Parameters ("/ComputerName " + $WPFtxtTab2Name2.Text) -CustomRunMsg "Opening [$ButtonClicked] on DHCP Server: $($WPFtxtTab2Name2.Text)" -OutputTab Tab2 -WindowStyle Normal - } - Else{ - Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal - } - } - Else{ - Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 - } -} - - -function Call-btnTab2_10{ - -} - - -# Set of 4 large buttons under right columnl -function Call-btnTab2_11{ - Start-ButtonProcess -ProcessCall module -Path ActiveDirectory -OutputTab Tab2 -WindowStyle Normal -} - -function Call-btnTab2_12{ -} - -function Call-btnTab2_13{ - -} - -function Call-btnTab2_14{ - -} - -# Set of 12 small buttons under right column -function Call-btnTab2_15{ - Start-ButtonProcess -Path "$envWinDir\system32\ServerManager.exe" -OutputTab Tab2 -WindowStyle Normal -} - -function Call-btnTab2_16{ - -} - -function Call-btnTab2_17{ - -} - -function Call-btnTab2_18{ - If ($Global:SelectedRunAs){ - Start-ButtonProcess -ProcessCall ps1 -File "Connect-Mstsc.ps1" -Parameters "-ComputerName $($WPFtxtTab2Name2.Text)" -OutputTab tab2 -CreateNoWindow - } - Else{ - Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab2Name2.Text) -OutputTab tab2 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab2Name2.Text)" -NeverRunAs -WindowStyle Normal - } -} - -function Call-btnTab2_19{ -} - -function Call-btnTab2_20{ - -} - -function Call-btnTab2_21{ - -} - -function Call-btnTab2_22{ - -} - - -function Call-btnTab2_23{ - -} - -function Call-btnTab2_24{ - -} - -function Call-btnTab2_25{ - -} - -function Call-btnTab2_26{ - -} - - -##*============================================= -##* TAB 2 FUNCTIONS -##*============================================= - - - - -##*============================================= -##* BUILD TAB 2 BUTTONS IF CONFIGURED -##*============================================= -$ConfigTab2_Name = $ConfigTab2.Name - -$WPFTab2.Header = $ConfigTab2_Name -$WPFlblTab2Section1.Content = $ConfigTab2.section1Label -$WPFlblTab2Section2.Content = $ConfigTab2.section2Label - -$ConfigTab2_btns = $ConfigTab2.button - - -Foreach ($button in $ConfigTab2_btns){ - - [string]$buttonID = $button.id - If ($AppOptionDebugeMode){Write-Host "Tab2: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} - - If ($buttonID -eq "01"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_01.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_01.IsEnabled = $false} Else {$WPFbtnTab2_01.IsEnabled = $true} - $WPFbtnTextTab2_01.Text = $button.Name - $WPFbtnTab2_01.Background = $button.bgcolor - $WPFbtnTab2_01.Foreground = $button.textcolor - #$WPFbtnTab2_01.Add_Click({Call-btnTab2_01}) - $WPFbtnTab2_01.add_Click({ - $ButtonClicked = $WPFbtnTextTab2_01.Text - Call-btnTab2_01 - }) - } - - If ($buttonID -eq "02"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_02.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_02.IsEnabled = $false} Else {$WPFbtnTab2_02.IsEnabled = $true} - $WPFbtnTextTab2_02.Text = $button.Name - $WPFbtnTab2_02.Background = $button.bgcolor - $WPFbtnTab2_02.Foreground = $button.textcolor - $WPFbtnTab2_02.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_02.Text - Call-btnTab2_02 - }) - } - - If ($buttonID -eq "03"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_03.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_03.IsEnabled = $false} Else {$WPFbtnTab2_03.IsEnabled = $true} - $WPFbtnTextTab2_03.Text = $button.Name - $WPFbtnTab2_03.Background = $button.bgcolor - $WPFbtnTab2_03.Foreground = $button.textcolor - $WPFbtnTab2_03.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_03.Text - Call-btnTab2_03 - }) - } - - If ($buttonID -eq "04"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_04.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_04.IsEnabled = $false} Else {$WPFbtnTab2_04.IsEnabled = $true} - $WPFbtnTextTab2_04.Text = $button.Name - $WPFbtnTab2_04.Background = $button.bgcolor - $WPFbtnTab2_04.Foreground = $button.textcolor - $WPFbtnTab2_04.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_04.Text - Call-btnTab2_04 - }) - } - - If ($buttonID -eq "05"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_05.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_05.IsEnabled = $false} Else {$WPFbtnTab2_05.IsEnabled = $true} - $WPFbtnTextTab2_05.Text = $button.Name - $WPFbtnTab2_05.Background = $button.bgcolor - $WPFbtnTab2_05.Foreground = $button.textcolor - $WPFbtnTab2_05.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_05.Text - Call-btnTab2_05 - }) - } - - If ($buttonID -eq "06"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_06.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_06.IsEnabled = $false} Else {$WPFbtnTab2_06.IsEnabled = $true} - $WPFbtnTextTab2_06.Text = $button.Name - $WPFbtnTab2_06.Background = $button.bgcolor - $WPFbtnTab2_06.Foreground = $button.textcolor - $WPFbtnTab2_06.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_06.Text - Call-btnTab2_06 - }) - } - - If ($buttonID -eq "07"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_07.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_07.IsEnabled = $false} Else {$WPFbtnTab2_07.IsEnabled = $true} - $WPFbtnTextTab2_07.Text = $button.Name - $WPFbtnTab2_07.Background = $button.bgcolor - $WPFbtnTab2_07.Foreground = $button.textcolor - $WPFbtnTab2_07.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_07.Text - Call-btnTab2_07 - }) - } - - If ($buttonID -eq "08"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_08.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_08.IsEnabled = $false} Else {$WPFbtnTab2_08.IsEnabled = $true} - $WPFbtnTextTab2_08.Text = $button.Name - $WPFbtnTab2_08.Background = $button.bgcolor - $WPFbtnTab2_08.Foreground = $button.textcolor - $WPFbtnTab2_08.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_08.Text - Call-btnTab2_08 - }) - } - - If ($buttonID -eq "09"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_09.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_09.IsEnabled = $false} Else {$WPFbtnTab2_09.IsEnabled = $true} - $WPFbtnTextTab2_09.Text = $button.Name - $WPFbtnTab2_09.Background = $button.bgcolor - $WPFbtnTab2_09.Foreground = $button.textcolor - $WPFbtnTab2_09.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_09.Text - Call-btnTab2_09 - }) - } - - If ($buttonID -eq "10"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_10.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_10.IsEnabled = $false} Else {$WPFbtnTab2_10.IsEnabled = $true} - $WPFbtnTextTab2_10.Text = $button.Name - $WPFbtnTab2_10.Background = $button.bgcolor - $WPFbtnTab2_10.Foreground = $button.textcolor - $WPFbtnTab2_10.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_10.Text - Call-btnTab2_10 - }) - } - - If ($buttonID -eq "11"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_11.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_11.IsEnabled = $false} Else {$WPFbtnTab2_11.IsEnabled = $true} - $WPFbtnTextTab2_11.Text = $button.Name - $WPFbtnTab2_11.Background = $button.bgcolor - $WPFbtnTab2_11.Foreground = $button.textcolor - $WPFbtnTab2_11.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_11.Text - Call-btnTab2_11 - }) - } - - If ($buttonID -eq "12"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_12.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_12.IsEnabled = $false} Else {$WPFbtnTab2_12.IsEnabled = $true} - $WPFbtnTextTab2_12.Text = $button.Name - $WPFbtnTab2_12.Background = $button.bgcolor - $WPFbtnTab2_12.Foreground = $button.textcolor - $WPFbtnTab2_12.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_12.Text - Call-btnTab2_12 - }) - } - - If ($buttonID -eq "13"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_13.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_13.IsEnabled = $false} Else {$WPFbtnTab2_13.IsEnabled = $true} - $WPFbtnTextTab2_13.Text = $button.Name - $WPFbtnTab2_13.Background = $button.bgcolor - $WPFbtnTab2_13.Foreground = $button.textcolor - $WPFbtnTab2_13.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_13.Text - Call-btnTab2_13 - }) - } - If ($buttonID -eq "14"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_14.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_14.IsEnabled = $false} Else {$WPFbtnTab2_14.IsEnabled = $true} - $WPFbtnTextTab2_14.Text = $button.Name - $WPFbtnTab2_14.Background = $button.bgcolor - $WPFbtnTab2_14.Foreground = $button.textcolor - $WPFbtnTab2_14.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_14.Text - Call-btnTab2_14 - }) - } - - If ($buttonID -eq "15"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_15.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_15.IsEnabled = $false} Else {$WPFbtnTab2_15.IsEnabled = $true} - $WPFbtnTextTab2_15.Text = $button.Name - $WPFbtnTab2_15.Background = $button.bgcolor - $WPFbtnTab2_15.Foreground = $button.textcolor - $WPFbtnTab2_15.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_15.Text - Call-btnTab2_15 - }) - } - - If ($buttonID -eq "16"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_16.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_16.IsEnabled = $false} Else {$WPFbtnTab2_16.IsEnabled = $true} - $WPFbtnTextTab2_16.Text = $button.Name - $WPFbtnTab2_16.Background = $button.bgcolor - $WPFbtnTab2_16.Foreground = $button.textcolor - $WPFbtnTab2_16.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_16.Text - Call-btnTab2_16 - }) - } - - If ($buttonID -eq "17"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_17.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_17.IsEnabled = $false} Else {$WPFbtnTab2_17.IsEnabled = $true} - $WPFbtnTextTab2_17.Text = $button.Name - $WPFbtnTab2_17.Background = $button.bgcolor - $WPFbtnTab2_17.Foreground = $button.textcolor - $WPFbtnTab2_17.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_17.Text - Call-btnTab2_17 - }) - } - - If ($buttonID -eq "18"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_18.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_18.IsEnabled = $false} Else {$WPFbtnTab2_18.IsEnabled = $true} - $WPFbtnTextTab2_18.Text = $button.Name - $WPFbtnTab2_18.Background = $button.bgcolor - $WPFbtnTab2_18.Foreground = $button.textcolor - $WPFbtnTab2_18.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_18.Text - Call-btnTab2_18 - }) - } - - If ($buttonID -eq "19"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_19.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_19.IsEnabled = $false} Else {$WPFbtnTab2_19.IsEnabled = $true} - $WPFbtnTextTab2_19.Text = $button.Name - $WPFbtnTab2_19.Background = $button.bgcolor - $WPFbtnTab2_19.Foreground = $button.textcolor - $WPFbtnTab2_19.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_19.Text - Call-btnTab2_19 - }) - } - - If ($buttonID -eq "20"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_20.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_20.IsEnabled = $false} Else {$WPFbtnTab2_20.IsEnabled = $true} - $WPFbtnTextTab2_20.Text = $button.Name - $WPFbtnTab2_20.Background = $button.bgcolor - $WPFbtnTab2_20.Foreground = $button.textcolor - $WPFbtnTab2_20.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_20.Text - Call-btnTab2_20 - }) - } - - If ($buttonID -eq "21"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_21.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_21.IsEnabled = $false} Else {$WPFbtnTab2_21.IsEnabled = $true} - $WPFbtnTextTab2_21.Text = $button.Name - $WPFbtnTab2_21.Background = $button.bgcolor - $WPFbtnTab2_21.Foreground = $button.textcolor - $WPFbtnTab2_21.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_21.Text - Call-btnTab2_21 - }) - } - - If ($buttonID -eq "22"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_22.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_22.IsEnabled = $false} Else {$WPFbtnTab2_22.IsEnabled = $true} - $WPFbtnTextTab2_22.Text = $button.Name - $WPFbtnTab2_22.Background = $button.bgcolor - $WPFbtnTab2_22.Foreground = $button.textcolor - $WPFbtnTab2_22.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_22.Text - Call-btnTab2_22 - }) - } - - If ($buttonID -eq "23"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_23.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_23.IsEnabled = $false} Else {$WPFbtnTab2_23.IsEnabled = $true} - $WPFbtnTextTab2_23.Text = $button.Name - $WPFbtnTab2_23.Background = $button.bgcolor - $WPFbtnTab2_23.Foreground = $button.textcolor - $WPFbtnTab2_23.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_23.Text - Call-btnTab2_23 - }) - } - - If ($buttonID -eq "24"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_24.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_24.IsEnabled = $false} Else {$WPFbtnTab2_24.IsEnabled = $true} - $WPFbtnTextTab2_24.Text = $button.Name - $WPFbtnTab2_24.Background = $button.bgcolor - $WPFbtnTab2_24.Foreground = $button.textcolor - $WPFbtnTab2_24.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_24.Text - Call-btnTab2_24 - }) - } - - If ($buttonID -eq "25"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_25.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_25.IsEnabled = $false} Else {$WPFbtnTab2_25.IsEnabled = $true} - $WPFbtnTextTab2_25.Text = $button.Name - $WPFbtnTab2_25.Background = $button.bgcolor - $WPFbtnTab2_25.Foreground = $button.textcolor - $WPFbtnTab2_25.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_25.Text - Call-btnTab2_25 - }) - } - - If ($buttonID -eq "26"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab2_26.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab2_26.IsEnabled = $false} Else {$WPFbtnTab2_26.IsEnabled = $true} - $WPFbtnTextTab2_26.Text = $button.Name - $WPFbtnTab2_26.Background = $button.bgcolor - $WPFbtnTab2_26.Foreground = $button.textcolor - $WPFbtnTab2_26.Add_Click({ - $ButtonClicked = $WPFbtnTextTab2_26.Text - Call-btnTab2_26 - }) - } - -} +##*============================================= +##* LOAD TAB 2 FROM CONFIG +##*============================================= +$ConfigTab2 = $AppMenuTabandButtons.tab[1] +If ($HashNames.Keys -eq "Tab2"){ + Write-Host "Found Tab2 section in Names File" -ForegroundColor Gray + $Tab2HashNames = $HashNames.Tab2 + [string]$Tab2HashList = $Tab2HashNames| out-string -stream + write-Host "`nNames found in list: `n$Tab2HashList" +} +Else{ + Write-Host "No Tab2 section found in names file" -ForegroundColor Gray +} + +If($IsMachinePartOfDomain){$WPFtxtTab2Name1.Text = $envMachineADDomain}Else{$WPFtxtTab2Name1.Text = $envComputerName} + +$WPFbtnTab2Name2List.add_Click({Save-ComputerList -TitleDesc "List of Domain Controllers" -TabObject Tab2}) +##*============================================= +##* FORM ADD CLICK FUNCTIONS +##*============================================= +<# + Examples to use (place in function): + + SIMPLE: + Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal + + SEND TO OUTPUT (PASSTHRU): + Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 + $PasstoOutput = Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String + If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} + + OPEN EXTERNAL PS1 + . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") + + USE INTGRATED FUNCTION (EASIEST) + - to log to output box in tab, use -OutputTab switch + - to identify process alias, use -Alias switch, otherwise path will be used instead + - to specify a custom run message use the -CustomRunMsg switch + - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) + - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch + + EXAMPLE (EXE): + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (EXE) with Parameters: + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (PS1): + Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow + +#> +# Set of 6 large buttons under left column +function Call-btnTab2_01{ + $ADMSC = "$envWinDir\system32\dsa.msc" + If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ + If ($WPFtxtTab2Name2.Text){ + Start-ButtonProcess -Path "$ADMSC" -Parameters ("/server=" + $WPFtxtTab2Name2.Text) -CustomRunMsg "Opening [$ButtonClicked] on DC: $($WPFtxtTab2Name2.Text)" -OutputTab Tab2 -WindowStyle Normal + } + ElseIf($WPFtxtTab2Name1.Text){ + Start-ButtonProcess -Path "$ADMSC" -Parameters ("/domain=" + $WPFtxtTab2Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for Domain: $($WPFtxtTab2Name1.Text)" -OutputTab Tab2 -WindowStyle Normal + } + Else{ + Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal + } + } + Else{ + Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 + } +} + +function Call-btnTab2_02{ + $ADMSC = "$envWinDir\system32\dssite.msc" + If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ + If ($WPFtxtTab2Name1.Text){ + Start-ButtonProcess -Path "$ADMSC" -Parameters ("/domain=" + $WPFtxtTab2Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for: $($WPFtxtTab2Name1.Text)" -OutputTab Tab2 -WindowStyle Normal + } + Else{ + Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal + } + } + Else{ + Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 + } +} + +function Call-btnTab2_03{ + $ADMSC = "$envWinDir\system32\gpmc.msc" + If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ + If ($WPFtxtTab2Name2.Text){ + Start-ButtonProcess -Path "$ADMSC" -Parameters ("/server=" + $WPFtxtTab2Name2.Text) -CustomRunMsg "Opening [$ButtonClicked] on DC: $($WPFtxtTab2Name2.Text)" -OutputTab Tab2 -WindowStyle Normal + } + ElseIf ($WPFtxtTab2Name1.Text){ + Start-ButtonProcess -Path "$ADMSC" -Parameters ("/domain=" + $WPFtxtTab2Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for Domain: $($WPFtxtTab2Name1.Text)" -OutputTab Tab2 -WindowStyle Normal + } + Else{ + Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal + } + } + Else{ + Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 + } +} + +function Call-btnTab2_04{ + +} + +function Call-btnTab2_05{ + +} + +function Call-btnTab2_06{ + +} + +# Set of 4 small buttons under left column +function Call-btnTab2_07{ + +} + +function Call-btnTab2_08{ + $ADMSC = "$envWinDir\system32\dnsmgmt.msc" + If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ + If ($WPFtxtTab2Name2.Text){ + Start-ButtonProcess -Path "$ADMSC" -Parameters ("/ComputerName " + $WPFtxtTab2Name2.Text) -CustomRunMsg "Opening [$ButtonClicked] on DNS Server: $($WPFtxtTab2Name2.Text)" -OutputTab Tab2 -WindowStyle Normal + } + ElseIf ($WPFtxtTab2Name1.Text){ + Start-ButtonProcess -Path "$ADMSC" -Parameters ("/ComputerName " + $WPFtxtTab2Name1.Text) -CustomRunMsg "Opening [$ButtonClicked] for Domain: $($WPFtxtTab2Name1.Text)" -OutputTab Tab2 -WindowStyle Normal + } + Else{ + Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal + } + } + Else{ + Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 + } +} + + +function Call-btnTab2_09{ + $ADMSC = "$envWinDir\system32\dhcpmgmt.msc" + If (($AppOptionRSATCheck) -and ($WPFtxtRSAT.Text -eq 'Yes') -or (!$AppOptionRSATCheck)){ + If ($WPFtxtTab2Name2.Text){ + Start-ButtonProcess -Path "$ADMSC" -Parameters ("/ComputerName " + $WPFtxtTab2Name2.Text) -CustomRunMsg "Opening [$ButtonClicked] on DHCP Server: $($WPFtxtTab2Name2.Text)" -OutputTab Tab2 -WindowStyle Normal + } + Else{ + Start-ButtonProcess -Path "$ADMSC" -CustomRunMsg "Opening [$ButtonClicked]" -OutputTab Tab2 -WindowStyle Normal + } + } + Else{ + Write-OutputBox -OutputBoxMessage "Unable to open [$ButtonClicked], RSAT is not detected or may not be installed" -Type "ERROR: " -Object Tab2 + } +} + + +function Call-btnTab2_10{ + +} + + +# Set of 4 large buttons under right columnl +function Call-btnTab2_11{ + Start-ButtonProcess -ProcessCall module -Path ActiveDirectory -OutputTab Tab2 -WindowStyle Normal +} + +function Call-btnTab2_12{ +} + +function Call-btnTab2_13{ + +} + +function Call-btnTab2_14{ + +} + +# Set of 12 small buttons under right column +function Call-btnTab2_15{ + Start-ButtonProcess -Path "$envWinDir\system32\ServerManager.exe" -OutputTab Tab2 -WindowStyle Normal +} + +function Call-btnTab2_16{ + +} + +function Call-btnTab2_17{ + +} + +function Call-btnTab2_18{ + If ($Global:SelectedRunAs){ + Start-ButtonProcess -ProcessCall ps1 -File "Connect-Mstsc.ps1" -Parameters "-ComputerName $($WPFtxtTab2Name2.Text)" -OutputTab tab2 -CreateNoWindow + } + Else{ + Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab2Name2.Text) -OutputTab tab2 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab2Name2.Text)" -NeverRunAs -WindowStyle Normal + } +} + +function Call-btnTab2_19{ +} + +function Call-btnTab2_20{ + +} + +function Call-btnTab2_21{ + +} + +function Call-btnTab2_22{ + +} + + +function Call-btnTab2_23{ + +} + +function Call-btnTab2_24{ + +} + +function Call-btnTab2_25{ + +} + +function Call-btnTab2_26{ + +} + + +##*============================================= +##* TAB 2 FUNCTIONS +##*============================================= + + + + +##*============================================= +##* BUILD TAB 2 BUTTONS IF CONFIGURED +##*============================================= +$ConfigTab2_Name = $ConfigTab2.Name + +$WPFTab2.Header = $ConfigTab2_Name +$WPFlblTab2Section1.Content = $ConfigTab2.section1Label +$WPFlblTab2Section2.Content = $ConfigTab2.section2Label + +$ConfigTab2_btns = $ConfigTab2.button + + +Foreach ($button in $ConfigTab2_btns){ + + [string]$buttonID = $button.id + If ($AppOptionDebugeMode){Write-Host "Tab2: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} + + If ($buttonID -eq "01"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_01.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_01.IsEnabled = $false} Else {$WPFbtnTab2_01.IsEnabled = $true} + $WPFbtnTextTab2_01.Text = $button.Name + $WPFbtnTab2_01.Background = $button.bgcolor + $WPFbtnTab2_01.Foreground = $button.textcolor + #$WPFbtnTab2_01.Add_Click({Call-btnTab2_01}) + $WPFbtnTab2_01.add_Click({ + $ButtonClicked = $WPFbtnTextTab2_01.Text + Call-btnTab2_01 + }) + } + + If ($buttonID -eq "02"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_02.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_02.IsEnabled = $false} Else {$WPFbtnTab2_02.IsEnabled = $true} + $WPFbtnTextTab2_02.Text = $button.Name + $WPFbtnTab2_02.Background = $button.bgcolor + $WPFbtnTab2_02.Foreground = $button.textcolor + $WPFbtnTab2_02.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_02.Text + Call-btnTab2_02 + }) + } + + If ($buttonID -eq "03"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_03.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_03.IsEnabled = $false} Else {$WPFbtnTab2_03.IsEnabled = $true} + $WPFbtnTextTab2_03.Text = $button.Name + $WPFbtnTab2_03.Background = $button.bgcolor + $WPFbtnTab2_03.Foreground = $button.textcolor + $WPFbtnTab2_03.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_03.Text + Call-btnTab2_03 + }) + } + + If ($buttonID -eq "04"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_04.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_04.IsEnabled = $false} Else {$WPFbtnTab2_04.IsEnabled = $true} + $WPFbtnTextTab2_04.Text = $button.Name + $WPFbtnTab2_04.Background = $button.bgcolor + $WPFbtnTab2_04.Foreground = $button.textcolor + $WPFbtnTab2_04.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_04.Text + Call-btnTab2_04 + }) + } + + If ($buttonID -eq "05"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_05.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_05.IsEnabled = $false} Else {$WPFbtnTab2_05.IsEnabled = $true} + $WPFbtnTextTab2_05.Text = $button.Name + $WPFbtnTab2_05.Background = $button.bgcolor + $WPFbtnTab2_05.Foreground = $button.textcolor + $WPFbtnTab2_05.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_05.Text + Call-btnTab2_05 + }) + } + + If ($buttonID -eq "06"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_06.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_06.IsEnabled = $false} Else {$WPFbtnTab2_06.IsEnabled = $true} + $WPFbtnTextTab2_06.Text = $button.Name + $WPFbtnTab2_06.Background = $button.bgcolor + $WPFbtnTab2_06.Foreground = $button.textcolor + $WPFbtnTab2_06.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_06.Text + Call-btnTab2_06 + }) + } + + If ($buttonID -eq "07"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_07.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_07.IsEnabled = $false} Else {$WPFbtnTab2_07.IsEnabled = $true} + $WPFbtnTextTab2_07.Text = $button.Name + $WPFbtnTab2_07.Background = $button.bgcolor + $WPFbtnTab2_07.Foreground = $button.textcolor + $WPFbtnTab2_07.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_07.Text + Call-btnTab2_07 + }) + } + + If ($buttonID -eq "08"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_08.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_08.IsEnabled = $false} Else {$WPFbtnTab2_08.IsEnabled = $true} + $WPFbtnTextTab2_08.Text = $button.Name + $WPFbtnTab2_08.Background = $button.bgcolor + $WPFbtnTab2_08.Foreground = $button.textcolor + $WPFbtnTab2_08.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_08.Text + Call-btnTab2_08 + }) + } + + If ($buttonID -eq "09"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_09.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_09.IsEnabled = $false} Else {$WPFbtnTab2_09.IsEnabled = $true} + $WPFbtnTextTab2_09.Text = $button.Name + $WPFbtnTab2_09.Background = $button.bgcolor + $WPFbtnTab2_09.Foreground = $button.textcolor + $WPFbtnTab2_09.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_09.Text + Call-btnTab2_09 + }) + } + + If ($buttonID -eq "10"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_10.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_10.IsEnabled = $false} Else {$WPFbtnTab2_10.IsEnabled = $true} + $WPFbtnTextTab2_10.Text = $button.Name + $WPFbtnTab2_10.Background = $button.bgcolor + $WPFbtnTab2_10.Foreground = $button.textcolor + $WPFbtnTab2_10.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_10.Text + Call-btnTab2_10 + }) + } + + If ($buttonID -eq "11"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_11.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_11.IsEnabled = $false} Else {$WPFbtnTab2_11.IsEnabled = $true} + $WPFbtnTextTab2_11.Text = $button.Name + $WPFbtnTab2_11.Background = $button.bgcolor + $WPFbtnTab2_11.Foreground = $button.textcolor + $WPFbtnTab2_11.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_11.Text + Call-btnTab2_11 + }) + } + + If ($buttonID -eq "12"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_12.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_12.IsEnabled = $false} Else {$WPFbtnTab2_12.IsEnabled = $true} + $WPFbtnTextTab2_12.Text = $button.Name + $WPFbtnTab2_12.Background = $button.bgcolor + $WPFbtnTab2_12.Foreground = $button.textcolor + $WPFbtnTab2_12.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_12.Text + Call-btnTab2_12 + }) + } + + If ($buttonID -eq "13"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_13.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_13.IsEnabled = $false} Else {$WPFbtnTab2_13.IsEnabled = $true} + $WPFbtnTextTab2_13.Text = $button.Name + $WPFbtnTab2_13.Background = $button.bgcolor + $WPFbtnTab2_13.Foreground = $button.textcolor + $WPFbtnTab2_13.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_13.Text + Call-btnTab2_13 + }) + } + If ($buttonID -eq "14"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_14.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_14.IsEnabled = $false} Else {$WPFbtnTab2_14.IsEnabled = $true} + $WPFbtnTextTab2_14.Text = $button.Name + $WPFbtnTab2_14.Background = $button.bgcolor + $WPFbtnTab2_14.Foreground = $button.textcolor + $WPFbtnTab2_14.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_14.Text + Call-btnTab2_14 + }) + } + + If ($buttonID -eq "15"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_15.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_15.IsEnabled = $false} Else {$WPFbtnTab2_15.IsEnabled = $true} + $WPFbtnTextTab2_15.Text = $button.Name + $WPFbtnTab2_15.Background = $button.bgcolor + $WPFbtnTab2_15.Foreground = $button.textcolor + $WPFbtnTab2_15.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_15.Text + Call-btnTab2_15 + }) + } + + If ($buttonID -eq "16"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_16.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_16.IsEnabled = $false} Else {$WPFbtnTab2_16.IsEnabled = $true} + $WPFbtnTextTab2_16.Text = $button.Name + $WPFbtnTab2_16.Background = $button.bgcolor + $WPFbtnTab2_16.Foreground = $button.textcolor + $WPFbtnTab2_16.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_16.Text + Call-btnTab2_16 + }) + } + + If ($buttonID -eq "17"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_17.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_17.IsEnabled = $false} Else {$WPFbtnTab2_17.IsEnabled = $true} + $WPFbtnTextTab2_17.Text = $button.Name + $WPFbtnTab2_17.Background = $button.bgcolor + $WPFbtnTab2_17.Foreground = $button.textcolor + $WPFbtnTab2_17.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_17.Text + Call-btnTab2_17 + }) + } + + If ($buttonID -eq "18"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_18.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_18.IsEnabled = $false} Else {$WPFbtnTab2_18.IsEnabled = $true} + $WPFbtnTextTab2_18.Text = $button.Name + $WPFbtnTab2_18.Background = $button.bgcolor + $WPFbtnTab2_18.Foreground = $button.textcolor + $WPFbtnTab2_18.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_18.Text + Call-btnTab2_18 + }) + } + + If ($buttonID -eq "19"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_19.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_19.IsEnabled = $false} Else {$WPFbtnTab2_19.IsEnabled = $true} + $WPFbtnTextTab2_19.Text = $button.Name + $WPFbtnTab2_19.Background = $button.bgcolor + $WPFbtnTab2_19.Foreground = $button.textcolor + $WPFbtnTab2_19.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_19.Text + Call-btnTab2_19 + }) + } + + If ($buttonID -eq "20"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_20.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_20.IsEnabled = $false} Else {$WPFbtnTab2_20.IsEnabled = $true} + $WPFbtnTextTab2_20.Text = $button.Name + $WPFbtnTab2_20.Background = $button.bgcolor + $WPFbtnTab2_20.Foreground = $button.textcolor + $WPFbtnTab2_20.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_20.Text + Call-btnTab2_20 + }) + } + + If ($buttonID -eq "21"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_21.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_21.IsEnabled = $false} Else {$WPFbtnTab2_21.IsEnabled = $true} + $WPFbtnTextTab2_21.Text = $button.Name + $WPFbtnTab2_21.Background = $button.bgcolor + $WPFbtnTab2_21.Foreground = $button.textcolor + $WPFbtnTab2_21.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_21.Text + Call-btnTab2_21 + }) + } + + If ($buttonID -eq "22"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_22.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_22.IsEnabled = $false} Else {$WPFbtnTab2_22.IsEnabled = $true} + $WPFbtnTextTab2_22.Text = $button.Name + $WPFbtnTab2_22.Background = $button.bgcolor + $WPFbtnTab2_22.Foreground = $button.textcolor + $WPFbtnTab2_22.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_22.Text + Call-btnTab2_22 + }) + } + + If ($buttonID -eq "23"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_23.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_23.IsEnabled = $false} Else {$WPFbtnTab2_23.IsEnabled = $true} + $WPFbtnTextTab2_23.Text = $button.Name + $WPFbtnTab2_23.Background = $button.bgcolor + $WPFbtnTab2_23.Foreground = $button.textcolor + $WPFbtnTab2_23.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_23.Text + Call-btnTab2_23 + }) + } + + If ($buttonID -eq "24"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_24.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_24.IsEnabled = $false} Else {$WPFbtnTab2_24.IsEnabled = $true} + $WPFbtnTextTab2_24.Text = $button.Name + $WPFbtnTab2_24.Background = $button.bgcolor + $WPFbtnTab2_24.Foreground = $button.textcolor + $WPFbtnTab2_24.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_24.Text + Call-btnTab2_24 + }) + } + + If ($buttonID -eq "25"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_25.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_25.IsEnabled = $false} Else {$WPFbtnTab2_25.IsEnabled = $true} + $WPFbtnTextTab2_25.Text = $button.Name + $WPFbtnTab2_25.Background = $button.bgcolor + $WPFbtnTab2_25.Foreground = $button.textcolor + $WPFbtnTab2_25.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_25.Text + Call-btnTab2_25 + }) + } + + If ($buttonID -eq "26"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab2_26.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab2_26.IsEnabled = $false} Else {$WPFbtnTab2_26.IsEnabled = $true} + $WPFbtnTextTab2_26.Text = $button.Name + $WPFbtnTab2_26.Background = $button.bgcolor + $WPFbtnTab2_26.Foreground = $button.textcolor + $WPFbtnTab2_26.Add_Click({ + $ButtonClicked = $WPFbtnTextTab2_26.Text + Call-btnTab2_26 + }) + } + +} If ($ConfigTab2.enable -eq "false"){$WPFtab2.Visibility = 'Hidden'} Else {$WPFtab2.Visibility = 'Visible'} \ No newline at end of file diff --git a/App/Extensions/TabControl/AdminMenu-Tab3.ps1 b/Extensions/TabControl/AdminMenu-Tab3.ps1 similarity index 96% rename from App/Extensions/TabControl/AdminMenu-Tab3.ps1 rename to Extensions/TabControl/AdminMenu-Tab3.ps1 index 70b1c45..6d8d9e9 100644 --- a/App/Extensions/TabControl/AdminMenu-Tab3.ps1 +++ b/Extensions/TabControl/AdminMenu-Tab3.ps1 @@ -1,531 +1,531 @@ -##*============================================= -##* LOAD TAB 3 FROM CONFIG -##*============================================= -$ConfigTab3 = $AppMenuTabandButtons.tab[2] -If ($HashNames.Keys -eq "Tab3"){ - Write-Host "Found Tab3 section in Names File" -ForegroundColor Gray - $Tab3HashNames = $HashNames.Tab3 - [string]$Tab3HashList = $Tab3HashNames| out-string -stream - write-Host "`nNames found in list: `n$Tab3HashList" -} -Else{ - Write-Host "No Tab3 section found in names file" -ForegroundColor Gray -} - -Try{$SMSSiteCode = ($([WmiClass]"ROOT\ccm:SMS_Client").getassignedsite()).sSiteCode}Catch{$SMSSiteCode = "N/A"} - -$WPFtxtTab3Name1.Text = $SMSSiteCode - -$WPFbtnTab3Name2List.add_Click({Save-ComputerList -TitleDesc "List of Sytem Center Server" -TabObject Tab3}) -##*============================================= -##* FORM ADD CLICK FUNCTIONS -##*============================================= -<# - Examples to use (place in function): - - SIMPLE: - Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal - - SEND TO OUTPUT (PASSTHRU): - Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 - $PasstoOutput = Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String - If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} - - OPEN EXTERNAL PS1 - . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") - - USE INTGRATED FUNCTION (EASIEST) - - to log to output box in tab, use -OutputTab switch - - to identify process alias, use -Alias switch, otherwise path will be used instead - - to specify a custom run message use the -CustomRunMsg switch - - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) - - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch - - EXAMPLE (EXE): - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (EXE) with Parameters: - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$env:windir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (PS1): - Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow - -#> -# Set of 6 large buttons under left column -function Call-btnTab3_01{ - $SCCM = "$($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + '\Microsoft.ConfigurationManagement.exe')" - Start-ButtonProcess -Path $SCCM -OutputTab Tab3 -WindowStyle Normal -} - -function Call-btnTab3_02{ - $DPWB = "$envProgramFiles\Microsoft Deployment Toolkit\Bin\DeploymentWorkbench.msc" - Start-ButtonProcess -Path "$DPWB" -OutputTab Tab3 -WindowStyle Normal -} - -function Call-btnTab3_03{ - $SCSM = "$envProgramFiles\Microsoft System Center 2012 R2\Service Manager\Microsoft.EnterpriseManagement.ServiceManager.UI.Console.exe" - Start-ButtonProcess -Path $SCSM -OutputTab Tab3 -WindowStyle Normal -} - -function Call-btnTab3_04{ - -} - -function Call-btnTab3_05{ - -} - -function Call-btnTab3_06{ - -} - -# Set of 4 small buttons under left column -function Call-btnTab3_07{ - Start-ButtonProcess -Path "$envProgramFiles\Microsoft DaRT\v10\DartRemoteViewer.exe" -OutputTab Tab3 -WindowStyle Normal -} - -function Call-btnTab3_08{ - -} - - -function Call-btnTab3_09{ - -} - - -function Call-btnTab3_10{ - Start-ButtonProcess -Path "C:\Program Files\SCCM Tools\SCCM Client Center\SMSCliCtrV2.exe" -OutputTab Tab3 -WindowStyle Normal -} - - -# Set of 4 large buttons under right column -function Call-btnTab3_11{ -} - -function Call-btnTab3_12{ - -} - -function Call-btnTab3_13{ - -} - -function Call-btnTab3_14{ - -} - -# Set of 12 small buttons under right column -function Call-btnTab3_15{ -} - -function Call-btnTab3_16{ - Start-ButtonProcess -Path "$envProgramFilesX86\ConfigMgr 2012 Toolkit R2\ClientTools\PolicySpy.exe" -OutputTab Tab3 -WindowStyle Normal -} - -function Call-btnTab3_17{ - Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshCAT.ps1" -WorkingScriptDirectory "PoshCAT_0.2" -OutputTab tab3 -WindowStyle Hidden -} - -function Call-btnTab3_18{ -Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab3Name2.Text) -OutputTab Tab3 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab3Name2.Text)" -NeverRunAs -WindowStyle Normal -} - -function Call-btnTab3_19{ - -} - -function Call-btnTab3_20{ - -} - -function Call-btnTab3_21{ - -} - -function Call-btnTab3_22{ - -} - -function Call-btnTab3_23{ - -} - -function Call-btnTab3_24{ - -} - - -function Call-btnTab3_25{ - -} - -function Call-btnTab3_26{ - Start-ButtonProcess -ProcessCall ps1 -File "Install-ConfigMgrPrereqsGUI_1.4.2.ps1" -OutputTab tab3 -CreateNoWindow -} - - - -##*============================================= -##* TAB 3 FUNCTIONS -##*============================================= - - - -##*============================================= -##* BUILD TAB 3 BUTTONS IF CONFIGURED -##*============================================= -$ConfigTab3_Name = $ConfigTab3.Name - -$WPFTab3.Header = $ConfigTab3_Name -$WPFlblTab3Section1.Content = $ConfigTab3.section1Label -$WPFlblTab3Section2.Content = $ConfigTab3.section2Label - -$ConfigTab3_btns = $ConfigTab3.button - - -Foreach ($button in $ConfigTab3_btns){ - - [string]$buttonID = $button.id - If ($AppOptionDebugeMode){Write-Host "Tab3: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} - - If ($buttonID -eq "01"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_01.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_01.IsEnabled = $false} Else {$WPFbtnTab3_01.IsEnabled = $true} - $WPFbtnTextTab3_01.Text = $button.Name - $WPFbtnTab3_01.Background = $button.bgcolor - $WPFbtnTab3_01.Foreground = $button.textcolor - #$WPFbtnTab3_01.Add_Click({Call-btnTab3_01}) - $WPFbtnTab3_01.add_Click({ - $ButtonClicked = $WPFbtnTextTab3_01.Text - Call-btnTab3_01 - }) - } - - If ($buttonID -eq "02"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_02.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_02.IsEnabled = $false} Else {$WPFbtnTab3_02.IsEnabled = $true} - $WPFbtnTextTab3_02.Text = $button.Name - $WPFbtnTab3_02.Background = $button.bgcolor - $WPFbtnTab3_02.Foreground = $button.textcolor - $WPFbtnTab3_02.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_02.Text - Call-btnTab3_02 - }) - } - - If ($buttonID -eq "03"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_03.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_03.IsEnabled = $false} Else {$WPFbtnTab3_03.IsEnabled = $true} - $WPFbtnTextTab3_03.Text = $button.Name - $WPFbtnTab3_03.Background = $button.bgcolor - $WPFbtnTab3_03.Foreground = $button.textcolor - $WPFbtnTab3_03.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_03.Text - Call-btnTab3_03 - }) - } - - If ($buttonID -eq "04"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_04.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_04.IsEnabled = $false} Else {$WPFbtnTab3_04.IsEnabled = $true} - $WPFbtnTextTab3_04.Text = $button.Name - $WPFbtnTab3_04.Background = $button.bgcolor - $WPFbtnTab3_04.Foreground = $button.textcolor - $WPFbtnTab3_04.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_04.Text - Call-btnTab3_04 - }) - } - - If ($buttonID -eq "05"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_05.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_05.IsEnabled = $false} Else {$WPFbtnTab3_05.IsEnabled = $true} - $WPFbtnTextTab3_05.Text = $button.Name - $WPFbtnTab3_05.Background = $button.bgcolor - $WPFbtnTab3_05.Foreground = $button.textcolor - $WPFbtnTab3_05.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_05.Text - Call-btnTab3_05 - }) - } - - If ($buttonID -eq "06"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_06.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_06.IsEnabled = $false} Else {$WPFbtnTab3_06.IsEnabled = $true} - $WPFbtnTextTab3_06.Text = $button.Name - $WPFbtnTab3_06.Background = $button.bgcolor - $WPFbtnTab3_06.Foreground = $button.textcolor - $WPFbtnTab3_06.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_06.Text - Call-btnTab3_06 - }) - } - - If ($buttonID -eq "07"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_07.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_07.IsEnabled = $false} Else {$WPFbtnTab3_07.IsEnabled = $true} - $WPFbtnTextTab3_07.Text = $button.Name - $WPFbtnTab3_07.Background = $button.bgcolor - $WPFbtnTab3_07.Foreground = $button.textcolor - $WPFbtnTab3_07.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_07.Text - Call-btnTab3_07 - }) - } - - If ($buttonID -eq "08"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_08.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_08.IsEnabled = $false} Else {$WPFbtnTab3_08.IsEnabled = $true} - $WPFbtnTextTab3_08.Text = $button.Name - $WPFbtnTab3_08.Background = $button.bgcolor - $WPFbtnTab3_08.Foreground = $button.textcolor - $WPFbtnTab3_08.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_08.Text - Call-btnTab3_08 - }) - } - - If ($buttonID -eq "09"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_09.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_09.IsEnabled = $false} Else {$WPFbtnTab3_09.IsEnabled = $true} - $WPFbtnTextTab3_09.Text = $button.Name - $WPFbtnTab3_09.Background = $button.bgcolor - $WPFbtnTab3_09.Foreground = $button.textcolor - $WPFbtnTab3_09.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_09.Text - Call-btnTab3_09 - }) - } - - If ($buttonID -eq "10"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_10.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_10.IsEnabled = $false} Else {$WPFbtnTab3_10.IsEnabled = $true} - $WPFbtnTextTab3_10.Text = $button.Name - $WPFbtnTab3_10.Background = $button.bgcolor - $WPFbtnTab3_10.Foreground = $button.textcolor - $WPFbtnTab3_10.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_10.Text - Call-btnTab3_10 - }) - } - - If ($buttonID -eq "11"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_11.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_11.IsEnabled = $false} Else {$WPFbtnTab3_11.IsEnabled = $true} - $WPFbtnTextTab3_11.Text = $button.Name - $WPFbtnTab3_11.Background = $button.bgcolor - $WPFbtnTab3_11.Foreground = $button.textcolor - $WPFbtnTab3_11.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_11.Text - Call-btnTab3_11 - }) - } - - If ($buttonID -eq "12"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_12.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_12.IsEnabled = $false} Else {$WPFbtnTab3_12.IsEnabled = $true} - $WPFbtnTextTab3_12.Text = $button.Name - $WPFbtnTab3_12.Background = $button.bgcolor - $WPFbtnTab3_12.Foreground = $button.textcolor - $WPFbtnTab3_12.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_12.Text - Call-btnTab3_12 - }) - } - - If ($buttonID -eq "13"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_13.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_13.IsEnabled = $false} Else {$WPFbtnTab3_13.IsEnabled = $true} - $WPFbtnTextTab3_13.Text = $button.Name - $WPFbtnTab3_13.Background = $button.bgcolor - $WPFbtnTab3_13.Foreground = $button.textcolor - $WPFbtnTab3_13.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_13.Text - Call-btnTab3_13 - }) - } - If ($buttonID -eq "14"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_14.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_14.IsEnabled = $false} Else {$WPFbtnTab3_14.IsEnabled = $true} - $WPFbtnTextTab3_14.Text = $button.Name - $WPFbtnTab3_14.Background = $button.bgcolor - $WPFbtnTab3_14.Foreground = $button.textcolor - $WPFbtnTab3_14.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_14.Text - Call-btnTab3_14 - }) - } - - If ($buttonID -eq "15"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_15.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_15.IsEnabled = $false} Else {$WPFbtnTab3_15.IsEnabled = $true} - $WPFbtnTextTab3_15.Text = $button.Name - $WPFbtnTab3_15.Background = $button.bgcolor - $WPFbtnTab3_15.Foreground = $button.textcolor - $WPFbtnTab3_15.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_15.Text - Call-btnTab3_15 - }) - } - - If ($buttonID -eq "16"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_16.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_16.IsEnabled = $false} Else {$WPFbtnTab3_16.IsEnabled = $true} - $WPFbtnTextTab3_16.Text = $button.Name - $WPFbtnTab3_16.Background = $button.bgcolor - $WPFbtnTab3_16.Foreground = $button.textcolor - $WPFbtnTab3_16.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_16.Text - Call-btnTab3_16 - }) - } - - If ($buttonID -eq "17"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_17.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_17.IsEnabled = $false} Else {$WPFbtnTab3_17.IsEnabled = $true} - $WPFbtnTextTab3_17.Text = $button.Name - $WPFbtnTab3_17.Background = $button.bgcolor - $WPFbtnTab3_17.Foreground = $button.textcolor - $WPFbtnTab3_17.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_17.Text - Call-btnTab3_17 - }) - } - - If ($buttonID -eq "18"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_18.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_18.IsEnabled = $false} Else {$WPFbtnTab3_18.IsEnabled = $true} - $WPFbtnTextTab3_18.Text = $button.Name - $WPFbtnTab3_18.Background = $button.bgcolor - $WPFbtnTab3_18.Foreground = $button.textcolor - $WPFbtnTab3_18.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_18.Text - Call-btnTab3_18 - }) - } - - If ($buttonID -eq "19"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_19.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_19.IsEnabled = $false} Else {$WPFbtnTab3_19.IsEnabled = $true} - $WPFbtnTextTab3_19.Text = $button.Name - $WPFbtnTab3_19.Background = $button.bgcolor - $WPFbtnTab3_19.Foreground = $button.textcolor - $WPFbtnTab3_19.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_19.Text - Call-btnTab3_19 - }) - } - - If ($buttonID -eq "20"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_20.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_20.IsEnabled = $false} Else {$WPFbtnTab3_20.IsEnabled = $true} - $WPFbtnTextTab3_20.Text = $button.Name - $WPFbtnTab3_20.Background = $button.bgcolor - $WPFbtnTab3_20.Foreground = $button.textcolor - $WPFbtnTab3_20.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_20.Text - Call-btnTab3_20 - }) - } - - If ($buttonID -eq "21"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_21.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_21.IsEnabled = $false} Else {$WPFbtnTab3_21.IsEnabled = $true} - $WPFbtnTextTab3_21.Text = $button.Name - $WPFbtnTab3_21.Background = $button.bgcolor - $WPFbtnTab3_21.Foreground = $button.textcolor - $WPFbtnTab3_21.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_21.Text - Call-btnTab3_21 - }) - } - - If ($buttonID -eq "22"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_22.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_22.IsEnabled = $false} Else {$WPFbtnTab3_22.IsEnabled = $true} - $WPFbtnTextTab3_22.Text = $button.Name - $WPFbtnTab3_22.Background = $button.bgcolor - $WPFbtnTab3_22.Foreground = $button.textcolor - $WPFbtnTab3_22.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_22.Text - Call-btnTab3_22 - }) - } - - If ($buttonID -eq "23"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_23.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_23.IsEnabled = $false} Else {$WPFbtnTab3_23.IsEnabled = $true} - $WPFbtnTextTab3_23.Text = $button.Name - $WPFbtnTab3_23.Background = $button.bgcolor - $WPFbtnTab3_23.Foreground = $button.textcolor - $WPFbtnTab3_23.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_23.Text - Call-btnTab3_23 - }) - } - - If ($buttonID -eq "24"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_24.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_24.IsEnabled = $false} Else {$WPFbtnTab3_24.IsEnabled = $true} - $WPFbtnTextTab3_24.Text = $button.Name - $WPFbtnTab3_24.Background = $button.bgcolor - $WPFbtnTab3_24.Foreground = $button.textcolor - $WPFbtnTab3_24.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_24.Text - Call-btnTab3_24 - }) - } - - If ($buttonID -eq "25"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_25.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_25.IsEnabled = $false} Else {$WPFbtnTab3_25.IsEnabled = $true} - $WPFbtnTextTab3_25.Text = $button.Name - $WPFbtnTab3_25.Background = $button.bgcolor - $WPFbtnTab3_25.Foreground = $button.textcolor - $WPFbtnTab3_25.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_25.Text - Call-btnTab3_25 - }) - } - - If ($buttonID -eq "26"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab3_26.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab3_26.IsEnabled = $false} Else {$WPFbtnTab3_26.IsEnabled = $true} - $WPFbtnTextTab3_26.Text = $button.Name - $WPFbtnTab3_26.Background = $button.bgcolor - $WPFbtnTab3_26.Foreground = $button.textcolor - $WPFbtnTab3_26.Add_Click({ - $ButtonClicked = $WPFbtnTextTab3_26.Text - Call-btnTab3_26 - }) - } - -} +##*============================================= +##* LOAD TAB 3 FROM CONFIG +##*============================================= +$ConfigTab3 = $AppMenuTabandButtons.tab[2] +If ($HashNames.Keys -eq "Tab3"){ + Write-Host "Found Tab3 section in Names File" -ForegroundColor Gray + $Tab3HashNames = $HashNames.Tab3 + [string]$Tab3HashList = $Tab3HashNames| out-string -stream + write-Host "`nNames found in list: `n$Tab3HashList" +} +Else{ + Write-Host "No Tab3 section found in names file" -ForegroundColor Gray +} + +Try{$SMSSiteCode = ($([WmiClass]"ROOT\ccm:SMS_Client").getassignedsite()).sSiteCode}Catch{$SMSSiteCode = "N/A"} + +$WPFtxtTab3Name1.Text = $SMSSiteCode + +$WPFbtnTab3Name2List.add_Click({Save-ComputerList -TitleDesc "List of Sytem Center Server" -TabObject Tab3}) +##*============================================= +##* FORM ADD CLICK FUNCTIONS +##*============================================= +<# + Examples to use (place in function): + + SIMPLE: + Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal + + SEND TO OUTPUT (PASSTHRU): + Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 + $PasstoOutput = Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String + If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} + + OPEN EXTERNAL PS1 + . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") + + USE INTGRATED FUNCTION (EASIEST) + - to log to output box in tab, use -OutputTab switch + - to identify process alias, use -Alias switch, otherwise path will be used instead + - to specify a custom run message use the -CustomRunMsg switch + - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) + - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch + + EXAMPLE (EXE): + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (EXE) with Parameters: + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$env:windir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (PS1): + Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow + +#> +# Set of 6 large buttons under left column +function Call-btnTab3_01{ + $SCCM = "$($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + '\Microsoft.ConfigurationManagement.exe')" + Start-ButtonProcess -Path $SCCM -OutputTab Tab3 -WindowStyle Normal +} + +function Call-btnTab3_02{ + $DPWB = "$envProgramFiles\Microsoft Deployment Toolkit\Bin\DeploymentWorkbench.msc" + Start-ButtonProcess -Path "$DPWB" -OutputTab Tab3 -WindowStyle Normal +} + +function Call-btnTab3_03{ + $SCSM = "$envProgramFiles\Microsoft System Center 2012 R2\Service Manager\Microsoft.EnterpriseManagement.ServiceManager.UI.Console.exe" + Start-ButtonProcess -Path $SCSM -OutputTab Tab3 -WindowStyle Normal +} + +function Call-btnTab3_04{ + +} + +function Call-btnTab3_05{ + +} + +function Call-btnTab3_06{ + +} + +# Set of 4 small buttons under left column +function Call-btnTab3_07{ + Start-ButtonProcess -Path "$envProgramFiles\Microsoft DaRT\v10\DartRemoteViewer.exe" -OutputTab Tab3 -WindowStyle Normal +} + +function Call-btnTab3_08{ + +} + + +function Call-btnTab3_09{ + +} + + +function Call-btnTab3_10{ + Start-ButtonProcess -Path "C:\Program Files\SCCM Tools\SCCM Client Center\SMSCliCtrV2.exe" -OutputTab Tab3 -WindowStyle Normal +} + + +# Set of 4 large buttons under right column +function Call-btnTab3_11{ +} + +function Call-btnTab3_12{ + +} + +function Call-btnTab3_13{ + +} + +function Call-btnTab3_14{ + +} + +# Set of 12 small buttons under right column +function Call-btnTab3_15{ +} + +function Call-btnTab3_16{ + Start-ButtonProcess -Path "$envProgramFilesX86\ConfigMgr 2012 Toolkit R2\ClientTools\PolicySpy.exe" -OutputTab Tab3 -WindowStyle Normal +} + +function Call-btnTab3_17{ + Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshCAT.ps1" -WorkingScriptDirectory "PoshCAT_0.2" -OutputTab tab3 -WindowStyle Hidden +} + +function Call-btnTab3_18{ +Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab3Name2.Text) -OutputTab Tab3 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab3Name2.Text)" -NeverRunAs -WindowStyle Normal +} + +function Call-btnTab3_19{ + +} + +function Call-btnTab3_20{ + +} + +function Call-btnTab3_21{ + +} + +function Call-btnTab3_22{ + +} + +function Call-btnTab3_23{ + +} + +function Call-btnTab3_24{ + +} + + +function Call-btnTab3_25{ + +} + +function Call-btnTab3_26{ + Start-ButtonProcess -ProcessCall ps1 -File "Install-ConfigMgrPrereqsGUI_1.4.2.ps1" -OutputTab tab3 -CreateNoWindow +} + + + +##*============================================= +##* TAB 3 FUNCTIONS +##*============================================= + + + +##*============================================= +##* BUILD TAB 3 BUTTONS IF CONFIGURED +##*============================================= +$ConfigTab3_Name = $ConfigTab3.Name + +$WPFTab3.Header = $ConfigTab3_Name +$WPFlblTab3Section1.Content = $ConfigTab3.section1Label +$WPFlblTab3Section2.Content = $ConfigTab3.section2Label + +$ConfigTab3_btns = $ConfigTab3.button + + +Foreach ($button in $ConfigTab3_btns){ + + [string]$buttonID = $button.id + If ($AppOptionDebugeMode){Write-Host "Tab3: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} + + If ($buttonID -eq "01"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_01.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_01.IsEnabled = $false} Else {$WPFbtnTab3_01.IsEnabled = $true} + $WPFbtnTextTab3_01.Text = $button.Name + $WPFbtnTab3_01.Background = $button.bgcolor + $WPFbtnTab3_01.Foreground = $button.textcolor + #$WPFbtnTab3_01.Add_Click({Call-btnTab3_01}) + $WPFbtnTab3_01.add_Click({ + $ButtonClicked = $WPFbtnTextTab3_01.Text + Call-btnTab3_01 + }) + } + + If ($buttonID -eq "02"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_02.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_02.IsEnabled = $false} Else {$WPFbtnTab3_02.IsEnabled = $true} + $WPFbtnTextTab3_02.Text = $button.Name + $WPFbtnTab3_02.Background = $button.bgcolor + $WPFbtnTab3_02.Foreground = $button.textcolor + $WPFbtnTab3_02.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_02.Text + Call-btnTab3_02 + }) + } + + If ($buttonID -eq "03"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_03.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_03.IsEnabled = $false} Else {$WPFbtnTab3_03.IsEnabled = $true} + $WPFbtnTextTab3_03.Text = $button.Name + $WPFbtnTab3_03.Background = $button.bgcolor + $WPFbtnTab3_03.Foreground = $button.textcolor + $WPFbtnTab3_03.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_03.Text + Call-btnTab3_03 + }) + } + + If ($buttonID -eq "04"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_04.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_04.IsEnabled = $false} Else {$WPFbtnTab3_04.IsEnabled = $true} + $WPFbtnTextTab3_04.Text = $button.Name + $WPFbtnTab3_04.Background = $button.bgcolor + $WPFbtnTab3_04.Foreground = $button.textcolor + $WPFbtnTab3_04.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_04.Text + Call-btnTab3_04 + }) + } + + If ($buttonID -eq "05"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_05.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_05.IsEnabled = $false} Else {$WPFbtnTab3_05.IsEnabled = $true} + $WPFbtnTextTab3_05.Text = $button.Name + $WPFbtnTab3_05.Background = $button.bgcolor + $WPFbtnTab3_05.Foreground = $button.textcolor + $WPFbtnTab3_05.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_05.Text + Call-btnTab3_05 + }) + } + + If ($buttonID -eq "06"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_06.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_06.IsEnabled = $false} Else {$WPFbtnTab3_06.IsEnabled = $true} + $WPFbtnTextTab3_06.Text = $button.Name + $WPFbtnTab3_06.Background = $button.bgcolor + $WPFbtnTab3_06.Foreground = $button.textcolor + $WPFbtnTab3_06.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_06.Text + Call-btnTab3_06 + }) + } + + If ($buttonID -eq "07"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_07.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_07.IsEnabled = $false} Else {$WPFbtnTab3_07.IsEnabled = $true} + $WPFbtnTextTab3_07.Text = $button.Name + $WPFbtnTab3_07.Background = $button.bgcolor + $WPFbtnTab3_07.Foreground = $button.textcolor + $WPFbtnTab3_07.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_07.Text + Call-btnTab3_07 + }) + } + + If ($buttonID -eq "08"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_08.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_08.IsEnabled = $false} Else {$WPFbtnTab3_08.IsEnabled = $true} + $WPFbtnTextTab3_08.Text = $button.Name + $WPFbtnTab3_08.Background = $button.bgcolor + $WPFbtnTab3_08.Foreground = $button.textcolor + $WPFbtnTab3_08.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_08.Text + Call-btnTab3_08 + }) + } + + If ($buttonID -eq "09"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_09.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_09.IsEnabled = $false} Else {$WPFbtnTab3_09.IsEnabled = $true} + $WPFbtnTextTab3_09.Text = $button.Name + $WPFbtnTab3_09.Background = $button.bgcolor + $WPFbtnTab3_09.Foreground = $button.textcolor + $WPFbtnTab3_09.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_09.Text + Call-btnTab3_09 + }) + } + + If ($buttonID -eq "10"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_10.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_10.IsEnabled = $false} Else {$WPFbtnTab3_10.IsEnabled = $true} + $WPFbtnTextTab3_10.Text = $button.Name + $WPFbtnTab3_10.Background = $button.bgcolor + $WPFbtnTab3_10.Foreground = $button.textcolor + $WPFbtnTab3_10.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_10.Text + Call-btnTab3_10 + }) + } + + If ($buttonID -eq "11"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_11.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_11.IsEnabled = $false} Else {$WPFbtnTab3_11.IsEnabled = $true} + $WPFbtnTextTab3_11.Text = $button.Name + $WPFbtnTab3_11.Background = $button.bgcolor + $WPFbtnTab3_11.Foreground = $button.textcolor + $WPFbtnTab3_11.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_11.Text + Call-btnTab3_11 + }) + } + + If ($buttonID -eq "12"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_12.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_12.IsEnabled = $false} Else {$WPFbtnTab3_12.IsEnabled = $true} + $WPFbtnTextTab3_12.Text = $button.Name + $WPFbtnTab3_12.Background = $button.bgcolor + $WPFbtnTab3_12.Foreground = $button.textcolor + $WPFbtnTab3_12.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_12.Text + Call-btnTab3_12 + }) + } + + If ($buttonID -eq "13"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_13.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_13.IsEnabled = $false} Else {$WPFbtnTab3_13.IsEnabled = $true} + $WPFbtnTextTab3_13.Text = $button.Name + $WPFbtnTab3_13.Background = $button.bgcolor + $WPFbtnTab3_13.Foreground = $button.textcolor + $WPFbtnTab3_13.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_13.Text + Call-btnTab3_13 + }) + } + If ($buttonID -eq "14"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_14.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_14.IsEnabled = $false} Else {$WPFbtnTab3_14.IsEnabled = $true} + $WPFbtnTextTab3_14.Text = $button.Name + $WPFbtnTab3_14.Background = $button.bgcolor + $WPFbtnTab3_14.Foreground = $button.textcolor + $WPFbtnTab3_14.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_14.Text + Call-btnTab3_14 + }) + } + + If ($buttonID -eq "15"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_15.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_15.IsEnabled = $false} Else {$WPFbtnTab3_15.IsEnabled = $true} + $WPFbtnTextTab3_15.Text = $button.Name + $WPFbtnTab3_15.Background = $button.bgcolor + $WPFbtnTab3_15.Foreground = $button.textcolor + $WPFbtnTab3_15.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_15.Text + Call-btnTab3_15 + }) + } + + If ($buttonID -eq "16"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_16.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_16.IsEnabled = $false} Else {$WPFbtnTab3_16.IsEnabled = $true} + $WPFbtnTextTab3_16.Text = $button.Name + $WPFbtnTab3_16.Background = $button.bgcolor + $WPFbtnTab3_16.Foreground = $button.textcolor + $WPFbtnTab3_16.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_16.Text + Call-btnTab3_16 + }) + } + + If ($buttonID -eq "17"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_17.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_17.IsEnabled = $false} Else {$WPFbtnTab3_17.IsEnabled = $true} + $WPFbtnTextTab3_17.Text = $button.Name + $WPFbtnTab3_17.Background = $button.bgcolor + $WPFbtnTab3_17.Foreground = $button.textcolor + $WPFbtnTab3_17.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_17.Text + Call-btnTab3_17 + }) + } + + If ($buttonID -eq "18"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_18.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_18.IsEnabled = $false} Else {$WPFbtnTab3_18.IsEnabled = $true} + $WPFbtnTextTab3_18.Text = $button.Name + $WPFbtnTab3_18.Background = $button.bgcolor + $WPFbtnTab3_18.Foreground = $button.textcolor + $WPFbtnTab3_18.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_18.Text + Call-btnTab3_18 + }) + } + + If ($buttonID -eq "19"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_19.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_19.IsEnabled = $false} Else {$WPFbtnTab3_19.IsEnabled = $true} + $WPFbtnTextTab3_19.Text = $button.Name + $WPFbtnTab3_19.Background = $button.bgcolor + $WPFbtnTab3_19.Foreground = $button.textcolor + $WPFbtnTab3_19.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_19.Text + Call-btnTab3_19 + }) + } + + If ($buttonID -eq "20"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_20.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_20.IsEnabled = $false} Else {$WPFbtnTab3_20.IsEnabled = $true} + $WPFbtnTextTab3_20.Text = $button.Name + $WPFbtnTab3_20.Background = $button.bgcolor + $WPFbtnTab3_20.Foreground = $button.textcolor + $WPFbtnTab3_20.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_20.Text + Call-btnTab3_20 + }) + } + + If ($buttonID -eq "21"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_21.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_21.IsEnabled = $false} Else {$WPFbtnTab3_21.IsEnabled = $true} + $WPFbtnTextTab3_21.Text = $button.Name + $WPFbtnTab3_21.Background = $button.bgcolor + $WPFbtnTab3_21.Foreground = $button.textcolor + $WPFbtnTab3_21.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_21.Text + Call-btnTab3_21 + }) + } + + If ($buttonID -eq "22"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_22.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_22.IsEnabled = $false} Else {$WPFbtnTab3_22.IsEnabled = $true} + $WPFbtnTextTab3_22.Text = $button.Name + $WPFbtnTab3_22.Background = $button.bgcolor + $WPFbtnTab3_22.Foreground = $button.textcolor + $WPFbtnTab3_22.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_22.Text + Call-btnTab3_22 + }) + } + + If ($buttonID -eq "23"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_23.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_23.IsEnabled = $false} Else {$WPFbtnTab3_23.IsEnabled = $true} + $WPFbtnTextTab3_23.Text = $button.Name + $WPFbtnTab3_23.Background = $button.bgcolor + $WPFbtnTab3_23.Foreground = $button.textcolor + $WPFbtnTab3_23.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_23.Text + Call-btnTab3_23 + }) + } + + If ($buttonID -eq "24"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_24.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_24.IsEnabled = $false} Else {$WPFbtnTab3_24.IsEnabled = $true} + $WPFbtnTextTab3_24.Text = $button.Name + $WPFbtnTab3_24.Background = $button.bgcolor + $WPFbtnTab3_24.Foreground = $button.textcolor + $WPFbtnTab3_24.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_24.Text + Call-btnTab3_24 + }) + } + + If ($buttonID -eq "25"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_25.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_25.IsEnabled = $false} Else {$WPFbtnTab3_25.IsEnabled = $true} + $WPFbtnTextTab3_25.Text = $button.Name + $WPFbtnTab3_25.Background = $button.bgcolor + $WPFbtnTab3_25.Foreground = $button.textcolor + $WPFbtnTab3_25.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_25.Text + Call-btnTab3_25 + }) + } + + If ($buttonID -eq "26"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab3_26.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab3_26.IsEnabled = $false} Else {$WPFbtnTab3_26.IsEnabled = $true} + $WPFbtnTextTab3_26.Text = $button.Name + $WPFbtnTab3_26.Background = $button.bgcolor + $WPFbtnTab3_26.Foreground = $button.textcolor + $WPFbtnTab3_26.Add_Click({ + $ButtonClicked = $WPFbtnTextTab3_26.Text + Call-btnTab3_26 + }) + } + +} If ($ConfigTab3.enable -eq "false"){$WPFTab3.Visibility = 'Hidden'} Else {$WPFTab3.Visibility = 'Visible'} \ No newline at end of file diff --git a/App/Extensions/TabControl/AdminMenu-Tab4.ps1 b/Extensions/TabControl/AdminMenu-Tab4.ps1 similarity index 96% rename from App/Extensions/TabControl/AdminMenu-Tab4.ps1 rename to Extensions/TabControl/AdminMenu-Tab4.ps1 index fd66eef..da0a487 100644 --- a/App/Extensions/TabControl/AdminMenu-Tab4.ps1 +++ b/Extensions/TabControl/AdminMenu-Tab4.ps1 @@ -1,528 +1,528 @@ -##*============================================= -##* LOAD TAB 4 FROM CONFIG -##*============================================= -$ConfigTab4 = $AppMenuTabandButtons.tab[3] -If ($HashNames.Keys -eq "Tab4"){ - Write-Host "Found Tab4 section in Names File" -ForegroundColor Gray - $Tab4HashNames = $HashNames.Tab4 - [string]$Tab4HashList = $Tab4HashNames| out-string -stream - write-Host "`nNames found in list: `n$Tab4HashList" -} -Else{ - Write-Host "No Tab4 section found in names file" -ForegroundColor Gray -} -$WPFtxtTab4Name1.Text = "" - -$WPFbtnTab4Name1List.add_Click({Save-ComputerList -TitleDesc "List of Exchange Servers" -TabObject Tab4}) - -$Global:PSExchServer = "http://$($WPFtxtTab4Name1.Text)/PowerShell/" -$Global:PSLync = "http://$($WPFtxtTab4Name1.Text)/ocspowershell" -##*============================================= -##* FORM ADD CLICK FUNCTIONS -##*============================================= -<# - Examples to use (place in function): - - SIMPLE: - Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal - - SEND TO OUTPUT (PASSTHRU): - Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 - $PasstoOutput = Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String - If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} - - OPEN EXTERNAL PS1 - . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") - - USE INTGRATED FUNCTION (EASIEST) - - to log to output box in tab, use -OutputTab switch - - to identify process alias, use -Alias switch, otherwise path will be used instead - - to specify a custom run message use the -CustomRunMsg switch - - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) - - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch - - EXAMPLE (EXE): - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (EXE) with Parameters: - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$env:windir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (PS1): - Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow - -#> -# Set of 6 large buttons under left column -function Call-btnTab4_01{ - -} - -function Call-btnTab4_02{ - -} - -function Call-btnTab4_03{ - -} - -function Call-btnTab4_04{ - -} - -function Call-btnTab4_05{ - -} - -function Call-btnTab4_06{ - -} - -# Set of 4 small buttons under left column -function Call-btnTab4_07{ - -} - -function Call-btnTab4_08{ - -} - - -function Call-btnTab4_09{ - -} - - -function Call-btnTab4_10{ - -} - - -# Set of 4 large buttons under right column -function Call-btnTab4_11{ - Start-ButtonProcess -ProcessCall module -Path "$envProgramFiles\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto;" -OutputTab Tab4 -WindowStyle Normal - -} - -function Call-btnTab4_12{ - -} - -function Call-btnTab4_13{ - -} - -function Call-btnTab4_14{ - -} - -# Set of 12 small buttons under right column -function Call-btnTab4_15{ - -} - -function Call-btnTab4_16{ - -} - -function Call-btnTab4_17{ - Start-ButtonProcess -ProcessCall ps1 -File "ThumbnailPhotoManager.ps1" -OutputTab tab4 -CreateNoWindow -} - -function Call-btnTab4_18{ - Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab4Name1.Text) -OutputTab Tab4 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab4Name1.Text)" -NeverRunAs -WindowStyle Normal -} - -function Call-btnTab4_19{ - Start-ButtonProcess -ProcessCall ps1 -File "Get-ExchangeEnvironmentReport.ps1" -Parameters "-HTMLReport $envUserProfile\Desktop\ExchangeReport.html" -OutputTab tab4 -CreateNoWindow -} - -function Call-btnTab4_20{ - -} - -function Call-btnTab4_21{ - -} - -function Call-btnTab4_22{ - Start-ButtonProcess -ProcessCall ps1 -File "New-ExchangeMailboxAudit-GUI.ps1" -WorkingScriptDirectory "ExchangeMailboxAuditReport\Script" -OutputTab tab4 -CreateNoWindow -} - -function Call-btnTab4_23{ - -} - -function Call-btnTab4_24{ - -} - -function Call-btnTab4_25{ - -} - -function Call-btnTab4_26{ - -} - - -##*============================================= -##* TAB 4 FUNCTIONS -##*============================================= - - -##*============================================= -##* BUILD TAB 4 BUTTONS IF CONFIGURED -##*============================================= -$ConfigTab4_Name = $ConfigTab4.Name - -$WPFTab4.Header = $ConfigTab4_Name -$WPFlblTab4Section1.Content = $ConfigTab4.section1Label -$WPFlblTab4Section2.Content = $ConfigTab4.section2Label - -$ConfigTab4_btns = $ConfigTab4.button - - -Foreach ($button in $ConfigTab4_btns){ - - [string]$buttonID = $button.id - If ($AppOptionDebugeMode){Write-Host "Tab4: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} - - If ($buttonID -eq "01"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_01.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_01.IsEnabled = $false} Else {$WPFbtnTab4_01.IsEnabled = $true} - $WPFbtnTextTab4_01.Text = $button.Name - $WPFbtnTab4_01.Background = $button.bgcolor - $WPFbtnTab4_01.Foreground = $button.textcolor - #$WPFbtnTab4_01.Add_Click({Call-btnTab4_01}) - $WPFbtnTab4_01.add_Click({ - $ButtonClicked = $WPFbtnTextTab4_01.Text - Call-btnTab4_01 - }) - } - - If ($buttonID -eq "02"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_02.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_02.IsEnabled = $false} Else {$WPFbtnTab4_02.IsEnabled = $true} - $WPFbtnTextTab4_02.Text = $button.Name - $WPFbtnTab4_02.Background = $button.bgcolor - $WPFbtnTab4_02.Foreground = $button.textcolor - $WPFbtnTab4_02.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_02.Text - Call-btnTab4_02 - }) - } - - If ($buttonID -eq "03"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_03.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_03.IsEnabled = $false} Else {$WPFbtnTab4_03.IsEnabled = $true} - $WPFbtnTextTab4_03.Text = $button.Name - $WPFbtnTab4_03.Background = $button.bgcolor - $WPFbtnTab4_03.Foreground = $button.textcolor - $WPFbtnTab4_03.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_03.Text - Call-btnTab4_03 - }) - } - - If ($buttonID -eq "04"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_04.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_04.IsEnabled = $false} Else {$WPFbtnTab4_04.IsEnabled = $true} - $WPFbtnTextTab4_04.Text = $button.Name - $WPFbtnTab4_04.Background = $button.bgcolor - $WPFbtnTab4_04.Foreground = $button.textcolor - $WPFbtnTab4_04.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_04.Text - Call-btnTab4_04 - }) - } - - If ($buttonID -eq "05"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_05.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_05.IsEnabled = $false} Else {$WPFbtnTab4_05.IsEnabled = $true} - $WPFbtnTextTab4_05.Text = $button.Name - $WPFbtnTab4_05.Background = $button.bgcolor - $WPFbtnTab4_05.Foreground = $button.textcolor - $WPFbtnTab4_05.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_05.Text - Call-btnTab4_05 - }) - } - - If ($buttonID -eq "06"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_06.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_06.IsEnabled = $false} Else {$WPFbtnTab4_06.IsEnabled = $true} - $WPFbtnTextTab4_06.Text = $button.Name - $WPFbtnTab4_06.Background = $button.bgcolor - $WPFbtnTab4_06.Foreground = $button.textcolor - $WPFbtnTab4_06.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_06.Text - Call-btnTab4_06 - }) - } - - If ($buttonID -eq "07"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_07.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_07.IsEnabled = $false} Else {$WPFbtnTab4_07.IsEnabled = $true} - $WPFbtnTextTab4_07.Text = $button.Name - $WPFbtnTab4_07.Background = $button.bgcolor - $WPFbtnTab4_07.Foreground = $button.textcolor - $WPFbtnTab4_07.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_07.Text - Call-btnTab4_07 - }) - } - - If ($buttonID -eq "08"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_08.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_08.IsEnabled = $false} Else {$WPFbtnTab4_08.IsEnabled = $true} - $WPFbtnTextTab4_08.Text = $button.Name - $WPFbtnTab4_08.Background = $button.bgcolor - $WPFbtnTab4_08.Foreground = $button.textcolor - $WPFbtnTab4_08.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_08.Text - Call-btnTab4_08 - }) - } - - If ($buttonID -eq "09"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_09.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_09.IsEnabled = $false} Else {$WPFbtnTab4_09.IsEnabled = $true} - $WPFbtnTextTab4_09.Text = $button.Name - $WPFbtnTab4_09.Background = $button.bgcolor - $WPFbtnTab4_09.Foreground = $button.textcolor - $WPFbtnTab4_09.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_09.Text - Call-btnTab4_09 - }) - } - - If ($buttonID -eq "10"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_10.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_10.IsEnabled = $false} Else {$WPFbtnTab4_10.IsEnabled = $true} - $WPFbtnTextTab4_10.Text = $button.Name - $WPFbtnTab4_10.Background = $button.bgcolor - $WPFbtnTab4_10.Foreground = $button.textcolor - $WPFbtnTab4_10.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_10.Text - Call-btnTab4_10 - }) - } - - If ($buttonID -eq "11"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_11.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_11.IsEnabled = $false} Else {$WPFbtnTab4_11.IsEnabled = $true} - $WPFbtnTextTab4_11.Text = $button.Name - $WPFbtnTab4_11.Background = $button.bgcolor - $WPFbtnTab4_11.Foreground = $button.textcolor - $WPFbtnTab4_11.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_11.Text - Call-btnTab4_11 - }) - } - - If ($buttonID -eq "12"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_12.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_12.IsEnabled = $false} Else {$WPFbtnTab4_12.IsEnabled = $true} - $WPFbtnTextTab4_12.Text = $button.Name - $WPFbtnTab4_12.Background = $button.bgcolor - $WPFbtnTab4_12.Foreground = $button.textcolor - $WPFbtnTab4_12.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_12.Text - Call-btnTab4_12 - }) - } - - If ($buttonID -eq "13"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_13.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_13.IsEnabled = $false} Else {$WPFbtnTab4_13.IsEnabled = $true} - $WPFbtnTextTab4_13.Text = $button.Name - $WPFbtnTab4_13.Background = $button.bgcolor - $WPFbtnTab4_13.Foreground = $button.textcolor - $WPFbtnTab4_13.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_13.Text - Call-btnTab4_13 - }) - } - If ($buttonID -eq "14"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_14.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_14.IsEnabled = $false} Else {$WPFbtnTab4_14.IsEnabled = $true} - $WPFbtnTextTab4_14.Text = $button.Name - $WPFbtnTab4_14.Background = $button.bgcolor - $WPFbtnTab4_14.Foreground = $button.textcolor - $WPFbtnTab4_14.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_14.Text - Call-btnTab4_14 - }) - } - - If ($buttonID -eq "15"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_15.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_15.IsEnabled = $false} Else {$WPFbtnTab4_15.IsEnabled = $true} - $WPFbtnTextTab4_15.Text = $button.Name - $WPFbtnTab4_15.Background = $button.bgcolor - $WPFbtnTab4_15.Foreground = $button.textcolor - $WPFbtnTab4_15.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_15.Text - Call-btnTab4_15 - }) - } - - If ($buttonID -eq "16"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_16.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_16.IsEnabled = $false} Else {$WPFbtnTab4_16.IsEnabled = $true} - $WPFbtnTextTab4_16.Text = $button.Name - $WPFbtnTab4_16.Background = $button.bgcolor - $WPFbtnTab4_16.Foreground = $button.textcolor - $WPFbtnTab4_16.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_16.Text - Call-btnTab4_16 - }) - } - - If ($buttonID -eq "17"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_17.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_17.IsEnabled = $false} Else {$WPFbtnTab4_17.IsEnabled = $true} - $WPFbtnTextTab4_17.Text = $button.Name - $WPFbtnTab4_17.Background = $button.bgcolor - $WPFbtnTab4_17.Foreground = $button.textcolor - $WPFbtnTab4_17.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_17.Text - Call-btnTab4_17 - }) - } - - If ($buttonID -eq "18"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_18.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_18.IsEnabled = $false} Else {$WPFbtnTab4_18.IsEnabled = $true} - $WPFbtnTextTab4_18.Text = $button.Name - $WPFbtnTab4_18.Background = $button.bgcolor - $WPFbtnTab4_18.Foreground = $button.textcolor - $WPFbtnTab4_18.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_18.Text - Call-btnTab4_18 - }) - } - - If ($buttonID -eq "19"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_19.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_19.IsEnabled = $false} Else {$WPFbtnTab4_19.IsEnabled = $true} - $WPFbtnTextTab4_19.Text = $button.Name - $WPFbtnTab4_19.Background = $button.bgcolor - $WPFbtnTab4_19.Foreground = $button.textcolor - $WPFbtnTab4_19.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_19.Text - Call-btnTab4_19 - }) - } - - If ($buttonID -eq "20"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_20.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_20.IsEnabled = $false} Else {$WPFbtnTab4_20.IsEnabled = $true} - $WPFbtnTextTab4_20.Text = $button.Name - $WPFbtnTab4_20.Background = $button.bgcolor - $WPFbtnTab4_20.Foreground = $button.textcolor - $WPFbtnTab4_20.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_20.Text - Call-btnTab4_20 - }) - } - - If ($buttonID -eq "21"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_21.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_21.IsEnabled = $false} Else {$WPFbtnTab4_21.IsEnabled = $true} - $WPFbtnTextTab4_21.Text = $button.Name - $WPFbtnTab4_21.Background = $button.bgcolor - $WPFbtnTab4_21.Foreground = $button.textcolor - $WPFbtnTab4_21.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_21.Text - Call-btnTab4_21 - }) - } - - If ($buttonID -eq "22"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_22.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_22.IsEnabled = $false} Else {$WPFbtnTab4_22.IsEnabled = $true} - $WPFbtnTextTab4_22.Text = $button.Name - $WPFbtnTab4_22.Background = $button.bgcolor - $WPFbtnTab4_22.Foreground = $button.textcolor - $WPFbtnTab4_22.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_22.Text - Call-btnTab4_22 - }) - } - - If ($buttonID -eq "23"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_23.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_23.IsEnabled = $false} Else {$WPFbtnTab4_23.IsEnabled = $true} - $WPFbtnTextTab4_23.Text = $button.Name - $WPFbtnTab4_23.Background = $button.bgcolor - $WPFbtnTab4_23.Foreground = $button.textcolor - $WPFbtnTab4_23.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_23.Text - Call-btnTab4_23 - }) - } - - If ($buttonID -eq "24"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_24.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_24.IsEnabled = $false} Else {$WPFbtnTab4_24.IsEnabled = $true} - $WPFbtnTextTab4_24.Text = $button.Name - $WPFbtnTab4_24.Background = $button.bgcolor - $WPFbtnTab4_24.Foreground = $button.textcolor - $WPFbtnTab4_24.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_24.Text - Call-btnTab4_24 - }) - } - - If ($buttonID -eq "25"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_25.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_25.IsEnabled = $false} Else {$WPFbtnTab4_25.IsEnabled = $true} - $WPFbtnTextTab4_25.Text = $button.Name - $WPFbtnTab4_25.Background = $button.bgcolor - $WPFbtnTab4_25.Foreground = $button.textcolor - $WPFbtnTab4_25.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_25.Text - Call-btnTab4_25 - }) - } - - If ($buttonID -eq "26"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab4_26.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab4_26.IsEnabled = $false} Else {$WPFbtnTab4_26.IsEnabled = $true} - $WPFbtnTextTab4_26.Text = $button.Name - $WPFbtnTab4_26.Background = $button.bgcolor - $WPFbtnTab4_26.Foreground = $button.textcolor - $WPFbtnTab4_26.Add_Click({ - $ButtonClicked = $WPFbtnTextTab4_26.Text - Call-btnTab4_26 - }) - } - -} +##*============================================= +##* LOAD TAB 4 FROM CONFIG +##*============================================= +$ConfigTab4 = $AppMenuTabandButtons.tab[3] +If ($HashNames.Keys -eq "Tab4"){ + Write-Host "Found Tab4 section in Names File" -ForegroundColor Gray + $Tab4HashNames = $HashNames.Tab4 + [string]$Tab4HashList = $Tab4HashNames| out-string -stream + write-Host "`nNames found in list: `n$Tab4HashList" +} +Else{ + Write-Host "No Tab4 section found in names file" -ForegroundColor Gray +} +$WPFtxtTab4Name1.Text = "" + +$WPFbtnTab4Name1List.add_Click({Save-ComputerList -TitleDesc "List of Exchange Servers" -TabObject Tab4}) + +$Global:PSExchServer = "http://$($WPFtxtTab4Name1.Text)/PowerShell/" +$Global:PSLync = "http://$($WPFtxtTab4Name1.Text)/ocspowershell" +##*============================================= +##* FORM ADD CLICK FUNCTIONS +##*============================================= +<# + Examples to use (place in function): + + SIMPLE: + Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal + + SEND TO OUTPUT (PASSTHRU): + Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 + $PasstoOutput = Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String + If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} + + OPEN EXTERNAL PS1 + . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") + + USE INTGRATED FUNCTION (EASIEST) + - to log to output box in tab, use -OutputTab switch + - to identify process alias, use -Alias switch, otherwise path will be used instead + - to specify a custom run message use the -CustomRunMsg switch + - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) + - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch + + EXAMPLE (EXE): + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (EXE) with Parameters: + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$env:windir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (PS1): + Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow + +#> +# Set of 6 large buttons under left column +function Call-btnTab4_01{ + +} + +function Call-btnTab4_02{ + +} + +function Call-btnTab4_03{ + +} + +function Call-btnTab4_04{ + +} + +function Call-btnTab4_05{ + +} + +function Call-btnTab4_06{ + +} + +# Set of 4 small buttons under left column +function Call-btnTab4_07{ + +} + +function Call-btnTab4_08{ + +} + + +function Call-btnTab4_09{ + +} + + +function Call-btnTab4_10{ + +} + + +# Set of 4 large buttons under right column +function Call-btnTab4_11{ + Start-ButtonProcess -ProcessCall module -Path "$envProgramFiles\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto;" -OutputTab Tab4 -WindowStyle Normal + +} + +function Call-btnTab4_12{ + +} + +function Call-btnTab4_13{ + +} + +function Call-btnTab4_14{ + +} + +# Set of 12 small buttons under right column +function Call-btnTab4_15{ + +} + +function Call-btnTab4_16{ + +} + +function Call-btnTab4_17{ + Start-ButtonProcess -ProcessCall ps1 -File "ThumbnailPhotoManager.ps1" -OutputTab tab4 -CreateNoWindow +} + +function Call-btnTab4_18{ + Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab4Name1.Text) -OutputTab Tab4 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab4Name1.Text)" -NeverRunAs -WindowStyle Normal +} + +function Call-btnTab4_19{ + Start-ButtonProcess -ProcessCall ps1 -File "Get-ExchangeEnvironmentReport.ps1" -Parameters "-HTMLReport $envUserProfile\Desktop\ExchangeReport.html" -OutputTab tab4 -CreateNoWindow +} + +function Call-btnTab4_20{ + +} + +function Call-btnTab4_21{ + +} + +function Call-btnTab4_22{ + Start-ButtonProcess -ProcessCall ps1 -File "New-ExchangeMailboxAudit-GUI.ps1" -WorkingScriptDirectory "ExchangeMailboxAuditReport\Script" -OutputTab tab4 -CreateNoWindow +} + +function Call-btnTab4_23{ + +} + +function Call-btnTab4_24{ + +} + +function Call-btnTab4_25{ + +} + +function Call-btnTab4_26{ + +} + + +##*============================================= +##* TAB 4 FUNCTIONS +##*============================================= + + +##*============================================= +##* BUILD TAB 4 BUTTONS IF CONFIGURED +##*============================================= +$ConfigTab4_Name = $ConfigTab4.Name + +$WPFTab4.Header = $ConfigTab4_Name +$WPFlblTab4Section1.Content = $ConfigTab4.section1Label +$WPFlblTab4Section2.Content = $ConfigTab4.section2Label + +$ConfigTab4_btns = $ConfigTab4.button + + +Foreach ($button in $ConfigTab4_btns){ + + [string]$buttonID = $button.id + If ($AppOptionDebugeMode){Write-Host "Tab4: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} + + If ($buttonID -eq "01"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_01.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_01.IsEnabled = $false} Else {$WPFbtnTab4_01.IsEnabled = $true} + $WPFbtnTextTab4_01.Text = $button.Name + $WPFbtnTab4_01.Background = $button.bgcolor + $WPFbtnTab4_01.Foreground = $button.textcolor + #$WPFbtnTab4_01.Add_Click({Call-btnTab4_01}) + $WPFbtnTab4_01.add_Click({ + $ButtonClicked = $WPFbtnTextTab4_01.Text + Call-btnTab4_01 + }) + } + + If ($buttonID -eq "02"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_02.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_02.IsEnabled = $false} Else {$WPFbtnTab4_02.IsEnabled = $true} + $WPFbtnTextTab4_02.Text = $button.Name + $WPFbtnTab4_02.Background = $button.bgcolor + $WPFbtnTab4_02.Foreground = $button.textcolor + $WPFbtnTab4_02.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_02.Text + Call-btnTab4_02 + }) + } + + If ($buttonID -eq "03"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_03.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_03.IsEnabled = $false} Else {$WPFbtnTab4_03.IsEnabled = $true} + $WPFbtnTextTab4_03.Text = $button.Name + $WPFbtnTab4_03.Background = $button.bgcolor + $WPFbtnTab4_03.Foreground = $button.textcolor + $WPFbtnTab4_03.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_03.Text + Call-btnTab4_03 + }) + } + + If ($buttonID -eq "04"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_04.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_04.IsEnabled = $false} Else {$WPFbtnTab4_04.IsEnabled = $true} + $WPFbtnTextTab4_04.Text = $button.Name + $WPFbtnTab4_04.Background = $button.bgcolor + $WPFbtnTab4_04.Foreground = $button.textcolor + $WPFbtnTab4_04.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_04.Text + Call-btnTab4_04 + }) + } + + If ($buttonID -eq "05"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_05.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_05.IsEnabled = $false} Else {$WPFbtnTab4_05.IsEnabled = $true} + $WPFbtnTextTab4_05.Text = $button.Name + $WPFbtnTab4_05.Background = $button.bgcolor + $WPFbtnTab4_05.Foreground = $button.textcolor + $WPFbtnTab4_05.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_05.Text + Call-btnTab4_05 + }) + } + + If ($buttonID -eq "06"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_06.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_06.IsEnabled = $false} Else {$WPFbtnTab4_06.IsEnabled = $true} + $WPFbtnTextTab4_06.Text = $button.Name + $WPFbtnTab4_06.Background = $button.bgcolor + $WPFbtnTab4_06.Foreground = $button.textcolor + $WPFbtnTab4_06.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_06.Text + Call-btnTab4_06 + }) + } + + If ($buttonID -eq "07"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_07.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_07.IsEnabled = $false} Else {$WPFbtnTab4_07.IsEnabled = $true} + $WPFbtnTextTab4_07.Text = $button.Name + $WPFbtnTab4_07.Background = $button.bgcolor + $WPFbtnTab4_07.Foreground = $button.textcolor + $WPFbtnTab4_07.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_07.Text + Call-btnTab4_07 + }) + } + + If ($buttonID -eq "08"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_08.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_08.IsEnabled = $false} Else {$WPFbtnTab4_08.IsEnabled = $true} + $WPFbtnTextTab4_08.Text = $button.Name + $WPFbtnTab4_08.Background = $button.bgcolor + $WPFbtnTab4_08.Foreground = $button.textcolor + $WPFbtnTab4_08.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_08.Text + Call-btnTab4_08 + }) + } + + If ($buttonID -eq "09"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_09.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_09.IsEnabled = $false} Else {$WPFbtnTab4_09.IsEnabled = $true} + $WPFbtnTextTab4_09.Text = $button.Name + $WPFbtnTab4_09.Background = $button.bgcolor + $WPFbtnTab4_09.Foreground = $button.textcolor + $WPFbtnTab4_09.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_09.Text + Call-btnTab4_09 + }) + } + + If ($buttonID -eq "10"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_10.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_10.IsEnabled = $false} Else {$WPFbtnTab4_10.IsEnabled = $true} + $WPFbtnTextTab4_10.Text = $button.Name + $WPFbtnTab4_10.Background = $button.bgcolor + $WPFbtnTab4_10.Foreground = $button.textcolor + $WPFbtnTab4_10.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_10.Text + Call-btnTab4_10 + }) + } + + If ($buttonID -eq "11"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_11.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_11.IsEnabled = $false} Else {$WPFbtnTab4_11.IsEnabled = $true} + $WPFbtnTextTab4_11.Text = $button.Name + $WPFbtnTab4_11.Background = $button.bgcolor + $WPFbtnTab4_11.Foreground = $button.textcolor + $WPFbtnTab4_11.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_11.Text + Call-btnTab4_11 + }) + } + + If ($buttonID -eq "12"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_12.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_12.IsEnabled = $false} Else {$WPFbtnTab4_12.IsEnabled = $true} + $WPFbtnTextTab4_12.Text = $button.Name + $WPFbtnTab4_12.Background = $button.bgcolor + $WPFbtnTab4_12.Foreground = $button.textcolor + $WPFbtnTab4_12.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_12.Text + Call-btnTab4_12 + }) + } + + If ($buttonID -eq "13"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_13.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_13.IsEnabled = $false} Else {$WPFbtnTab4_13.IsEnabled = $true} + $WPFbtnTextTab4_13.Text = $button.Name + $WPFbtnTab4_13.Background = $button.bgcolor + $WPFbtnTab4_13.Foreground = $button.textcolor + $WPFbtnTab4_13.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_13.Text + Call-btnTab4_13 + }) + } + If ($buttonID -eq "14"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_14.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_14.IsEnabled = $false} Else {$WPFbtnTab4_14.IsEnabled = $true} + $WPFbtnTextTab4_14.Text = $button.Name + $WPFbtnTab4_14.Background = $button.bgcolor + $WPFbtnTab4_14.Foreground = $button.textcolor + $WPFbtnTab4_14.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_14.Text + Call-btnTab4_14 + }) + } + + If ($buttonID -eq "15"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_15.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_15.IsEnabled = $false} Else {$WPFbtnTab4_15.IsEnabled = $true} + $WPFbtnTextTab4_15.Text = $button.Name + $WPFbtnTab4_15.Background = $button.bgcolor + $WPFbtnTab4_15.Foreground = $button.textcolor + $WPFbtnTab4_15.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_15.Text + Call-btnTab4_15 + }) + } + + If ($buttonID -eq "16"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_16.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_16.IsEnabled = $false} Else {$WPFbtnTab4_16.IsEnabled = $true} + $WPFbtnTextTab4_16.Text = $button.Name + $WPFbtnTab4_16.Background = $button.bgcolor + $WPFbtnTab4_16.Foreground = $button.textcolor + $WPFbtnTab4_16.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_16.Text + Call-btnTab4_16 + }) + } + + If ($buttonID -eq "17"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_17.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_17.IsEnabled = $false} Else {$WPFbtnTab4_17.IsEnabled = $true} + $WPFbtnTextTab4_17.Text = $button.Name + $WPFbtnTab4_17.Background = $button.bgcolor + $WPFbtnTab4_17.Foreground = $button.textcolor + $WPFbtnTab4_17.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_17.Text + Call-btnTab4_17 + }) + } + + If ($buttonID -eq "18"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_18.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_18.IsEnabled = $false} Else {$WPFbtnTab4_18.IsEnabled = $true} + $WPFbtnTextTab4_18.Text = $button.Name + $WPFbtnTab4_18.Background = $button.bgcolor + $WPFbtnTab4_18.Foreground = $button.textcolor + $WPFbtnTab4_18.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_18.Text + Call-btnTab4_18 + }) + } + + If ($buttonID -eq "19"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_19.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_19.IsEnabled = $false} Else {$WPFbtnTab4_19.IsEnabled = $true} + $WPFbtnTextTab4_19.Text = $button.Name + $WPFbtnTab4_19.Background = $button.bgcolor + $WPFbtnTab4_19.Foreground = $button.textcolor + $WPFbtnTab4_19.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_19.Text + Call-btnTab4_19 + }) + } + + If ($buttonID -eq "20"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_20.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_20.IsEnabled = $false} Else {$WPFbtnTab4_20.IsEnabled = $true} + $WPFbtnTextTab4_20.Text = $button.Name + $WPFbtnTab4_20.Background = $button.bgcolor + $WPFbtnTab4_20.Foreground = $button.textcolor + $WPFbtnTab4_20.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_20.Text + Call-btnTab4_20 + }) + } + + If ($buttonID -eq "21"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_21.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_21.IsEnabled = $false} Else {$WPFbtnTab4_21.IsEnabled = $true} + $WPFbtnTextTab4_21.Text = $button.Name + $WPFbtnTab4_21.Background = $button.bgcolor + $WPFbtnTab4_21.Foreground = $button.textcolor + $WPFbtnTab4_21.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_21.Text + Call-btnTab4_21 + }) + } + + If ($buttonID -eq "22"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_22.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_22.IsEnabled = $false} Else {$WPFbtnTab4_22.IsEnabled = $true} + $WPFbtnTextTab4_22.Text = $button.Name + $WPFbtnTab4_22.Background = $button.bgcolor + $WPFbtnTab4_22.Foreground = $button.textcolor + $WPFbtnTab4_22.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_22.Text + Call-btnTab4_22 + }) + } + + If ($buttonID -eq "23"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_23.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_23.IsEnabled = $false} Else {$WPFbtnTab4_23.IsEnabled = $true} + $WPFbtnTextTab4_23.Text = $button.Name + $WPFbtnTab4_23.Background = $button.bgcolor + $WPFbtnTab4_23.Foreground = $button.textcolor + $WPFbtnTab4_23.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_23.Text + Call-btnTab4_23 + }) + } + + If ($buttonID -eq "24"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_24.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_24.IsEnabled = $false} Else {$WPFbtnTab4_24.IsEnabled = $true} + $WPFbtnTextTab4_24.Text = $button.Name + $WPFbtnTab4_24.Background = $button.bgcolor + $WPFbtnTab4_24.Foreground = $button.textcolor + $WPFbtnTab4_24.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_24.Text + Call-btnTab4_24 + }) + } + + If ($buttonID -eq "25"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_25.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_25.IsEnabled = $false} Else {$WPFbtnTab4_25.IsEnabled = $true} + $WPFbtnTextTab4_25.Text = $button.Name + $WPFbtnTab4_25.Background = $button.bgcolor + $WPFbtnTab4_25.Foreground = $button.textcolor + $WPFbtnTab4_25.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_25.Text + Call-btnTab4_25 + }) + } + + If ($buttonID -eq "26"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab4_26.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab4_26.IsEnabled = $false} Else {$WPFbtnTab4_26.IsEnabled = $true} + $WPFbtnTextTab4_26.Text = $button.Name + $WPFbtnTab4_26.Background = $button.bgcolor + $WPFbtnTab4_26.Foreground = $button.textcolor + $WPFbtnTab4_26.Add_Click({ + $ButtonClicked = $WPFbtnTextTab4_26.Text + Call-btnTab4_26 + }) + } + +} If ($ConfigTab4.enable -eq "false"){$WPFTab4.Visibility = 'Hidden'} Else {$WPFTab4.Visibility = 'Visible'} \ No newline at end of file diff --git a/App/Extensions/TabControl/AdminMenu-Tab5.ps1 b/Extensions/TabControl/AdminMenu-Tab5.ps1 similarity index 96% rename from App/Extensions/TabControl/AdminMenu-Tab5.ps1 rename to Extensions/TabControl/AdminMenu-Tab5.ps1 index e08a766..10945f8 100644 --- a/App/Extensions/TabControl/AdminMenu-Tab5.ps1 +++ b/Extensions/TabControl/AdminMenu-Tab5.ps1 @@ -1,548 +1,548 @@ -##*============================================= -##* LOAD TAB 2 FROM CONFIG -##*============================================= -$ConfigTab5 = $AppMenuTabandButtons.tab[4] -If ($HashNames.Keys -eq "Tab5"){ - Write-Host "Found Tab5 section in Names File" -ForegroundColor Gray - $Tab5HashNames = $HashNames.Tab5 - [string]$Tab5HashList = $Tab5HashNames| out-string -stream - write-Host "`nNames found in list: `n$Tab5HashList" -} -Else{ - Write-Host "No Tab5 section found in names file" -ForegroundColor Gray -} - -$WPFbtnTab5Name1List.add_Click({Save-ComputerList -TitleDesc "List of Hosts" -TabObject Tab5}) -##*============================================= -##* FORM ADD CLICK FUNCTIONS -##*============================================= -<# - Examples to use (place in function): - - SIMPLE: - Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal - - SEND TO OUTPUT (PASSTHRU): - Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 - $PasstoOutput = Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String - If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} - - OPEN EXTERNAL PS1 - . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") - - USE INTGRATED FUNCTION (EASIEST) - - to log to output box in tab, use -OutputTab switch - - to identify process alias, use -Alias switch, otherwise path will be used instead - - to specify a custom run message use the -CustomRunMsg switch - - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) - - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch - - EXAMPLE (EXE): - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (EXE) with Parameters: - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$env:windir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (PS1): - Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow - -#> -# Set of 6 large buttons under left column -function Call-btnTab5_01{ - $VPX = "$envProgramFilesX86\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe" - Start-ButtonProcess -Path $VPX -OutputTab Tab5 -WindowStyle Normal -} - -function Call-btnTab5_02{ - $VMM = "$envProgramFiles\Microsoft System Center 2012 Virtual Machine Manager\bin\VmmAdminUI.exe" - Start-ButtonProcess -Path $VMM -OutputTab Tab5 -WindowStyle Normal -} - -function Call-btnTab5_03{ - $NetAppSysMgr = "$envProgramFiles\NetApp\OnCommand System Manager\SystemManager.exe" - Start-ButtonProcess -Path $NetAppSysMgr -OutputTab Tab5 -WindowStyle Normal -} - -function Call-btnTab5_04{ - -} - -function Call-btnTab5_05{ - -} - -function Call-btnTab5_06{ - -} - -# Set of 4 small buttons under left column -function Call-btnTab5_07{ - Start-ButtonProcess -Path "%windir%\System32\virtmgmt.msc" -OutputTab Tab5 -WindowStyle Normal -} - -function Call-btnTab5_08{ - -} - - -function Call-btnTab5_09{ - -} - - -function Call-btnTab5_10{ - -} - - -# Set of 4 large buttons under right column -function Call-btnTab5_11{ - -} - -function Call-btnTab5_12{ - -} - -function Call-btnTab5_13{ - -} - -function Call-btnTab5_14{ - -} - -# Set of 12 small buttons under right column -function Call-btnTab5_15{ - Start-ButtonProcess -Path "$envProgramFilesX86\VMware\VMware Horizon View Client\vmware-view.exe" -OutputTab Tab5 -WindowStyle Normal -} - -function Call-btnTab5_16{ - -} - -function Call-btnTab5_17{ - -} - -function Call-btnTab5_18{ - Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab5Name1.Text) -OutputTab Tab4 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab5Name1.Text)" -NeverRunAs -WindowStyle Normal -} - -function Call-btnTab5_19{ - -} - -function Call-btnTab5_20{ - -} - -function Call-btnTab5_21{ - -} - -function Call-btnTab5_22{ - If (Test-Path "$envWinDir\system32\putty.exe"){ - $PuttyPath = "$envWinDir\system32\putty.exe" - } - If (Test-Path $PuttyPath){ - $PuttyPath = "$UtilPath\putty.exe" - } - Else{ - $PuttyPath = "$UtilPath\putty.exe" - } - - If (!$WPFtxtTab5Name1.Text){ - Start-ButtonProcess -ProcessCall exe -FilePath $PuttyPath -CustomRunMsg "Opening [$ButtonClicked], change host and try again to connnect $ButtonClicked to a host'." -OutputTab tab5 -WindowStyle Normal - } - Else{ - If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ - Start-ButtonProcess -ProcessCall exe -FilePath $PuttyPath -Parameters $WPFtxtTab5Name1.Text -CustomRunMsg "connecting [$ButtonClicked] to: $($WPFtxtTab5Name1.Text)" -OutputTab Tab5 -WindowStyle Normal - } - Else { - Write-OutputBox -OutputBoxMessage "Unable to ping host: $($WPFtxtTab5Name1.Text), host may be offline." -Type "ERROR: " -Object Tab5 - } - } -} - -function Call-btnTab5_23{ - -} - -function Call-btnTab5_24{ - -} - -function Call-btnTab5_25{ - -} - -function Call-btnTab5_26{ - -} - - -##*============================================= -##* TAB 1 OTHER FUNCTIONS -##*============================================= - -$WPFtxtTab5Name1.Text = "" - - -##*============================================= -##* BUILD TAB 1 BUTTONS IF CONFIGURED -##*============================================= -$ConfigTab5_Name = $ConfigTab5.Name - -$WPFTab5.Header = $ConfigTab5_Name -$WPFlblTab5Section1.Content = $ConfigTab5.section1Label -$WPFlblTab5Section2.Content = $ConfigTab5.section2Label - -$ConfigTab5_btns = $ConfigTab5.button - - -Foreach ($button in $ConfigTab5_btns){ - - [string]$buttonID = $button.id - If ($AppOptionDebugeMode){Write-Host "Tab5: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} - - If ($buttonID -eq "01"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_01.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_01.IsEnabled = $false} Else {$WPFbtnTab5_01.IsEnabled = $true} - $WPFbtnTextTab5_01.Text = $button.Name - $WPFbtnTab5_01.Background = $button.bgcolor - $WPFbtnTab5_01.Foreground = $button.textcolor - #$WPFbtnTab5_01.Add_Click({Call-btnTab5_01}) - $WPFbtnTab5_01.add_Click({ - $ButtonClicked = $WPFbtnTextTab5_01.Text - Call-btnTab5_01 - }) - } - - If ($buttonID -eq "02"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_02.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_02.IsEnabled = $false} Else {$WPFbtnTab5_02.IsEnabled = $true} - $WPFbtnTextTab5_02.Text = $button.Name - $WPFbtnTab5_02.Background = $button.bgcolor - $WPFbtnTab5_02.Foreground = $button.textcolor - $WPFbtnTab5_02.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_02.Text - Call-btnTab5_02 - }) - } - - If ($buttonID -eq "03"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_03.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_03.IsEnabled = $false} Else {$WPFbtnTab5_03.IsEnabled = $true} - $WPFbtnTextTab5_03.Text = $button.Name - $WPFbtnTab5_03.Background = $button.bgcolor - $WPFbtnTab5_03.Foreground = $button.textcolor - $WPFbtnTab5_03.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_03.Text - Call-btnTab5_03 - }) - } - - If ($buttonID -eq "04"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_04.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_04.IsEnabled = $false} Else {$WPFbtnTab5_04.IsEnabled = $true} - $WPFbtnTextTab5_04.Text = $button.Name - $WPFbtnTab5_04.Background = $button.bgcolor - $WPFbtnTab5_04.Foreground = $button.textcolor - $WPFbtnTab5_04.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_04.Text - Call-btnTab5_04 - }) - } - - If ($buttonID -eq "05"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_05.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_05.IsEnabled = $false} Else {$WPFbtnTab5_05.IsEnabled = $true} - $WPFbtnTextTab5_05.Text = $button.Name - $WPFbtnTab5_05.Background = $button.bgcolor - $WPFbtnTab5_05.Foreground = $button.textcolor - $WPFbtnTab5_05.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_05.Text - Call-btnTab5_05 - }) - } - - If ($buttonID -eq "06"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_06.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_06.IsEnabled = $false} Else {$WPFbtnTab5_06.IsEnabled = $true} - $WPFbtnTextTab5_06.Text = $button.Name - $WPFbtnTab5_06.Background = $button.bgcolor - $WPFbtnTab5_06.Foreground = $button.textcolor - $WPFbtnTab5_06.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_06.Text - Call-btnTab5_06 - }) - } - - If ($buttonID -eq "07"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_07.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_07.IsEnabled = $false} Else {$WPFbtnTab5_07.IsEnabled = $true} - $WPFbtnTextTab5_07.Text = $button.Name - $WPFbtnTab5_07.Background = $button.bgcolor - $WPFbtnTab5_07.Foreground = $button.textcolor - $WPFbtnTab5_07.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_07.Text - Call-btnTab5_07 - }) - } - - If ($buttonID -eq "08"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_08.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_08.IsEnabled = $false} Else {$WPFbtnTab5_08.IsEnabled = $true} - $WPFbtnTextTab5_08.Text = $button.Name - $WPFbtnTab5_08.Background = $button.bgcolor - $WPFbtnTab5_08.Foreground = $button.textcolor - $WPFbtnTab5_08.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_08.Text - Call-btnTab5_08 - }) - } - - If ($buttonID -eq "09"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_09.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_09.IsEnabled = $false} Else {$WPFbtnTab5_09.IsEnabled = $true} - $WPFbtnTextTab5_09.Text = $button.Name - $WPFbtnTab5_09.Background = $button.bgcolor - $WPFbtnTab5_09.Foreground = $button.textcolor - $WPFbtnTab5_09.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_09.Text - Call-btnTab5_09 - }) - } - - If ($buttonID -eq "10"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_10.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_10.IsEnabled = $false} Else {$WPFbtnTab5_10.IsEnabled = $true} - $WPFbtnTextTab5_10.Text = $button.Name - $WPFbtnTab5_10.Background = $button.bgcolor - $WPFbtnTab5_10.Foreground = $button.textcolor - $WPFbtnTab5_10.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_10.Text - Call-btnTab5_10 - }) - } - - If ($buttonID -eq "11"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_11.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_11.IsEnabled = $false} Else {$WPFbtnTab5_11.IsEnabled = $true} - $WPFbtnTextTab5_11.Text = $button.Name - $WPFbtnTab5_11.Background = $button.bgcolor - $WPFbtnTab5_11.Foreground = $button.textcolor - $WPFbtnTab5_11.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_11.Text - Call-btnTab5_11 - }) - } - - If ($buttonID -eq "12"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_12.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_12.IsEnabled = $false} Else {$WPFbtnTab5_12.IsEnabled = $true} - $WPFbtnTextTab5_12.Text = $button.Name - $WPFbtnTab5_12.Background = $button.bgcolor - $WPFbtnTab5_12.Foreground = $button.textcolor - $WPFbtnTab5_12.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_12.Text - Call-btnTab5_12 - }) - } - - If ($buttonID -eq "13"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_13.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_13.IsEnabled = $false} Else {$WPFbtnTab5_13.IsEnabled = $true} - $WPFbtnTextTab5_13.Text = $button.Name - $WPFbtnTab5_13.Background = $button.bgcolor - $WPFbtnTab5_13.Foreground = $button.textcolor - $WPFbtnTab5_13.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_13.Text - Call-btnTab5_13 - }) - } - If ($buttonID -eq "14"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_14.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_14.IsEnabled = $false} Else {$WPFbtnTab5_14.IsEnabled = $true} - $WPFbtnTextTab5_14.Text = $button.Name - $WPFbtnTab5_14.Background = $button.bgcolor - $WPFbtnTab5_14.Foreground = $button.textcolor - $WPFbtnTab5_14.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_14.Text - Call-btnTab5_14 - }) - } - - If ($buttonID -eq "15"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_15.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_15.IsEnabled = $false} Else {$WPFbtnTab5_15.IsEnabled = $true} - $WPFbtnTextTab5_15.Text = $button.Name - $WPFbtnTab5_15.Background = $button.bgcolor - $WPFbtnTab5_15.Foreground = $button.textcolor - $WPFbtnTab5_15.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_15.Text - Call-btnTab5_15 - }) - } - - If ($buttonID -eq "16"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_16.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_16.IsEnabled = $false} Else {$WPFbtnTab5_16.IsEnabled = $true} - $WPFbtnTextTab5_16.Text = $button.Name - $WPFbtnTab5_16.Background = $button.bgcolor - $WPFbtnTab5_16.Foreground = $button.textcolor - $WPFbtnTab5_16.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_16.Text - Call-btnTab5_16 - }) - } - - If ($buttonID -eq "17"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_17.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_17.IsEnabled = $false} Else {$WPFbtnTab5_17.IsEnabled = $true} - $WPFbtnTextTab5_17.Text = $button.Name - $WPFbtnTab5_17.Background = $button.bgcolor - $WPFbtnTab5_17.Foreground = $button.textcolor - $WPFbtnTab5_17.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_17.Text - Call-btnTab5_17 - }) - } - - If ($buttonID -eq "18"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_18.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_18.IsEnabled = $false} Else {$WPFbtnTab5_18.IsEnabled = $true} - $WPFbtnTextTab5_18.Text = $button.Name - $WPFbtnTab5_18.Background = $button.bgcolor - $WPFbtnTab5_18.Foreground = $button.textcolor - $WPFbtnTab5_18.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_18.Text - Call-btnTab5_18 - }) - } - - If ($buttonID -eq "19"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_19.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_19.IsEnabled = $false} Else {$WPFbtnTab5_19.IsEnabled = $true} - $WPFbtnTextTab5_19.Text = $button.Name - $WPFbtnTab5_19.Background = $button.bgcolor - $WPFbtnTab5_19.Foreground = $button.textcolor - $WPFbtnTab5_19.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_19.Text - Call-btnTab5_19 - }) - } - - If ($buttonID -eq "20"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_20.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_20.IsEnabled = $false} Else {$WPFbtnTab5_20.IsEnabled = $true} - $WPFbtnTextTab5_20.Text = $button.Name - $WPFbtnTab5_20.Background = $button.bgcolor - $WPFbtnTab5_20.Foreground = $button.textcolor - $WPFbtnTab5_20.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_20.Text - Call-btnTab5_20 - }) - } - - If ($buttonID -eq "21"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_21.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_21.IsEnabled = $false} Else {$WPFbtnTab5_21.IsEnabled = $true} - $WPFbtnTextTab5_21.Text = $button.Name - $WPFbtnTab5_21.Background = $button.bgcolor - $WPFbtnTab5_21.Foreground = $button.textcolor - $WPFbtnTab5_21.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_21.Text - Call-btnTab5_21 - }) - } - - If ($buttonID -eq "22"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_22.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_22.IsEnabled = $false} Else {$WPFbtnTab5_22.IsEnabled = $true} - $WPFbtnTextTab5_22.Text = $button.Name - $WPFbtnTab5_22.Background = $button.bgcolor - $WPFbtnTab5_22.Foreground = $button.textcolor - $WPFbtnTab5_22.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_22.Text - Call-btnTab5_22 - }) - } - - If ($buttonID -eq "23"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_23.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_23.IsEnabled = $false} Else {$WPFbtnTab5_23.IsEnabled = $true} - $WPFbtnTextTab5_23.Text = $button.Name - $WPFbtnTab5_23.Background = $button.bgcolor - $WPFbtnTab5_23.Foreground = $button.textcolor - $WPFbtnTab5_23.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_23.Text - Call-btnTab5_23 - }) - } - - If ($buttonID -eq "24"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_24.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_24.IsEnabled = $false} Else {$WPFbtnTab5_24.IsEnabled = $true} - $WPFbtnTextTab5_24.Text = $button.Name - $WPFbtnTab5_24.Background = $button.bgcolor - $WPFbtnTab5_24.Foreground = $button.textcolor - $WPFbtnTab5_24.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_24.Text - Call-btnTab5_24 - }) - } - - If ($buttonID -eq "25"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_25.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_25.IsEnabled = $false} Else {$WPFbtnTab5_25.IsEnabled = $true} - $WPFbtnTextTab5_25.Text = $button.Name - $WPFbtnTab5_25.Background = $button.bgcolor - $WPFbtnTab5_25.Foreground = $button.textcolor - $WPFbtnTab5_25.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_25.Text - Call-btnTab5_25 - }) - } - - If ($buttonID -eq "26"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab5_26.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab5_26.IsEnabled = $false} Else {$WPFbtnTab5_26.IsEnabled = $true} - $WPFbtnTextTab5_26.Text = $button.Name - $WPFbtnTab5_26.Background = $button.bgcolor - $WPFbtnTab5_26.Foreground = $button.textcolor - $WPFbtnTab5_26.Add_Click({ - $ButtonClicked = $WPFbtnTextTab5_26.Text - Call-btnTab5_26 - }) - } - -} +##*============================================= +##* LOAD TAB 2 FROM CONFIG +##*============================================= +$ConfigTab5 = $AppMenuTabandButtons.tab[4] +If ($HashNames.Keys -eq "Tab5"){ + Write-Host "Found Tab5 section in Names File" -ForegroundColor Gray + $Tab5HashNames = $HashNames.Tab5 + [string]$Tab5HashList = $Tab5HashNames| out-string -stream + write-Host "`nNames found in list: `n$Tab5HashList" +} +Else{ + Write-Host "No Tab5 section found in names file" -ForegroundColor Gray +} + +$WPFbtnTab5Name1List.add_Click({Save-ComputerList -TitleDesc "List of Hosts" -TabObject Tab5}) +##*============================================= +##* FORM ADD CLICK FUNCTIONS +##*============================================= +<# + Examples to use (place in function): + + SIMPLE: + Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal + + SEND TO OUTPUT (PASSTHRU): + Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 + $PasstoOutput = Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String + If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} + + OPEN EXTERNAL PS1 + . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") + + USE INTGRATED FUNCTION (EASIEST) + - to log to output box in tab, use -OutputTab switch + - to identify process alias, use -Alias switch, otherwise path will be used instead + - to specify a custom run message use the -CustomRunMsg switch + - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) + - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch + + EXAMPLE (EXE): + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (EXE) with Parameters: + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$env:windir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (PS1): + Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow + +#> +# Set of 6 large buttons under left column +function Call-btnTab5_01{ + $VPX = "$envProgramFilesX86\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe" + Start-ButtonProcess -Path $VPX -OutputTab Tab5 -WindowStyle Normal +} + +function Call-btnTab5_02{ + $VMM = "$envProgramFiles\Microsoft System Center 2012 Virtual Machine Manager\bin\VmmAdminUI.exe" + Start-ButtonProcess -Path $VMM -OutputTab Tab5 -WindowStyle Normal +} + +function Call-btnTab5_03{ + $NetAppSysMgr = "$envProgramFiles\NetApp\OnCommand System Manager\SystemManager.exe" + Start-ButtonProcess -Path $NetAppSysMgr -OutputTab Tab5 -WindowStyle Normal +} + +function Call-btnTab5_04{ + +} + +function Call-btnTab5_05{ + +} + +function Call-btnTab5_06{ + +} + +# Set of 4 small buttons under left column +function Call-btnTab5_07{ + Start-ButtonProcess -Path "%windir%\System32\virtmgmt.msc" -OutputTab Tab5 -WindowStyle Normal +} + +function Call-btnTab5_08{ + +} + + +function Call-btnTab5_09{ + +} + + +function Call-btnTab5_10{ + +} + + +# Set of 4 large buttons under right column +function Call-btnTab5_11{ + +} + +function Call-btnTab5_12{ + +} + +function Call-btnTab5_13{ + +} + +function Call-btnTab5_14{ + +} + +# Set of 12 small buttons under right column +function Call-btnTab5_15{ + Start-ButtonProcess -Path "$envProgramFilesX86\VMware\VMware Horizon View Client\vmware-view.exe" -OutputTab Tab5 -WindowStyle Normal +} + +function Call-btnTab5_16{ + +} + +function Call-btnTab5_17{ + +} + +function Call-btnTab5_18{ + Start-ButtonProcess -Path "$envWinDir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtTab5Name1.Text) -OutputTab Tab4 -CustomRunMsg "Opening Remote Desktop Connection for: $($WPFtxtTab5Name1.Text)" -NeverRunAs -WindowStyle Normal +} + +function Call-btnTab5_19{ + +} + +function Call-btnTab5_20{ + +} + +function Call-btnTab5_21{ + +} + +function Call-btnTab5_22{ + If (Test-Path "$envWinDir\system32\putty.exe"){ + $PuttyPath = "$envWinDir\system32\putty.exe" + } + If (Test-Path $PuttyPath){ + $PuttyPath = "$UtilPath\putty.exe" + } + Else{ + $PuttyPath = "$UtilPath\putty.exe" + } + + If (!$WPFtxtTab5Name1.Text){ + Start-ButtonProcess -ProcessCall exe -FilePath $PuttyPath -CustomRunMsg "Opening [$ButtonClicked], change host and try again to connnect $ButtonClicked to a host'." -OutputTab tab5 -WindowStyle Normal + } + Else{ + If (Test-Connection -ComputerName $WPFtxtTab1Name1.Text -Quiet){ + Start-ButtonProcess -ProcessCall exe -FilePath $PuttyPath -Parameters $WPFtxtTab5Name1.Text -CustomRunMsg "connecting [$ButtonClicked] to: $($WPFtxtTab5Name1.Text)" -OutputTab Tab5 -WindowStyle Normal + } + Else { + Write-OutputBox -OutputBoxMessage "Unable to ping host: $($WPFtxtTab5Name1.Text), host may be offline." -Type "ERROR: " -Object Tab5 + } + } +} + +function Call-btnTab5_23{ + +} + +function Call-btnTab5_24{ + +} + +function Call-btnTab5_25{ + +} + +function Call-btnTab5_26{ + +} + + +##*============================================= +##* TAB 1 OTHER FUNCTIONS +##*============================================= + +$WPFtxtTab5Name1.Text = "" + + +##*============================================= +##* BUILD TAB 1 BUTTONS IF CONFIGURED +##*============================================= +$ConfigTab5_Name = $ConfigTab5.Name + +$WPFTab5.Header = $ConfigTab5_Name +$WPFlblTab5Section1.Content = $ConfigTab5.section1Label +$WPFlblTab5Section2.Content = $ConfigTab5.section2Label + +$ConfigTab5_btns = $ConfigTab5.button + + +Foreach ($button in $ConfigTab5_btns){ + + [string]$buttonID = $button.id + If ($AppOptionDebugeMode){Write-Host "Tab5: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} + + If ($buttonID -eq "01"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_01.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_01.IsEnabled = $false} Else {$WPFbtnTab5_01.IsEnabled = $true} + $WPFbtnTextTab5_01.Text = $button.Name + $WPFbtnTab5_01.Background = $button.bgcolor + $WPFbtnTab5_01.Foreground = $button.textcolor + #$WPFbtnTab5_01.Add_Click({Call-btnTab5_01}) + $WPFbtnTab5_01.add_Click({ + $ButtonClicked = $WPFbtnTextTab5_01.Text + Call-btnTab5_01 + }) + } + + If ($buttonID -eq "02"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_02.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_02.IsEnabled = $false} Else {$WPFbtnTab5_02.IsEnabled = $true} + $WPFbtnTextTab5_02.Text = $button.Name + $WPFbtnTab5_02.Background = $button.bgcolor + $WPFbtnTab5_02.Foreground = $button.textcolor + $WPFbtnTab5_02.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_02.Text + Call-btnTab5_02 + }) + } + + If ($buttonID -eq "03"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_03.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_03.IsEnabled = $false} Else {$WPFbtnTab5_03.IsEnabled = $true} + $WPFbtnTextTab5_03.Text = $button.Name + $WPFbtnTab5_03.Background = $button.bgcolor + $WPFbtnTab5_03.Foreground = $button.textcolor + $WPFbtnTab5_03.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_03.Text + Call-btnTab5_03 + }) + } + + If ($buttonID -eq "04"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_04.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_04.IsEnabled = $false} Else {$WPFbtnTab5_04.IsEnabled = $true} + $WPFbtnTextTab5_04.Text = $button.Name + $WPFbtnTab5_04.Background = $button.bgcolor + $WPFbtnTab5_04.Foreground = $button.textcolor + $WPFbtnTab5_04.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_04.Text + Call-btnTab5_04 + }) + } + + If ($buttonID -eq "05"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_05.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_05.IsEnabled = $false} Else {$WPFbtnTab5_05.IsEnabled = $true} + $WPFbtnTextTab5_05.Text = $button.Name + $WPFbtnTab5_05.Background = $button.bgcolor + $WPFbtnTab5_05.Foreground = $button.textcolor + $WPFbtnTab5_05.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_05.Text + Call-btnTab5_05 + }) + } + + If ($buttonID -eq "06"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_06.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_06.IsEnabled = $false} Else {$WPFbtnTab5_06.IsEnabled = $true} + $WPFbtnTextTab5_06.Text = $button.Name + $WPFbtnTab5_06.Background = $button.bgcolor + $WPFbtnTab5_06.Foreground = $button.textcolor + $WPFbtnTab5_06.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_06.Text + Call-btnTab5_06 + }) + } + + If ($buttonID -eq "07"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_07.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_07.IsEnabled = $false} Else {$WPFbtnTab5_07.IsEnabled = $true} + $WPFbtnTextTab5_07.Text = $button.Name + $WPFbtnTab5_07.Background = $button.bgcolor + $WPFbtnTab5_07.Foreground = $button.textcolor + $WPFbtnTab5_07.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_07.Text + Call-btnTab5_07 + }) + } + + If ($buttonID -eq "08"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_08.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_08.IsEnabled = $false} Else {$WPFbtnTab5_08.IsEnabled = $true} + $WPFbtnTextTab5_08.Text = $button.Name + $WPFbtnTab5_08.Background = $button.bgcolor + $WPFbtnTab5_08.Foreground = $button.textcolor + $WPFbtnTab5_08.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_08.Text + Call-btnTab5_08 + }) + } + + If ($buttonID -eq "09"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_09.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_09.IsEnabled = $false} Else {$WPFbtnTab5_09.IsEnabled = $true} + $WPFbtnTextTab5_09.Text = $button.Name + $WPFbtnTab5_09.Background = $button.bgcolor + $WPFbtnTab5_09.Foreground = $button.textcolor + $WPFbtnTab5_09.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_09.Text + Call-btnTab5_09 + }) + } + + If ($buttonID -eq "10"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_10.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_10.IsEnabled = $false} Else {$WPFbtnTab5_10.IsEnabled = $true} + $WPFbtnTextTab5_10.Text = $button.Name + $WPFbtnTab5_10.Background = $button.bgcolor + $WPFbtnTab5_10.Foreground = $button.textcolor + $WPFbtnTab5_10.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_10.Text + Call-btnTab5_10 + }) + } + + If ($buttonID -eq "11"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_11.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_11.IsEnabled = $false} Else {$WPFbtnTab5_11.IsEnabled = $true} + $WPFbtnTextTab5_11.Text = $button.Name + $WPFbtnTab5_11.Background = $button.bgcolor + $WPFbtnTab5_11.Foreground = $button.textcolor + $WPFbtnTab5_11.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_11.Text + Call-btnTab5_11 + }) + } + + If ($buttonID -eq "12"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_12.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_12.IsEnabled = $false} Else {$WPFbtnTab5_12.IsEnabled = $true} + $WPFbtnTextTab5_12.Text = $button.Name + $WPFbtnTab5_12.Background = $button.bgcolor + $WPFbtnTab5_12.Foreground = $button.textcolor + $WPFbtnTab5_12.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_12.Text + Call-btnTab5_12 + }) + } + + If ($buttonID -eq "13"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_13.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_13.IsEnabled = $false} Else {$WPFbtnTab5_13.IsEnabled = $true} + $WPFbtnTextTab5_13.Text = $button.Name + $WPFbtnTab5_13.Background = $button.bgcolor + $WPFbtnTab5_13.Foreground = $button.textcolor + $WPFbtnTab5_13.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_13.Text + Call-btnTab5_13 + }) + } + If ($buttonID -eq "14"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_14.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_14.IsEnabled = $false} Else {$WPFbtnTab5_14.IsEnabled = $true} + $WPFbtnTextTab5_14.Text = $button.Name + $WPFbtnTab5_14.Background = $button.bgcolor + $WPFbtnTab5_14.Foreground = $button.textcolor + $WPFbtnTab5_14.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_14.Text + Call-btnTab5_14 + }) + } + + If ($buttonID -eq "15"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_15.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_15.IsEnabled = $false} Else {$WPFbtnTab5_15.IsEnabled = $true} + $WPFbtnTextTab5_15.Text = $button.Name + $WPFbtnTab5_15.Background = $button.bgcolor + $WPFbtnTab5_15.Foreground = $button.textcolor + $WPFbtnTab5_15.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_15.Text + Call-btnTab5_15 + }) + } + + If ($buttonID -eq "16"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_16.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_16.IsEnabled = $false} Else {$WPFbtnTab5_16.IsEnabled = $true} + $WPFbtnTextTab5_16.Text = $button.Name + $WPFbtnTab5_16.Background = $button.bgcolor + $WPFbtnTab5_16.Foreground = $button.textcolor + $WPFbtnTab5_16.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_16.Text + Call-btnTab5_16 + }) + } + + If ($buttonID -eq "17"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_17.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_17.IsEnabled = $false} Else {$WPFbtnTab5_17.IsEnabled = $true} + $WPFbtnTextTab5_17.Text = $button.Name + $WPFbtnTab5_17.Background = $button.bgcolor + $WPFbtnTab5_17.Foreground = $button.textcolor + $WPFbtnTab5_17.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_17.Text + Call-btnTab5_17 + }) + } + + If ($buttonID -eq "18"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_18.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_18.IsEnabled = $false} Else {$WPFbtnTab5_18.IsEnabled = $true} + $WPFbtnTextTab5_18.Text = $button.Name + $WPFbtnTab5_18.Background = $button.bgcolor + $WPFbtnTab5_18.Foreground = $button.textcolor + $WPFbtnTab5_18.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_18.Text + Call-btnTab5_18 + }) + } + + If ($buttonID -eq "19"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_19.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_19.IsEnabled = $false} Else {$WPFbtnTab5_19.IsEnabled = $true} + $WPFbtnTextTab5_19.Text = $button.Name + $WPFbtnTab5_19.Background = $button.bgcolor + $WPFbtnTab5_19.Foreground = $button.textcolor + $WPFbtnTab5_19.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_19.Text + Call-btnTab5_19 + }) + } + + If ($buttonID -eq "20"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_20.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_20.IsEnabled = $false} Else {$WPFbtnTab5_20.IsEnabled = $true} + $WPFbtnTextTab5_20.Text = $button.Name + $WPFbtnTab5_20.Background = $button.bgcolor + $WPFbtnTab5_20.Foreground = $button.textcolor + $WPFbtnTab5_20.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_20.Text + Call-btnTab5_20 + }) + } + + If ($buttonID -eq "21"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_21.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_21.IsEnabled = $false} Else {$WPFbtnTab5_21.IsEnabled = $true} + $WPFbtnTextTab5_21.Text = $button.Name + $WPFbtnTab5_21.Background = $button.bgcolor + $WPFbtnTab5_21.Foreground = $button.textcolor + $WPFbtnTab5_21.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_21.Text + Call-btnTab5_21 + }) + } + + If ($buttonID -eq "22"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_22.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_22.IsEnabled = $false} Else {$WPFbtnTab5_22.IsEnabled = $true} + $WPFbtnTextTab5_22.Text = $button.Name + $WPFbtnTab5_22.Background = $button.bgcolor + $WPFbtnTab5_22.Foreground = $button.textcolor + $WPFbtnTab5_22.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_22.Text + Call-btnTab5_22 + }) + } + + If ($buttonID -eq "23"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_23.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_23.IsEnabled = $false} Else {$WPFbtnTab5_23.IsEnabled = $true} + $WPFbtnTextTab5_23.Text = $button.Name + $WPFbtnTab5_23.Background = $button.bgcolor + $WPFbtnTab5_23.Foreground = $button.textcolor + $WPFbtnTab5_23.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_23.Text + Call-btnTab5_23 + }) + } + + If ($buttonID -eq "24"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_24.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_24.IsEnabled = $false} Else {$WPFbtnTab5_24.IsEnabled = $true} + $WPFbtnTextTab5_24.Text = $button.Name + $WPFbtnTab5_24.Background = $button.bgcolor + $WPFbtnTab5_24.Foreground = $button.textcolor + $WPFbtnTab5_24.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_24.Text + Call-btnTab5_24 + }) + } + + If ($buttonID -eq "25"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_25.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_25.IsEnabled = $false} Else {$WPFbtnTab5_25.IsEnabled = $true} + $WPFbtnTextTab5_25.Text = $button.Name + $WPFbtnTab5_25.Background = $button.bgcolor + $WPFbtnTab5_25.Foreground = $button.textcolor + $WPFbtnTab5_25.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_25.Text + Call-btnTab5_25 + }) + } + + If ($buttonID -eq "26"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab5_26.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab5_26.IsEnabled = $false} Else {$WPFbtnTab5_26.IsEnabled = $true} + $WPFbtnTextTab5_26.Text = $button.Name + $WPFbtnTab5_26.Background = $button.bgcolor + $WPFbtnTab5_26.Foreground = $button.textcolor + $WPFbtnTab5_26.Add_Click({ + $ButtonClicked = $WPFbtnTextTab5_26.Text + Call-btnTab5_26 + }) + } + +} If ($ConfigTab5.enable -eq "false"){$WPFTab5.Visibility = 'Hidden'} Else {$WPFTab5.Visibility = 'Visible'} \ No newline at end of file diff --git a/App/Extensions/TabControl/AdminMenu-Tab6.ps1 b/Extensions/TabControl/AdminMenu-Tab6.ps1 similarity index 95% rename from App/Extensions/TabControl/AdminMenu-Tab6.ps1 rename to Extensions/TabControl/AdminMenu-Tab6.ps1 index 6b16b94..25fd44f 100644 --- a/App/Extensions/TabControl/AdminMenu-Tab6.ps1 +++ b/Extensions/TabControl/AdminMenu-Tab6.ps1 @@ -1,500 +1,500 @@ -##*============================================= -##* LOAD TAB 2 FROM CONFIG -##*============================================= -$ConfigTab6 = $AppMenuTabandButtons.tab[5] - -##*============================================= -##* FORM ADD CLICK FUNCTIONS -##*============================================= -<# - Examples to use (place in function): - - SIMPLE: - Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal - - SEND TO OUTPUT (PASSTHRU): - Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 - $PasstoOutput = Start-Process -FilePath "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String - If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} - - OPEN EXTERNAL PS1 - . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") - - USE INTGRATED FUNCTION (EASIEST) - - to log to output box in tab, use -OutputTab switch - - to identify process alias, use -Alias switch, otherwise path will be used instead - - to specify a custom run message use the -CustomRunMsg switch - - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) - - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch - - EXAMPLE (EXE): - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (EXE) with Parameters: - Start-ButtonProcess -Alias "$ButtonClicked" -Path "$env:windir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal - - EXAMPLE (PS1): - Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow - -#> -function Call-btnTab6_01{ - Start-ButtonProcess -ProcessCall invoke -File "ClipboardHistoryViewer.ps1" -OutputTab tab1 -CreateNoWindow -} - -function Call-btnTab6_02{ -} - -function Call-btnTab6_03{ - Start-ButtonProcess -ProcessCall ps1 -File "PowerCopy.ps1" -OutputTab tab1 -CreateNoWindow -} - -function Call-btnTab6_04{ - -} - -function Call-btnTab6_05{ - -} - -function Call-btnTab6_06{ - Start-ButtonProcess -ProcessCall invoke -File "GetDiskSpaceMultipleComputers.ps1" -OutputTab tab1 -CreateNoWindow -} - -function Call-btnTab6_07{ - Start-ButtonProcess -ProcessCall ps1 -File "Convert-Image.ps1" -OutputTab tab1 -CreateNoWindow -} - -function Call-btnTab6_08{ - Start-ButtonProcess -ProcessCall ps1 -File "Generate-Password.ps1" -OutputTab tab1 -CreateNoWindow -} - - -function Call-btnTab6_09{ - Start-ButtonProcess -ProcessCall ps1 -File "NetworkPing.ps1" -OutputTab tab1 -CreateNoWindow -} - - -function Call-btnTab6_10{ - Start-ButtonProcess -Path "$UtilPath\NetCalc.exe" -OutputTab tab1 -WindowStyle Normal -} - -function Call-btnTab6_11{ - -} - -function Call-btnTab6_12{ - -} - -function Call-btnTab6_13{ - -} - -function Call-btnTab6_14{ - -} - -function Call-btnTab6_15{ - -} - -function Call-btnTab6_16{ - -} - -function Call-btnTab6_17{ - Start-ButtonProcess -ProcessCall ps1 -File "LazyWinAdmin-v0.4.ps1" -WorkingScriptDirectory "LazyWinAdmin-v0.4" -OutputTab tab1 -CreateNoWindow -} - -function Call-btnTab6_18{ - -} - -function Call-btnTab6_19{ - -} - -function Call-btnTab6_20{ - -} - -function Call-btnTab6_21{ - -} - -function Call-btnTab6_22{ - -} - -function Call-btnTab6_23{ - -} - -function Call-btnTab6_24{ - Start-ButtonProcess -ProcessCall ps1 -File "Show-PSHelpTree.ps1" -OutputTab tab1 -CreateNoWindow -} - - -##*============================================= -##* TAB 1 OTHER FUNCTIONS -##*============================================= - - - - -##*============================================= -##* BUILD TAB 1 BUTTONS IF CONFIGURED -##*============================================= -$ConfigTab6_Name = $ConfigTab6.Name - -$WPFTab6.Header = $ConfigTab6_Name -$WPFlblTab6Section1.Content = $ConfigTab6.section1Label - -$ConfigTab6_btns = $ConfigTab6.button - - -Foreach ($button in $ConfigTab6_btns){ - - [string]$buttonID = $button.id - If ($AppOptionDebugeMode){Write-Host "Tab6: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} - - If ($buttonID -eq "01"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_01.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_01.IsEnabled = $false} Else {$WPFbtnTab6_01.IsEnabled = $true} - $WPFbtnTextTab6_01.Text = $button.Name - $WPFbtnTab6_01.Background = $button.bgcolor - $WPFbtnTab6_01.Foreground = $button.textcolor - #$WPFbtnTab6_01.Add_Click({Call-btnTab6_01}) - $WPFbtnTab6_01.add_Click({ - $ButtonClicked = $WPFbtnTextTab6_01.Text - Call-btnTab6_01 - }) - } - - If ($buttonID -eq "02"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_02.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_02.IsEnabled = $false} Else {$WPFbtnTab6_02.IsEnabled = $true} - $WPFbtnTextTab6_02.Text = $button.Name - $WPFbtnTab6_02.Background = $button.bgcolor - $WPFbtnTab6_02.Foreground = $button.textcolor - $WPFbtnTab6_02.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_02.Text - Call-btnTab6_02 - }) - } - - If ($buttonID -eq "03"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_03.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_03.IsEnabled = $false} Else {$WPFbtnTab6_03.IsEnabled = $true} - $WPFbtnTextTab6_03.Text = $button.Name - $WPFbtnTab6_03.Background = $button.bgcolor - $WPFbtnTab6_03.Foreground = $button.textcolor - $WPFbtnTab6_03.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_03.Text - Call-btnTab6_03 - }) - } - - If ($buttonID -eq "04"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_04.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_04.IsEnabled = $false} Else {$WPFbtnTab6_04.IsEnabled = $true} - $WPFbtnTextTab6_04.Text = $button.Name - $WPFbtnTab6_04.Background = $button.bgcolor - $WPFbtnTab6_04.Foreground = $button.textcolor - $WPFbtnTab6_04.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_04.Text - Call-btnTab6_04 - }) - } - - If ($buttonID -eq "05"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_05.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_05.IsEnabled = $false} Else {$WPFbtnTab6_05.IsEnabled = $true} - $WPFbtnTextTab6_05.Text = $button.Name - $WPFbtnTab6_05.Background = $button.bgcolor - $WPFbtnTab6_05.Foreground = $button.textcolor - $WPFbtnTab6_05.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_05.Text - Call-btnTab6_05 - }) - } - - If ($buttonID -eq "06"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_06.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_06.IsEnabled = $false} Else {$WPFbtnTab6_06.IsEnabled = $true} - $WPFbtnTextTab6_06.Text = $button.Name - $WPFbtnTab6_06.Background = $button.bgcolor - $WPFbtnTab6_06.Foreground = $button.textcolor - $WPFbtnTab6_06.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_06.Text - Call-btnTab6_06 - }) - } - - If ($buttonID -eq "07"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_07.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_07.IsEnabled = $false} Else {$WPFbtnTab6_07.IsEnabled = $true} - $WPFbtnTextTab6_07.Text = $button.Name - $WPFbtnTab6_07.Background = $button.bgcolor - $WPFbtnTab6_07.Foreground = $button.textcolor - $WPFbtnTab6_07.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_07.Text - Call-btnTab6_07 - }) - } - - If ($buttonID -eq "08"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_08.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_08.IsEnabled = $false} Else {$WPFbtnTab6_08.IsEnabled = $true} - $WPFbtnTextTab6_08.Text = $button.Name - $WPFbtnTab6_08.Background = $button.bgcolor - $WPFbtnTab6_08.Foreground = $button.textcolor - $WPFbtnTab6_08.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_08.Text - Call-btnTab6_08 - }) - } - - If ($buttonID -eq "09"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_09.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_09.IsEnabled = $false} Else {$WPFbtnTab6_09.IsEnabled = $true} - $WPFbtnTextTab6_09.Text = $button.Name - $WPFbtnTab6_09.Background = $button.bgcolor - $WPFbtnTab6_09.Foreground = $button.textcolor - $WPFbtnTab6_09.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_09.Text - Call-btnTab6_09 - }) - } - - If ($buttonID -eq "10"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_10.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_10.IsEnabled = $false} Else {$WPFbtnTab6_10.IsEnabled = $true} - $WPFbtnTextTab6_10.Text = $button.Name - $WPFbtnTab6_10.Background = $button.bgcolor - $WPFbtnTab6_10.Foreground = $button.textcolor - $WPFbtnTab6_10.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_10.Text - Call-btnTab6_10 - }) - } - - If ($buttonID -eq "11"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_11.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_11.IsEnabled = $false} Else {$WPFbtnTab6_11.IsEnabled = $true} - $WPFbtnTextTab6_11.Text = $button.Name - $WPFbtnTab6_11.Background = $button.bgcolor - $WPFbtnTab6_11.Foreground = $button.textcolor - $WPFbtnTab6_11.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_11.Text - Call-btnTab6_11 - }) - } - - If ($buttonID -eq "12"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_12.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_12.IsEnabled = $false} Else {$WPFbtnTab6_12.IsEnabled = $true} - $WPFbtnTextTab6_12.Text = $button.Name - $WPFbtnTab6_12.Background = $button.bgcolor - $WPFbtnTab6_12.Foreground = $button.textcolor - $WPFbtnTab6_12.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_12.Text - Call-btnTab6_12 - }) - } - - If ($buttonID -eq "13"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_13.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_13.IsEnabled = $false} Else {$WPFbtnTab6_13.IsEnabled = $true} - $WPFbtnTextTab6_13.Text = $button.Name - $WPFbtnTab6_13.Background = $button.bgcolor - $WPFbtnTab6_13.Foreground = $button.textcolor - $WPFbtnTab6_13.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_13.Text - Call-btnTab6_13 - }) - } - If ($buttonID -eq "14"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_14.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_14.IsEnabled = $false} Else {$WPFbtnTab6_14.IsEnabled = $true} - $WPFbtnTextTab6_14.Text = $button.Name - $WPFbtnTab6_14.Background = $button.bgcolor - $WPFbtnTab6_14.Foreground = $button.textcolor - $WPFbtnTab6_14.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_14.Text - Call-btnTab6_14 - }) - } - - If ($buttonID -eq "15"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_15.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_15.IsEnabled = $false} Else {$WPFbtnTab6_15.IsEnabled = $true} - $WPFbtnTextTab6_15.Text = $button.Name - $WPFbtnTab6_15.Background = $button.bgcolor - $WPFbtnTab6_15.Foreground = $button.textcolor - $WPFbtnTab6_15.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_15.Text - Call-btnTab6_15 - }) - } - - If ($buttonID -eq "16"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_16.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_16.IsEnabled = $false} Else {$WPFbtnTab6_16.IsEnabled = $true} - $WPFbtnTextTab6_16.Text = $button.Name - $WPFbtnTab6_16.Background = $button.bgcolor - $WPFbtnTab6_16.Foreground = $button.textcolor - $WPFbtnTab6_16.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_16.Text - Call-btnTab6_16 - }) - } - - If ($buttonID -eq "17"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_17.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_17.IsEnabled = $false} Else {$WPFbtnTab6_17.IsEnabled = $true} - $WPFbtnTextTab6_17.Text = $button.Name - $WPFbtnTab6_17.Background = $button.bgcolor - $WPFbtnTab6_17.Foreground = $button.textcolor - $WPFbtnTab6_17.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_17.Text - Call-btnTab6_17 - }) - } - - If ($buttonID -eq "18"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_18.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_18.IsEnabled = $false} Else {$WPFbtnTab6_18.IsEnabled = $true} - $WPFbtnTextTab6_18.Text = $button.Name - $WPFbtnTab6_18.Background = $button.bgcolor - $WPFbtnTab6_18.Foreground = $button.textcolor - $WPFbtnTab6_18.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_18.Text - Call-btnTab6_18 - }) - } - - If ($buttonID -eq "19"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_19.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_19.IsEnabled = $false} Else {$WPFbtnTab6_19.IsEnabled = $true} - $WPFbtnTextTab6_19.Text = $button.Name - $WPFbtnTab6_19.Background = $button.bgcolor - $WPFbtnTab6_19.Foreground = $button.textcolor - $WPFbtnTab6_19.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_19.Text - Call-btnTab6_19 - }) - } - - If ($buttonID -eq "20"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_20.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_20.IsEnabled = $false} Else {$WPFbtnTab6_20.IsEnabled = $true} - $WPFbtnTextTab6_20.Text = $button.Name - $WPFbtnTab6_20.Background = $button.bgcolor - $WPFbtnTab6_20.Foreground = $button.textcolor - $WPFbtnTab6_20.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_20.Text - Call-btnTab6_20 - }) - } - - If ($buttonID -eq "21"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_21.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_21.IsEnabled = $false} Else {$WPFbtnTab6_21.IsEnabled = $true} - $WPFbtnTextTab6_21.Text = $button.Name - $WPFbtnTab6_21.Background = $button.bgcolor - $WPFbtnTab6_21.Foreground = $button.textcolor - $WPFbtnTab6_21.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_21.Text - Call-btnTab6_21 - }) - } - - If ($buttonID -eq "22"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_22.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_22.IsEnabled = $false} Else {$WPFbtnTab6_22.IsEnabled = $true} - $WPFbtnTextTab6_22.Text = $button.Name - $WPFbtnTab6_22.Background = $button.bgcolor - $WPFbtnTab6_22.Foreground = $button.textcolor - $WPFbtnTab6_22.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_22.Text - Call-btnTab6_22 - }) - } - - If ($buttonID -eq "23"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_23.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_23.IsEnabled = $false} Else {$WPFbtnTab6_23.IsEnabled = $true} - $WPFbtnTextTab6_23.Text = $button.Name - $WPFbtnTab6_23.Background = $button.bgcolor - $WPFbtnTab6_23.Foreground = $button.textcolor - $WPFbtnTab6_23.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_23.Text - Call-btnTab6_23 - }) - } - - If ($buttonID -eq "24"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_24.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_24.IsEnabled = $false} Else {$WPFbtnTab6_24.IsEnabled = $true} - $WPFbtnTextTab6_24.Text = $button.Name - $WPFbtnTab6_24.Background = $button.bgcolor - $WPFbtnTab6_24.Foreground = $button.textcolor - $WPFbtnTab6_24.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_24.Text - Call-btnTab6_24 - }) - } - - If ($buttonID -eq "25"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_25.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_25.IsEnabled = $false} Else {$WPFbtnTab6_25.IsEnabled = $true} - $WPFbtnTextTab6_25.Text = $button.Name - $WPFbtnTab6_25.Background = $button.bgcolor - $WPFbtnTab6_25.Foreground = $button.textcolor - $WPFbtnTab6_25.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_25.Text - Call-btnTab6_25 - }) - } - - If ($buttonID -eq "26"){ - If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} - $WPFbtnTab6_26.Visibility = 'Visible' - If ($button.enable -eq "false"){$WPFbtnTab6_26.IsEnabled = $false} Else {$WPFbtnTab6_26.IsEnabled = $true} - $WPFbtnTextTab6_26.Text = $button.Name - $WPFbtnTab6_26.Background = $button.bgcolor - $WPFbtnTab6_26.Foreground = $button.textcolor - $WPFbtnTab6_26.Add_Click({ - $ButtonClicked = $WPFbtnTextTab6_26.Text - Call-btnTab6_26 - }) - } - -} +##*============================================= +##* LOAD TAB 2 FROM CONFIG +##*============================================= +$ConfigTab6 = $AppMenuTabandButtons.tab[5] + +##*============================================= +##* FORM ADD CLICK FUNCTIONS +##*============================================= +<# + Examples to use (place in function): + + SIMPLE: + Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal + + SEND TO OUTPUT (PASSTHRU): + Write-OutputBox -OutputBoxMessage "Opening Powershell window." -Type "START: " -Object Tab1 + $PasstoOutput = Start-Process -File "$PSHOME\PowerShell.exe" -WindowStyle Normal -PassThru | Out-String + If ($AppOptionDebugeMode){Write-OutputBox -OutputBoxMessage $PasstoOutput -Type "INFO: " -Object Tab1} + + OPEN EXTERNAL PS1 + . ($scriptRoot + "\Scripts\ClipboardHistoryViewer.ps1") + + USE INTGRATED FUNCTION (EASIEST) + - to log to output box in tab, use -OutputTab switch + - to identify process alias, use -Alias switch, otherwise path will be used instead + - to specify a custom run message use the -CustomRunMsg switch + - to specify a custom error message use the -CustomErrMsg switch (this will only display if errors) + - Auto use credentials feature if selected in menu, you can force it not to by adding -NeverRunAs switch + + EXAMPLE (EXE): + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$PSHOME\PowerShell.exe" -WorkingDirectory "$envWinDir\System32" -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (EXE) with Parameters: + Start-ButtonProcess -Alias "$ButtonClicked" -Path "$env:windir\system32\mstsc.exe" -Parameters ("/v:" + $WPFtxtBoxRemote.Text) -OutputTab tab1 -WindowStyle Normal + + EXAMPLE (PS1): + Start-ButtonProcess -ProcessCall ps1 -File "Start-PoshPAIG.ps1" -WorkingDirectory "$($scriptRoot + "\Scripts\PoshPAIG_2_1_5")" -CreateNoWindow + +#> +function Call-btnTab6_01{ + Start-ButtonProcess -ProcessCall ps1 -File "ClipboardHistoryViewer.ps1" -OutputTab tab1 +} + +function Call-btnTab6_02{ +} + +function Call-btnTab6_03{ + Start-ButtonProcess -ProcessCall ps1 -File "PowerCopy.ps1" -OutputTab tab1 -CreateNoWindow +} + +function Call-btnTab6_04{ + +} + +function Call-btnTab6_05{ + +} + +function Call-btnTab6_06{ + Start-ButtonProcess -ProcessCall invoke -File "GetDiskSpaceMultipleComputers.ps1" -OutputTab tab1 -CreateNoWindow +} + +function Call-btnTab6_07{ + Start-ButtonProcess -ProcessCall ps1 -File "Convert-Image.ps1" -OutputTab tab1 -CreateNoWindow +} + +function Call-btnTab6_08{ + Start-ButtonProcess -ProcessCall ps1 -File "Generate-Password.ps1" -OutputTab tab1 -CreateNoWindow +} + + +function Call-btnTab6_09{ + Start-ButtonProcess -ProcessCall ps1 -File "NetworkPing.ps1" -OutputTab tab1 -CreateNoWindow +} + + +function Call-btnTab6_10{ + Start-ButtonProcess -Path "$UtilPath\NetCalc.exe" -OutputTab tab1 -WindowStyle Normal +} + +function Call-btnTab6_11{ + +} + +function Call-btnTab6_12{ + +} + +function Call-btnTab6_13{ + +} + +function Call-btnTab6_14{ + +} + +function Call-btnTab6_15{ + +} + +function Call-btnTab6_16{ + +} + +function Call-btnTab6_17{ + +} + +function Call-btnTab6_18{ + +} + +function Call-btnTab6_19{ + +} + +function Call-btnTab6_20{ + +} + +function Call-btnTab6_21{ + +} + +function Call-btnTab6_22{ + +} + +function Call-btnTab6_23{ + +} + +function Call-btnTab6_24{ + Start-ButtonProcess -ProcessCall ps1 -File "Show-PSHelpTree.ps1" -OutputTab tab1 -CreateNoWindow +} + + +##*============================================= +##* TAB 1 OTHER FUNCTIONS +##*============================================= + + + + +##*============================================= +##* BUILD TAB 1 BUTTONS IF CONFIGURED +##*============================================= +$ConfigTab6_Name = $ConfigTab6.Name + +$WPFTab6.Header = $ConfigTab6_Name +$WPFlblTab6Section1.Content = $ConfigTab6.section1Label + +$ConfigTab6_btns = $ConfigTab6.button + + +Foreach ($button in $ConfigTab6_btns){ + + [string]$buttonID = $button.id + If ($AppOptionDebugeMode){Write-Host "Tab6: Parsing 'button $buttonID' configurations" -ForegroundColor Gray} + + If ($buttonID -eq "01"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_01.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_01.IsEnabled = $false} Else {$WPFbtnTab6_01.IsEnabled = $true} + $WPFbtnTextTab6_01.Text = $button.Name + $WPFbtnTab6_01.Background = $button.bgcolor + $WPFbtnTab6_01.Foreground = $button.textcolor + #$WPFbtnTab6_01.Add_Click({Call-btnTab6_01}) + $WPFbtnTab6_01.add_Click({ + $ButtonClicked = $WPFbtnTextTab6_01.Text + Call-btnTab6_01 + }) + } + + If ($buttonID -eq "02"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_02.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_02.IsEnabled = $false} Else {$WPFbtnTab6_02.IsEnabled = $true} + $WPFbtnTextTab6_02.Text = $button.Name + $WPFbtnTab6_02.Background = $button.bgcolor + $WPFbtnTab6_02.Foreground = $button.textcolor + $WPFbtnTab6_02.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_02.Text + Call-btnTab6_02 + }) + } + + If ($buttonID -eq "03"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_03.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_03.IsEnabled = $false} Else {$WPFbtnTab6_03.IsEnabled = $true} + $WPFbtnTextTab6_03.Text = $button.Name + $WPFbtnTab6_03.Background = $button.bgcolor + $WPFbtnTab6_03.Foreground = $button.textcolor + $WPFbtnTab6_03.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_03.Text + Call-btnTab6_03 + }) + } + + If ($buttonID -eq "04"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_04.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_04.IsEnabled = $false} Else {$WPFbtnTab6_04.IsEnabled = $true} + $WPFbtnTextTab6_04.Text = $button.Name + $WPFbtnTab6_04.Background = $button.bgcolor + $WPFbtnTab6_04.Foreground = $button.textcolor + $WPFbtnTab6_04.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_04.Text + Call-btnTab6_04 + }) + } + + If ($buttonID -eq "05"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_05.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_05.IsEnabled = $false} Else {$WPFbtnTab6_05.IsEnabled = $true} + $WPFbtnTextTab6_05.Text = $button.Name + $WPFbtnTab6_05.Background = $button.bgcolor + $WPFbtnTab6_05.Foreground = $button.textcolor + $WPFbtnTab6_05.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_05.Text + Call-btnTab6_05 + }) + } + + If ($buttonID -eq "06"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_06.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_06.IsEnabled = $false} Else {$WPFbtnTab6_06.IsEnabled = $true} + $WPFbtnTextTab6_06.Text = $button.Name + $WPFbtnTab6_06.Background = $button.bgcolor + $WPFbtnTab6_06.Foreground = $button.textcolor + $WPFbtnTab6_06.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_06.Text + Call-btnTab6_06 + }) + } + + If ($buttonID -eq "07"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_07.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_07.IsEnabled = $false} Else {$WPFbtnTab6_07.IsEnabled = $true} + $WPFbtnTextTab6_07.Text = $button.Name + $WPFbtnTab6_07.Background = $button.bgcolor + $WPFbtnTab6_07.Foreground = $button.textcolor + $WPFbtnTab6_07.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_07.Text + Call-btnTab6_07 + }) + } + + If ($buttonID -eq "08"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_08.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_08.IsEnabled = $false} Else {$WPFbtnTab6_08.IsEnabled = $true} + $WPFbtnTextTab6_08.Text = $button.Name + $WPFbtnTab6_08.Background = $button.bgcolor + $WPFbtnTab6_08.Foreground = $button.textcolor + $WPFbtnTab6_08.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_08.Text + Call-btnTab6_08 + }) + } + + If ($buttonID -eq "09"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_09.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_09.IsEnabled = $false} Else {$WPFbtnTab6_09.IsEnabled = $true} + $WPFbtnTextTab6_09.Text = $button.Name + $WPFbtnTab6_09.Background = $button.bgcolor + $WPFbtnTab6_09.Foreground = $button.textcolor + $WPFbtnTab6_09.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_09.Text + Call-btnTab6_09 + }) + } + + If ($buttonID -eq "10"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_10.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_10.IsEnabled = $false} Else {$WPFbtnTab6_10.IsEnabled = $true} + $WPFbtnTextTab6_10.Text = $button.Name + $WPFbtnTab6_10.Background = $button.bgcolor + $WPFbtnTab6_10.Foreground = $button.textcolor + $WPFbtnTab6_10.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_10.Text + Call-btnTab6_10 + }) + } + + If ($buttonID -eq "11"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_11.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_11.IsEnabled = $false} Else {$WPFbtnTab6_11.IsEnabled = $true} + $WPFbtnTextTab6_11.Text = $button.Name + $WPFbtnTab6_11.Background = $button.bgcolor + $WPFbtnTab6_11.Foreground = $button.textcolor + $WPFbtnTab6_11.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_11.Text + Call-btnTab6_11 + }) + } + + If ($buttonID -eq "12"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_12.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_12.IsEnabled = $false} Else {$WPFbtnTab6_12.IsEnabled = $true} + $WPFbtnTextTab6_12.Text = $button.Name + $WPFbtnTab6_12.Background = $button.bgcolor + $WPFbtnTab6_12.Foreground = $button.textcolor + $WPFbtnTab6_12.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_12.Text + Call-btnTab6_12 + }) + } + + If ($buttonID -eq "13"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_13.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_13.IsEnabled = $false} Else {$WPFbtnTab6_13.IsEnabled = $true} + $WPFbtnTextTab6_13.Text = $button.Name + $WPFbtnTab6_13.Background = $button.bgcolor + $WPFbtnTab6_13.Foreground = $button.textcolor + $WPFbtnTab6_13.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_13.Text + Call-btnTab6_13 + }) + } + If ($buttonID -eq "14"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_14.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_14.IsEnabled = $false} Else {$WPFbtnTab6_14.IsEnabled = $true} + $WPFbtnTextTab6_14.Text = $button.Name + $WPFbtnTab6_14.Background = $button.bgcolor + $WPFbtnTab6_14.Foreground = $button.textcolor + $WPFbtnTab6_14.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_14.Text + Call-btnTab6_14 + }) + } + + If ($buttonID -eq "15"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_15.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_15.IsEnabled = $false} Else {$WPFbtnTab6_15.IsEnabled = $true} + $WPFbtnTextTab6_15.Text = $button.Name + $WPFbtnTab6_15.Background = $button.bgcolor + $WPFbtnTab6_15.Foreground = $button.textcolor + $WPFbtnTab6_15.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_15.Text + Call-btnTab6_15 + }) + } + + If ($buttonID -eq "16"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_16.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_16.IsEnabled = $false} Else {$WPFbtnTab6_16.IsEnabled = $true} + $WPFbtnTextTab6_16.Text = $button.Name + $WPFbtnTab6_16.Background = $button.bgcolor + $WPFbtnTab6_16.Foreground = $button.textcolor + $WPFbtnTab6_16.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_16.Text + Call-btnTab6_16 + }) + } + + If ($buttonID -eq "17"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_17.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_17.IsEnabled = $false} Else {$WPFbtnTab6_17.IsEnabled = $true} + $WPFbtnTextTab6_17.Text = $button.Name + $WPFbtnTab6_17.Background = $button.bgcolor + $WPFbtnTab6_17.Foreground = $button.textcolor + $WPFbtnTab6_17.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_17.Text + Call-btnTab6_17 + }) + } + + If ($buttonID -eq "18"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_18.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_18.IsEnabled = $false} Else {$WPFbtnTab6_18.IsEnabled = $true} + $WPFbtnTextTab6_18.Text = $button.Name + $WPFbtnTab6_18.Background = $button.bgcolor + $WPFbtnTab6_18.Foreground = $button.textcolor + $WPFbtnTab6_18.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_18.Text + Call-btnTab6_18 + }) + } + + If ($buttonID -eq "19"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_19.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_19.IsEnabled = $false} Else {$WPFbtnTab6_19.IsEnabled = $true} + $WPFbtnTextTab6_19.Text = $button.Name + $WPFbtnTab6_19.Background = $button.bgcolor + $WPFbtnTab6_19.Foreground = $button.textcolor + $WPFbtnTab6_19.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_19.Text + Call-btnTab6_19 + }) + } + + If ($buttonID -eq "20"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_20.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_20.IsEnabled = $false} Else {$WPFbtnTab6_20.IsEnabled = $true} + $WPFbtnTextTab6_20.Text = $button.Name + $WPFbtnTab6_20.Background = $button.bgcolor + $WPFbtnTab6_20.Foreground = $button.textcolor + $WPFbtnTab6_20.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_20.Text + Call-btnTab6_20 + }) + } + + If ($buttonID -eq "21"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_21.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_21.IsEnabled = $false} Else {$WPFbtnTab6_21.IsEnabled = $true} + $WPFbtnTextTab6_21.Text = $button.Name + $WPFbtnTab6_21.Background = $button.bgcolor + $WPFbtnTab6_21.Foreground = $button.textcolor + $WPFbtnTab6_21.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_21.Text + Call-btnTab6_21 + }) + } + + If ($buttonID -eq "22"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_22.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_22.IsEnabled = $false} Else {$WPFbtnTab6_22.IsEnabled = $true} + $WPFbtnTextTab6_22.Text = $button.Name + $WPFbtnTab6_22.Background = $button.bgcolor + $WPFbtnTab6_22.Foreground = $button.textcolor + $WPFbtnTab6_22.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_22.Text + Call-btnTab6_22 + }) + } + + If ($buttonID -eq "23"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_23.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_23.IsEnabled = $false} Else {$WPFbtnTab6_23.IsEnabled = $true} + $WPFbtnTextTab6_23.Text = $button.Name + $WPFbtnTab6_23.Background = $button.bgcolor + $WPFbtnTab6_23.Foreground = $button.textcolor + $WPFbtnTab6_23.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_23.Text + Call-btnTab6_23 + }) + } + + If ($buttonID -eq "24"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_24.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_24.IsEnabled = $false} Else {$WPFbtnTab6_24.IsEnabled = $true} + $WPFbtnTextTab6_24.Text = $button.Name + $WPFbtnTab6_24.Background = $button.bgcolor + $WPFbtnTab6_24.Foreground = $button.textcolor + $WPFbtnTab6_24.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_24.Text + Call-btnTab6_24 + }) + } + + If ($buttonID -eq "25"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_25.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_25.IsEnabled = $false} Else {$WPFbtnTab6_25.IsEnabled = $true} + $WPFbtnTextTab6_25.Text = $button.Name + $WPFbtnTab6_25.Background = $button.bgcolor + $WPFbtnTab6_25.Foreground = $button.textcolor + $WPFbtnTab6_25.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_25.Text + Call-btnTab6_25 + }) + } + + If ($buttonID -eq "26"){ + If ($AppOptionDebugeMode){write-Host " Loading 'button $buttonID' --> $($button.Name)"} + $WPFbtnTab6_26.Visibility = 'Visible' + If ($button.enable -eq "false"){$WPFbtnTab6_26.IsEnabled = $false} Else {$WPFbtnTab6_26.IsEnabled = $true} + $WPFbtnTextTab6_26.Text = $button.Name + $WPFbtnTab6_26.Background = $button.bgcolor + $WPFbtnTab6_26.Foreground = $button.textcolor + $WPFbtnTab6_26.Add_Click({ + $ButtonClicked = $WPFbtnTextTab6_26.Text + Call-btnTab6_26 + }) + } + +} If ($ConfigTab6.enable -eq "false"){$WPFTab6.Visibility = 'Hidden'} Else {$WPFTab6.Visibility = 'Visible'} \ No newline at end of file diff --git a/App/Extensions/TabControl/AdminMenu-Tabs.prereq b/Extensions/TabControl/AdminMenu-Tabs.prereq similarity index 98% rename from App/Extensions/TabControl/AdminMenu-Tabs.prereq rename to Extensions/TabControl/AdminMenu-Tabs.prereq index f3de5a6..6c39485 100644 --- a/App/Extensions/TabControl/AdminMenu-Tabs.prereq +++ b/Extensions/TabControl/AdminMenu-Tabs.prereq @@ -1,17 +1,17 @@ -[InstalledPath] -MSInfo=$env:programfiles\Common Files\Microsoft Shared\MSInfo\msinfo32.exe -Dameware=$envProgramFilesX86\DameWare Development\DameWare NT Utilities -CMToolkit=$envProgramFilesX86\ConfigMgr 2012 Toolkit R2\ClientTools -SCCMPath=$($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) -DartTools=$envProgramFiles\Microsoft DaRT\v10 -ADKTools=$envProgramFilesX86\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools -MDTWorkBench=$envProgramFiles\Microsoft Deployment Toolkit\Bin\DeploymentWorkbench.msc -SCOM=$envProgramFiles\Microsoft System Center 2012 R2\Operations Manager\Console -SCSM=$envProgramFiles\Microsoft System Center 2012 R2\Service Manager -SCORCH=$envProgramFilesX86\Microsoft System Center 2012 R2\Orchestrator\Runbook Designer -SCVMM=$envProgramFiles\Microsoft System Center 2012 Virtual Machine Manager\bin -EXCH=$envProgramFiles\Microsoft\Exchange Server\V14\bin -VMwareSphere=$envProgramFilesX86\VMware\Infrastructure\Virtual Infrastructure Client\Launcher -Netapp=$envProgramFiles\NetApp\OnCommand System Manager -VMwareView=$envProgramFilesX86\VMware\VMware Horizon View Client +[InstalledPath] +MSInfo=$env:programfiles\Common Files\Microsoft Shared\MSInfo\msinfo32.exe +Dameware=$envProgramFilesX86\DameWare Development\DameWare NT Utilities +CMToolkit=$envProgramFilesX86\ConfigMgr 2012 Toolkit R2\ClientTools +SCCMPath=$($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) +DartTools=$envProgramFiles\Microsoft DaRT\v10 +ADKTools=$envProgramFilesX86\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools +MDTWorkBench=$envProgramFiles\Microsoft Deployment Toolkit\Bin\DeploymentWorkbench.msc +SCOM=$envProgramFiles\Microsoft System Center 2012 R2\Operations Manager\Console +SCSM=$envProgramFiles\Microsoft System Center 2012 R2\Service Manager +SCORCH=$envProgramFilesX86\Microsoft System Center 2012 R2\Orchestrator\Runbook Designer +SCVMM=$envProgramFiles\Microsoft System Center 2012 Virtual Machine Manager\bin +EXCH=$envProgramFiles\Microsoft\Exchange Server\V14\bin +VMwareSphere=$envProgramFilesX86\VMware\Infrastructure\Virtual Infrastructure Client\Launcher +Netapp=$envProgramFiles\NetApp\OnCommand System Manager +VMwareView=$envProgramFilesX86\VMware\VMware Horizon View Client Putty=$envWinDir\system32\putty.exe \ No newline at end of file diff --git a/App/Scripts/BypassCAC.vbs b/Extensions/Tools/BypassCAC.vbs similarity index 100% rename from App/Scripts/BypassCAC.vbs rename to Extensions/Tools/BypassCAC.vbs diff --git a/App/Scripts/ClipboardHistoryViewer.ps1 b/Extensions/Tools/ClipboardHistoryViewer.ps1 similarity index 100% rename from App/Scripts/ClipboardHistoryViewer.ps1 rename to Extensions/Tools/ClipboardHistoryViewer.ps1 diff --git a/App/Scripts/Connect-Mstsc.ps1 b/Extensions/Tools/Connect-Mstsc.ps1 similarity index 100% rename from App/Scripts/Connect-Mstsc.ps1 rename to Extensions/Tools/Connect-Mstsc.ps1 diff --git a/App/Scripts/Convert-Image.ps1 b/Extensions/Tools/Convert-Image.ps1 similarity index 100% rename from App/Scripts/Convert-Image.ps1 rename to Extensions/Tools/Convert-Image.ps1 diff --git a/App/Scripts/DiskSpaceTool.ps1 b/Extensions/Tools/DiskSpaceTool.ps1 similarity index 100% rename from App/Scripts/DiskSpaceTool.ps1 rename to Extensions/Tools/DiskSpaceTool.ps1 diff --git a/App/Scripts/Generate-Password.ps1 b/Extensions/Tools/Generate-Password.ps1 similarity index 100% rename from App/Scripts/Generate-Password.ps1 rename to Extensions/Tools/Generate-Password.ps1 diff --git a/App/Scripts/Get-SystemInfo.ps1 b/Extensions/Tools/Get-SystemInfo.ps1 similarity index 100% rename from App/Scripts/Get-SystemInfo.ps1 rename to Extensions/Tools/Get-SystemInfo.ps1 diff --git a/App/Scripts/GetDiskSpaceMultipleComputers.ps1 b/Extensions/Tools/GetDiskSpaceMultipleComputers.ps1 similarity index 100% rename from App/Scripts/GetDiskSpaceMultipleComputers.ps1 rename to Extensions/Tools/GetDiskSpaceMultipleComputers.ps1 diff --git a/App/Scripts/Invoke-Runspace.ps1 b/Extensions/Tools/Invoke-Runspace.ps1 similarity index 100% rename from App/Scripts/Invoke-Runspace.ps1 rename to Extensions/Tools/Invoke-Runspace.ps1 diff --git a/App/Scripts/NetworkPing.ps1 b/Extensions/Tools/NetworkPing.ps1 similarity index 100% rename from App/Scripts/NetworkPing.ps1 rename to Extensions/Tools/NetworkPing.ps1 diff --git a/Extensions/Tools/PSObjectBrowser.ps1 b/Extensions/Tools/PSObjectBrowser.ps1 new file mode 100644 index 0000000..8a7a9d0 --- /dev/null +++ b/Extensions/Tools/PSObjectBrowser.ps1 @@ -0,0 +1,5842 @@ +#region PS Object Explorer Profile + +Function Get-PSObjectExplorerProfile() +{ +#View Menu + #mnuWMIObjects_Click + #mnuNetAssemblies_Click + #mnuNetClasses_Click + #mnuPSAliases_Click + #mnuPSCommands_Click + #mnuPSDrives_Click + #mnuPSModules_Click + #mnuPSVariables_Click + #mnuWINFeature_Click + #mnuWINProcess_Click + #mnuWINService_Click + #mnuTestCases_Click + +#Options Menu + mnuObjects_Click + mnuStructs_Click + mnuCollections_Click + #mnuNulls_Click + #mnuEmptyStrings_Click + +#Some Objects + + #Add-Node (Get-VMHost) "Virtual Machine Host" + #Add-Node (Get-VM) "Virtual Machines" + #Add-Node (Get-VMSwitch) "Virtual Switches" + + #Add-Node (Get-ADForest) "ADForest" + #Add-Node (Get-ADDomain) "ADDomain" + #Add-Node (Get-ADUser -Filter *) "ADUsers" + #Add-Node (Get-ADComputer -Filter *) "ADComputers" + #Add-Node (Get-ADObject -Filter *) "ADObjects" + + #Add-Node New-Object Microsoft.SqlServer.Management.Smo.Server("(local)") "SQL Server" + +} + +#endregion + +#region Assembly Types +Add-Type -AssemblyName System +Add-Type -AssemblyName System.IO +Add-Type -AssemblyName System.IO.Compression +Add-Type -AssemblyName System.IO.Compression.FileSystem +Add-Type -AssemblyName System.Drawing +Add-Type -AssemblyName System.Windows.Forms +#endregion +#region Script Variables +#region PowerShell Object Browser Variables + +#Hashtable to for POE TreeView Nodes +$Script:POETreeNodes=@{} +# Used to uniquely identify treeview nodes +[Int]$Script:POENextKey=0 + +#endregion +#region Script Variables WMI Win32 Classes + +# Used to order WIN32 classes by name +$Script:WMIClasses = $Null + +# Used to store most recently used +$Script:WMIRootNode=$Null +$Script:WMICategoryNode=$Null +$Script:WMISubCategoryNode=$Null +#endregion +#region Script Variables Net Framework +# Used to store Net Assemblies root node +#$Script:NetAssembliesNode=$Null + +# Used to store Net Assemblies +#$Script:NetAssemblies=$Null + +# Used to store Net Assemblies attributes +#$Script:NetAssembliesToProcess=$Null +#$Script:NetAssemblyMaxClasses=$Null +#$Script:NetAssemblyClasses=$Null + +# Used to store Net Classes root node +#$Script:NetClassesNode=$Null + +# Used to store Net Classes +#$Script:NetClasses = $Null + +# Used to store Net Classes attributes +#$Script:NetClassesProcessed = $Null +#$Script:NetClassIndex=$Null +#endregion +#region Script Variables PS Variables + +# Used to test for PS Automatic Variables +$Script:IsPSAutoVariable = [Ordered]@{ + "$"=$True;"?"=$True;"^"=$True;"_"=$True; + "args"=$True;"ConsoleFileName"=$True;"Error"=$True; + "Event"=$True;"EventArgs"=$True;"EventSubscriber"=$True; + "ExecutionContext"=$True;"False"=$True;"ForEach"=$True; + "Home"=$True;"Host"=$True;"Input"=$True; + "LASTEXITCODE"=$True;"Matches"=$True;"MyInvocation"=$True; + "NestedPromptLevel"=$True;"Null"=$True;"PID"=$True; + "Profile"=$True;"PSBoundParameters"=$True;"PSCmdlet"=$True; + "PSCommandPath"=$True;"PSCulture"=$True;"PSDebugContext"=$True; + "PSHome"=$True;"PSISE"=$True;"PSItem"=$True;"$PSScriptRoot"=$True; + "PSSenderInfo"=$True;"PSScriptRoot"=$True;"PSUICulture"=$True; + "PSUnsupportedConsoleApplications"=$True; + "PSVersionTable"=$True;"PWD"=$True;"ReportErrorShowExceptionClass"=$True; + "ReportErrorShowInnerException"=$True;"ReportErrorShowSource"=$True; + "ReportErrorShowStackTrace"=$True;"Sender"=$True;"ShellID"=$True; + "StackTrace"=$True;"This"=$True;"True"=$True; + } +# Used to test for PS Preference Variables +$Script:IsPSConfigVariable = [Ordered]@{ + "ConfirmPreference"=$True;"DebugPreference"=$True; + "ErrorActionPreference"=$True;"ErrorView"=$True; + "FormatEnumerationLimit"=$True; + "LogCommandHealthEvent"=$True;"LogCommandLifecycleEvent"=$True; + "LogEngineHealthEvent"=$True;"LogEngineLifecycleEvent"=$True; + "LogProviderHealthEvent"=$True;"LogProviderLifecycleEvent"=$True; + "MaximumAliasCount"=$True;"MaximumDriveCount"=$True; + "MaximumErrorCount"=$True;"MaximumFunctionCount"=$True; + "MaximumHistoryCount"=$True;"MaximumVariableCount"=$True; + "OFS"=$True;"OutputEncoding"=$True; + "ProgressPreference"=$True;"PSDefaultParameterValues"=$True; + "PSEmailServer"=$True;"PSModuleAutoLoadingPreference"=$True; + "PSSessionApplicationName"=$True;"PSSessionConfigurationName"=$True; + "PSSessionOption"=$True;"VerbosePreference"=$True; + "WarningPreference"=$True;"WhatIfPreference"=$True; + } + +# Used to test for PS Form Variables +$Script:IsPSFormVariable = @{ + "Form"=$True;"MainMenu"=$True; + "mnuFile"=$True;"mnuExit"=$True; + "mnuView"=$True; + "mnuWMIObjects"=$True;"mnuSeparatorV1"=$True; + "mnuNetAssemblies"=$True;"mnuNetClasses"=$True;"mnuSeparatorV2"=$True; + "mnuPSAliases"=$True;"mnuPSCommands"=$True;"mnuPSDrives"=$True; + "mnuPSModules"=$True;"mnuPSVariables"=$True;"mnuSeparatorV3"=$True; + "mnuWINFeature"=$True;"mnuSeparatorV4"=$True; + "mnuWINProcess"=$True;"mnuWINService"=$True;"mnuSeparatorV5"=$True; + "mnuTestCases"=$True; + "mnuOptions"=$True; + "mnuObjects"=$True;"mnuStructs"=$True;"mnuSeparator4"=$True; + "mnuCollections"=$True;"mnuSeparator5"=$True; + "mnuNulls"=$True;"mnuEmptyStrings"=$True;"mnuSeparator6"=$True; + "mnuHelp"=$True;"mnuAbout"=$True; + "mnuStatus"=$True; + "SplitContainerInstance"=$True;"TabControl"=$True; + "TreeViewInstance"=$True;"StatusBarInstance"=$True; + "TabPageInstance"=$True;"ListViewInstance"=$True; + "TabPageClass"=$True;"ListViewClass"=$True; + "TabPageInterface"=$True;"SplitContainerInterface"=$True; + "TreeViewInterface"=$True;"ListViewInterface"=$True;"StatusBarInterface"=$True; + "TabPagePSObject"=$True;"TextBoxPSObject"=$True; + "TabPageValues"=$True;"TextBoxValues"=$True; + "TabPagePowerShell"=$True;"SplitContainerPowerShell"=$True; + "TextBoxPowerShell"=$True;"ButtonExecute"=$True; + "TextBoxOutput"=$True;"ButtonClear"=$True; + "TabPageWMIClasses"=$True; + "LabelComputers"=$True;"TextBoxComputers"=$True; + "LabelFilter"=$True;"TextBoxFilter"=$True; + "TimerNetClasses"=$True; + } + +# Used to test for PS Script Variables +$Script:IsPSScriptVariable = @{ + "WMIClasses"=$True;"WMIRootNode"=$True; + "WMICategoryNode"=$True;"WMISubCategoryNode"=$True; + "IsPSAutoVariable"=$True;"IsPSConfigVariable"=$True; + "IsPSFormVariable"=$True;"IsPSScriptVariable"=$True; + "IsValidMemberType"=$True;"IsValidPropertyType"=$True; + "IsBooleanValueType"=$True;"IsIntegerValueType"=$True; + "IsFloatingPointType"=$True;"IsCharactersType"=$True; + "IsDateTimeType"=$True; + "IsInstanceValueType"=$True;"IsPropertyValueType"=$True; + "POENextKey"=$True;"POETreeNodes"=$True; + "POEValues"=$True; + } + +#region Script Variables Valid Method and Return Types +#Valid Types +$Script:IsValidMemberType = @{"Property"=$True;"NoteProperty"=$True; + } +$Script:IsValidPropertyType= @{"{get;set;}"=$True;"{get;}"=$True; + } +$Script:IsBooleanValueType= @{ + "bool"=$True;"boolean"=$True;"system.boolean"=$True; + } +$Script:IsIntegerValueType= @{ + "byte"=$True;"system.byte"=$True; + "sbyte"=$True;"system.sbyte"=$True; + "uint16"=$True;"system.uint16"=$True; + "int16"=$True;"system.int16"=$True; + "uint32"=$True;"system.uint32"=$True; + "int32"=$True;"system.int32"=$True; + "int"=$True;"system.int"=$True; + "uint64"=$True;"system.uint64"=$True; + "int64"=$True;"system.int64"=$True; + "long"=$True;"system.long"=$True; + "intptr"=$True;"system.intptr"=$True; + } +$Script:IsFloatingPointType= @{ + "single"=$True;"system.single"=$True; + "double"=$True;"system.double"=$True; + "decimal"=$True;"system.decimal"=$True; + "float"=$True;"system.float"=$True; + } +$Script:IsCharactersType= @{ + "char"=$True;"system.char"=$True; + "string"=$True;"system.string"=$True; + "guid"=$True;"system.guid"=$True; + } +$Script:IsDateTimeType= @{ + "datetime"=$True;"system.datetime"=$True; + "timespan"=$True;"system.timespan"=$True + } +$Script:IsInstanceValueType = $Script:IsBooleanValueType + + $Script:IsIntegerValueType + + $Script:IsFloatingPointType+ + $Script:IsCharactersType +$Script:IsPropertyValueType = $Script:IsBooleanValueType + + $Script:IsIntegerValueType + + $Script:IsFloatingPointType+ + $Script:IsCharactersType + + $Script:IsDateTimeType + +$Script:POEValues ="" +#endregion + +#endregion +#region Helper Functions + +# Increments key to uniquely identify treeview nodes +Function Get-NextKey +{ + [CmdletBinding()] + [OutputType([String])] + param ( + [String]$Name + ) + Try + { + $Script:POENextKey++ + [String]$Script:POENextKey + } + Catch [System.Exception] + { + Write-Verbose "Get-NextKey Catch" + Write-Verbose $_.Exception.Message + } +} + +#Determines if Member Name is Valid +Function Get-IsValidMemberName +{ + [CmdletBinding()] + [OutputType([System.Boolean])] + param ( + [Parameter(Mandatory=$true)] + [String]$MemberName, + [Parameter(Mandatory=$true)] + [String]$TypeName + ) + If ($MemberName -EQ "") + { + Return $False + } + ElseIf ($MemberName.Substring(0,1) -EQ "_") + { + Return $False + } + ElseIf ($MemberName.Contains("-")) + { + Return $False + } + ElseIf ($MemberName -EQ "SystemMessages") + { + Return $False + } + ElseIf ($MemberName -EQ "OleDBProviderSettings") + { + Return $False + } + Else + { + Return $True + } +} + +# Return boolean if object is Active Driectory Enitity +Function Get-IsActiveDirectoryEntity +{ + [CmdletBinding()] + [OutputType([Boolean])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + Try + { + Return ($Object -Is [Microsoft.ActiveDirectory.Management.ADEntity]) + } + Catch + { + Return $False + } +} + +# Return boolean if object is collection (has GetNumerator) +Function Get-IsCollection +{ + [CmdletBinding()] + [OutputType([Boolean])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + $IsCollection = $False + If($Object -NE $Null) + { + If (Get-IsActiveDirectoryEntity $Object) + { + } + Else + { + $Members = Get-Member -InputObject $Object + ForEach ($Member In $Members) + { + If ($Member.Name -EQ "GetEnumerator") + { + $IsCollection = $True + break + } + } + } + } + $IsCollection +} +# Return boolean if object is collection (has Keys) +Function Get-IsHashTable +{ + [CmdletBinding()] + [OutputType([Boolean])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + $IsHashTable = $False + If($Object -NE $Null) + { + $Members = Get-Member -InputObject $Object + ForEach ($Member In $Members) + { + If ($Member.Name -EQ "Keys") + { + $IsHashtable = $True + break + } + } + } + $IsHashTable +} + +# Return boolean if object is collection (has GetNumerator) +Function Get-InstanceType +{ + [CmdletBinding()] + [OutputType([String])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + Trap {Continue} + $ObjectType=($Object.GetType()).FullName + Write-Debug "Get-InstanceType ObjectType=$ObjectType" + If ($Object -Is [System.ValueType]) + { + If ($Object -Is [System.Boolean]) + { + Write-Debug "Get-InstanceType Boolean" + Return "Boolean" + } + ElseIf ($Script:IsInstanceValueType[$ObjectType]) + { + Write-Debug "Get-InstanceType ValueType" + Return "ValueType" + } + ElseIf ($Object -Is [System.Enum]) + { + Write-Debug "Get-InstanceType Enum" + Return "Enum" + } + Else + { + Write-Debug "Get-InstanceType Struct" + Return "Struct" + } + } + IF ($Object -Is [System.String]) + { + Write-Debug "Get-InstanceType String" + Return "String" + } + + IF ($Object -Is [System.Management.Automation.PSCustomObject]) + { + Write-Debug "Get-InstanceType PSObject" + Return "PSObject" + } + If (Get-IsCollection $Object) + { + If ($Object -Is [System.Array]) + { + Write-Debug "Get-InstanceType Array" + Return "Array" + } + ElseIf (Get-IsHashTable $Object) + { + Write-Debug "Get-InstanceType HashTable" + Return "HashTable" + } + Else + { + Write-Debug "Get-InstanceType Collection" + Return "Collection" + } + } + Else + { + Write-Debug "Get-InstanceType Object" + Return "Object" + } +} + +# Return boolean if object is collection (has GetNumerator) +Function Get-PropertyReturnType +{ + [CmdletBinding()] + [OutputType([String])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + $ObjectType=($Object.GetType()).FullName + Write-Verbose "Get-PropertyReturnType ObjectType=$ObjectType" + If ($Object -Is [System.ValueType]) + { + If ($Object -Is [System.Boolean]) + { + Write-Debug "Get-PropertyReturnType Boolean" + Return "Boolean" + } + ElseIf ($Script:IsPropertyValueType[$ObjectType]) + { + Write-Debug "Get-PropertyReturnType ValueType" + Return "ValueType" + } + ElseIf ($Object -Is [System.Enum]) + { + Write-Debug "Get-PropertyReturnType Enum" + Return "Enum" + } + Else + { + Write-Debug "Get-PropertyReturnType Struct" + Return "Struct" + } + } + IF ($Object -Is [System.String]) + { + Write-Debug "Get-PropertyReturnType String" + Return "String" + } + If (Get-IsCollection $Object) + { + If ($Object -Is [System.Array]) + { + Write-Debug "Get-PropertyReturnType Array" + Return "Array" + } + ElseIf (Get-IsHashTable $Object) + { + Write-Debug "Get-PropertyReturnType HashTable" + Return "HashTable" + } + Else + { + Write-Debug "Get-PropertyReturnType Collection" + Return "Collection" + } + } + Else + { + Write-Debug "Get-PropertyReturnType Object" + Return "Object" + } +} + +# Gets instance name by trying various properties +Function Get-InstanceFriendlyName +{ + [CmdletBinding()] + [OutputType([string])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + Write-Debug "Get-InstanceFriendlyName Type=$($Object.GetType().FullName)" + If ($Object -Is [System.Enum]) + { + return "[$(($Object.GetType()).FullName)]::$Object" + } + If ($Object -Is [System.ValueType] -OR + $Object -Is [System.String] + ) + { + return "[$(($Object.GetType()).FullName)]$Object" + } + If ($Object -Is [System.Type]) + { + return "[$($Object.FullName)]" + } + If (Get-IsCollection $Object) + { + If ($Object -Is [System.Array]) + { + return "$(($Object.GetType()).FullName)" + } + Else + { + return "$(($Object.GetType()).FullName)" + } + } + Trap { Continue } + $Return="" + $Return=$Object.Name + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.DisplayName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.DeviceName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.DeviceID + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Text + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Tag + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Caption + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Action + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.SameElement + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Element + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.PartComponent + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.ASPScriptDefaultNamespace + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Antecedent + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Dependent + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.FullName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.FullPath + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.CodeFragment + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Key + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.ModuleName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Verb + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.ShareName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.InstanceName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.GetType() + IF ($Return -NE "") { Return $Return} +} + +# Gets object name by trying various properties +Function Get-PropertyFriendlyName +{ + [CmdletBinding()] + [OutputType([string])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + Write-Debug "Get-PropertyFriendlyName Type=$($Object.GetType().FullName)" + If ($Object -Is [System.Enum]) + { + return "[$(($Object.GetType()).FullName)]::$Object" + } + If ($Object -Is [System.ValueType] -OR + $Object -Is [System.String] + ) + { + return "[$(($Object.GetType()).Name)]$Object" + } + If ($Object -Is [System.Type]) + { + return "[$($Object.FullName)]" + } + If (Get-IsCollection $Object) + { + If ($Object -Is [System.Array]) + { + return "$(($Object.GetType()).Name).Count=$($Object.Count)" + } + Else + { + return "$(($Object.GetType()).Name).Count=$($Object.Count)" + } + } + Trap { Continue } + $Return="" + $Return=$Object.Name + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.DisplayName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.DeviceName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.DeviceID + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Text + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Tag + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Caption + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Action + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.SameElement + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Element + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.PartComponent + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.ASPScriptDefaultNamespace + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Antecedent + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Dependent + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.FullName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.FullPath + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.CodeFragment + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Key + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.ModuleName + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.Verb + IF ($Return.Length -GT 0) { Return $Return} + $Return=$Object.GetType() + IF ($Return -NE "") { Return $Return} +} + +#endregion + +#Adds a treeview node for an object +Function Add-Node +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$Object, + [parameter(Mandatory=$False, + Position=1)] + [String]$Name=(Get-InstanceFriendlyName $Object) + ) + Try + { + Write-Debug "Add-Node $($Object.GetType()) $Name" + Add-TreeNode $TreeViewInstance $Object $Name + } + Catch [System.Exception] + { + Write-Verbose "Add-Node Catch" + Write-Verbose $_.Exception.Message + } +} + +#Adds a treeview node for an object to an existing node +Function Add-TreeNode +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$ParentNode, + [parameter(Mandatory=$True, + Position=1)] + [Object]$Object, + [parameter(Mandatory=$False, + Position=2)] + [String]$Name=(Get-InstanceFriendlyName $Object) + ) + Try + { + Write-Debug "Add-TreeNode $($Object.GetType()) $Name" + $Node=$ParentNode.Nodes.Add((Get-NextKey)+" "+$Name,$Name) + $Node.Tag = $Object + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-TreeNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#Adds a treeview node for a collection to an existing node +Function Add-TreeNodes +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$ParentNode, + [parameter(Mandatory=$True, + Position=1)] + [Object]$Objects, + [parameter(Mandatory=$True, + Position=2)] + [String]$Name + ) + Try + { + Write-Debug "Add-TreeNodes" + $Node=$ParentNode.Nodes.Add((Get-NextKey)+" "+$Name,$Name) + $Node.Tag = $Objects + ForEach($Object In $Objects) + { + $ChildNode =Add-TreeNode $Node $Object + } + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-TreeNodes Catch" + Write-Verbose $_.Exception.Message + } +} + +#Remove a treeview node +Function Remove-Node +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$Node + ) + Try + { + Write-Verbose "Remove-Node" + IF ($Node -NE $Null) + { + Remove-TreeNode $Node + } + } + Catch [System.Exception] + { + Write-Verbose "Remove-Node Catch" + Write-Verbose $_.Exception.Message + } +} + +#Remove a treeview node +Function Remove-TreeNode +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$Node + ) + Try + { + Write-Verbose "Remove-TreeNode" + IF ($Node -NE $Null) + { + $Node.Nodes.Clear() + $Node.Remove() + Write-Verbose "Removed-TreeNode" + } + } + Catch [System.Exception] + { + Write-Verbose "Remove-TreeNode Catch" + Write-Verbose $_.Exception.Message + } +} + + +#region WMIObjects + +# Determines whether object is an WMI object +Function Get-IsWMIObject +{ + [CmdletBinding()] + [OutputType([string])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + Write-Debug "Get-IsWMIObject" + Try + { + If($Object.IsWMIObject -EQ $True) + { + Return $True + } + Else + { + Return $False + } + } + Catch + { + Return $False + } +} +# Determines whether a node is an WMI object type or an object +Function Get-WMIObjectType +{ + [CmdletBinding()] + [OutputType([string])] + param ( + [parameter(Mandatory=$True)] + [Object]$Object + ) + Trap { Continue } + If ($Object.IsWMIClass) + { + Return "WMIClass" + } + ElseIf ($Object.IsWMISubCategory) + { + Return "WMISubCategory" + } + ElseIf ($Object.IsWMICategory) + { + Return "WMICategory" + } + ElseIf ($Object.IsWMIRoot) + { + Return "WMIRoot" + } + Else + { + Return "Unknown Object" + } +} +#Adds a treeview node for a WMI object type mode +Function Add-WMITreeNode +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$TreeView, + [parameter(Mandatory=$True, + Position=1)] + [String]$Category, + [parameter(Mandatory=$True, + Position=2)] + [String]$SubCategory, + [parameter(Mandatory=$True, + Position=3)] + [String]$Class, + [parameter(Mandatory=$True, + Position=4)] + [String]$Description + ) + [int]$PC = $Script:WMIClasses.Count / 4.80 + TRY + { + If ($Category -EQ "WMIRoot") #WMIRoot + { + Write-Verbose "Add-WMITreeNode WMIRoot" + Write-Progress -Activity "Adding WMI Root" -PercentComplete $PC -Status "Working ..." + $PSObject = New-Object PSObject -Property ([Ordered]@{ + Category="Win32 Classes" + Description="WMI Win32 Classes" + IsWMIObject=$True + IsWMIRoot=$True + }) + $Script:WMIRootNode = $TreeView.Nodes.Insert(0,((Get-NextKey)+" " +$PSObject.Category),$PSObject.Category) + $Script:WMIRootNode.Tag = $PSObject + $Script:WMIRootNode.EnsureVisible() + } + ElseIf ($SubCategory -EQ " ") #WMICateogry + { + Write-Verbose "Add-WMITreeNode Category=$Category" + Write-Progress -Activity "Adding Category $Category" -PercentComplete $PC -Status "Working ..." + $PSOBject = New-Object PSObject -Property ([Ordered]@{ + Category=$Category + Description=$Description + IsWMIObject=$True + IsWMICategory=$True + }) + $Script:WMICategoryNode = $Script:WMIRootNode.Nodes.Add(((Get-NextKey)+" " +$Category),$Category) + $Script:WMICategoryNode.Tag = $PSObject + } + ElseIf ($Class -EQ " ") #WMISubCategory + { + Write-Verbose "Add-WMITreeNode SubCategory=$SubCategory" + Write-Progress -Activity "Adding SubCategory $SubCategory" -PercentComplete $PC -Status "Working ..." + $PSOBject = New-Object PSObject -Property ([Ordered]@{ + Category=$Category + SubCategory=$SubCategory + Description=$Description + IsWMIObject=$True + IsWMICategory=$False + IsWMISubCategory=$True + }) + $Script:WMISubCategoryNode = $Script:WMICategoryNode.Nodes.Add(((Get-NextKey)+" "+$SubCategory),$SubCategory) + $Script:WMISubCategoryNode.Tag = $PSObject + } + Else #WMIClass + { + Write-Verbose "Add-WMITreeNode Class=$Class" + Write-Progress -Activity "Adding Class $Class" -PercentComplete $PC -Status "Working ..." + $PSOBject = New-Object PSObject -Property ([Ordered]@{ + Category=$Category + SubCategory=$SubCategory + Class=$Class + Description=$Description + IsWMIObject=$True + IsWMICategory=$False + IsWMISubCategory=$False + IsWMIClass=$True + }) + $ClassNode = $Script:WMISubCategoryNode.Nodes.Add(((Get-NextKey)+" "+$Class),$Class) + $ClassNode.Tag = $PSObject + $Script:WMIClasses.Add($Class,$PSObject) + } + } + Catch [System.Exception] + { + Write-Verbose "Add-WMITreeNode Catch" + Write-Verbose $_.Exception.Message + } +} +#Adds treeview nodes for WMI classes sort by Name +Function Add-WMITreeNodesOrderedByName +{ + [CmdletBinding()] + param () + [Double]$PCINC = (1/$Script:WMIClasses.Count) * 100 + [Double]$PC = 100 + TRY + { + Write-Verbose "Add-WMITreeNodesOrderedByName Adding Category" + $SubCategory="WMI Classes By Name" + $PSOBject = New-Object PSObject -Property ([Ordered]@{ + Category=$SubCategory + SubCategory=$SubCategory + Description="WMI Classes sorted by Name." + IsWMIObject=$True + IsWMICategory=$False + IsWMISubCategory=$True + }) + Write-Progress -Activity "Adding sorted subcategory $SubCategory" -PercentComplete $PC -Status "Working ..." + $SubCategoryNode = $Script:WMIRootNode.Nodes.Add(((Get-NextKey)+" "+$SubCategory),$SubCategory) + $SubCategoryNode.Tag = $PSObject + $SubCategoryNode + + Write-Verbose "Sorting WMIClasses" + $Win32Classes = $Script:WMIClasses.GetEnumerator() | Sort -Property Key + + For ($I=0;$I -LT $WIN32classes.Count;$I++) + { + $PC=$PC-$PCINC + $Class=$Win32Classes[$I].Key + Write-Progress -Activity "Adding sorted class $Class" -PercentComplete $PC -Status "Working ..." + $ClassNode = $SubCategoryNode.Nodes.Add(((Get-NextKey)+" "+$Class),$Class) + $ClassNode.Tag = $Win32Classes[$I].Value + } + } + Catch [System.Exception] + { + Write-Verbose "Add-WMITreeNodesOrderedByName Catch" + Write-Verbose $_.Exception.Message + } +} +#Adds treeview nodes for WMI objects +Function Add-WMITreeNodes +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$TreeView + ) + Try + { + Write-Verbose "Add-WMITreeNodes TreeView.Name=$($TreeView.Name)" + Write-Progress -Activity "Adding WMIClasses" -PercentComplete 0 -Status "Working ..." + $Script:WMIClasses = @{} + Add-WMITreeNode $TreeView "WMIRoot" " " " " " " + Add-WMITreeNode $TreeView "Computer System Hardware Classes" " " " " "Hardware-related objects." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Cooling Device Classes" " " "The Cooling Devices subcategory groups classes that represent instrumentable fans, temperature probes, and refrigeration devices." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Cooling Device Classes" "Win32_Fan" "Represents the properties of a fan device in the computer system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Cooling Device Classes" "Win32_HeatPipe" "Represents the properties of a heat pipe cooling device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Cooling Device Classes" "Win32_Refrigeration" "Represents the properties of a refrigeration device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Cooling Device Classes" "Win32_TemperatureProbe" "Represents the properties of a temperature sensor (electronic thermometer)." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Input Device Classes" " " "The Input Devices subcategory groups classes that represent keyboards and pointing devices." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Input Device Classes" "Win32_Keyboard" "Represents a keyboard installed on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Input Device Classes" "Win32_PointingDevice" "Represents an input device used to point to and select regions on the display of a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Mass Storage Classes" " " "Classes in the Mass Storage subcategory represent storage devices such as hard disk drives, CD-ROM drives, and tape drives." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Mass Storage Classes" "Win32_AutochkSetting" "Represents the settings for the autocheck operation of a disk." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Mass Storage Classes" "Win32_CDROMDrive" "Represents a CD-ROM drive on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Mass Storage Classes" "Win32_DiskDrive" "Represents a physical disk drive as seen by a computer running the Windows operating system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Mass Storage Classes" "Win32_FloppyDrive" "Manages the capabilities of a floppy disk drive." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Mass Storage Classes" "Win32_PhysicalMedia" "Represents any type of documentation or storage medium." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Mass Storage Classes" "Win32_TapeDrive" "Represents a tape drive on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" " " "The Motherboard, Controllers, and Ports subcategory groups classes that represent system devices. Examples include system memory, cache memory, and controllers." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_1394Controller" "Represents the capabilities and management of a 1394 controller." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_1394ControllerDevice" "Relates the high-speed serial bus (IEEE 1394 Firewire) Controller and the CIM_LogicalDevice instance connected to it." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_AllocatedResource" "Relates a logical device to a system resource." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_AssociatedProcessorMemory" "Relates a processor and its cache memory." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_BaseBoard" "Represents a baseboard (also known as a motherboard or system board)." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_BIOS" "Represents the attributes of the computer system's basic input or output services (BIOS) that are installed on the computer." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_Bus" "Represents a physical bus as seen by a Windows operating system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_CacheMemory" "Represents cache memory (internal and external) on a computer system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_ControllerHasHub" "Represents the hubs downstream from the universal serial bus (USB) controller." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_DeviceBus" "Relates a system bus and a logical device using the bus." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_DeviceMemoryAddress" "Represents a device memory address on a Windows system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_DeviceSettings" "Relates a logical device and a setting that can be applied to it." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_DMAChannel" "Represents a direct memory access (DMA) channel on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_FloppyController" "Represents the capabilities and management capacity of a floppy disk drive controller." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_IDEController" "Represents the capabilities of an Integrated Drive Electronics (IDE) controller device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_IDEControllerDevice" "Association class that relates an IDE controller and the logical device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_InfraredDevice" "Represents the capabilities and management of an infrared device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_IRQResource" "Represents an interrupt request line (IRQ) number on a Windows computer system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_MemoryArray" "Represents the properties of the computer system memory array and mapped addresses." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_MemoryArrayLocation" "Relates a logical memory array and the physical memory array upon which it exists." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_MemoryDevice" "Represents the properties of a computer system's memory device along with its associated mapped addresses." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_MemoryDeviceArray" "Relates a memory device and the memory array in which it resides." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_MemoryDeviceLocation" "Association class that relates a memory device and the physical memory on which it exists." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_MotherboardDevice" "Represents a device that contains the central components of the computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_OnBoardDevice" "Represents common adapter devices built into the motherboard (system board)." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_ParallelPort" "Represents the properties of a parallel port on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PCMCIAController" "Manages the capabilities of a Personal Computer Memory Card Interface Adapter (PCMCIA) controller device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PhysicalMemory" "Represents a physical memory device located on a computer as available to the operating system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PhysicalMemoryArray" "Represents details about the computer system's physical memory." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PhysicalMemoryLocation" "Relates an array of physical memory and its physical memory." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PNPAllocatedResource" "Represents an association between logical devices and system resources." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PNPDevice" "Relates a device (known to Configuration Manager as a PNPEntity), and the function it performs." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PNPEntity" "Represents the properties of a Plug and Play device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PortConnector" "Represents physical connection ports, such as DB-25 pin male, Centronics, and PS/2." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_PortResource" "Represents an I/O port on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_Processor" "Represents a device capable of interpreting a sequence of machine instructions on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SCSIController" "Represents a small computer system interface (SCSI) controller on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SCSIControllerDevice" "Relates a SCSI controller and the logical device (disk drive) connected to it." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SerialPort" "Represents a serial port on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SerialPortConfiguration" "Represents the settings for data transmission on a Windows serial port." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SerialPortSetting" "Relates a serial port and its configuration settings." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SMBIOSMemory" "Represents the capabilities and management of memory-related logical devices." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SoundDevice" "Represents the properties of a sound device on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SystemBIOS" "Relates a computer system (including data such as startup properties, time zones, boot configurations, or administrative passwords) and a system BIOS (services, languages, and system management properties)." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SystemDriverPNPEntity" "Relates a Plug and Play device on the Windows computer system and the driver that supports the Plug and Play device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SystemEnclosure" "Represents the properties associated with a physical system enclosure." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SystemMemoryResource" "Represents a system memory resource on a Windows system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_SystemSlot" "Represents physical connection points including ports, motherboard slots and peripherals, and proprietary connections points." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_USBController" "Manages the capabilities of a universal serial bus (USB) controller." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_USBControllerDevice" "Relates a USB controller and the CIM_LogicalDevice instances connected to it." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Motherboard, Controller, and Port Classes" "Win32_USBHub" "Represents the management characteristics of a USB hub." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Networking Device Classes" " " "The Networking Devices subcategory groups classes that represent the network interface controller, its configurations, and its settings." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Networking Device Classes" "Win32_NetworkAdapter" "Represents a network adapter on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Networking Device Classes" "Win32_NetworkAdapterConfiguration" "Represents the attributes and behaviors of a network adapter. The class is not guaranteed to be supported after the ratification of the Distributed Management Task Force (DMTF) CIM network specification." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Networking Device Classes" "Win32_NetworkAdapterSetting" "Relates a network adapter and its configuration settings." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Power Classes" " " "The Power subcategory groups classes that represent power supplies, batteries, and events related to these devices." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Power Classes" "Win32_AssociatedBattery" "Relates a logical device and the battery it is using." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Power Classes" "Win32_Battery" "Represents a battery connected to the computer system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Power Classes" "Win32_CurrentProbe" "Represents the properties of a current monitoring sensor (ammeter)." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Power Classes" "Win32_PortableBattery" "Represents the properties of a portable battery, such as one used for a notebook computer." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Power Classes" "Win32_PowerManagementEvent" "Represents power management events resulting from power state changes." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Power Classes" "Win32_UninterruptiblePowerSupply" "Represents the capabilities and management capacity of an uninterruptible power supply (UPS)." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Power Classes" "Win32_VoltageProbe" "Represents the properties of a voltage sensor (electronic voltmeter)." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" " " "The Printing subcategory groups classes that represent printers, printer configurations, and print jobs." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_DriverForDevice" "Relates a printer to a printer driver." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_Printer" "Represents a device connected to a computer system running Windows that is capable of reproducing a visual image on a medium." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_PrinterConfiguration" "Defines the configuration for a printer device." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_PrinterController" "Relates a printer and the local device to which the printer is connected." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_PrinterDriver" "Represents the drivers for a Win32_Printer instance." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_PrinterDriverDll" "Relates a local printer and its driver file (not the driver itself)." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_PrinterSetting" "Relates a printer and its configuration settings." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_PrintJob" "Represents a print job generated by a Windows-based application." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Printing Classes" "Win32_TCPIPPrinterPort" "Represents a TCP/IP service access point." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Telephony Classes" " " "The Telephony subcategory groups classes that represent ""plain old telephone"" modem devices and their associated serial connections." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Telephony Classes" "Win32_POTSModem" "Represents the services and characteristics of a Plain Old Telephone Service (POTS) modem on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Telephony Classes" "Win32_POTSModemToSerialPort" "Relates a modem and the serial port the modem uses." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Video and Monitor Classes" " " "The Video and Monitors subcategory groups classes that represent monitors, video cards, and their associated settings." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Video and Monitor Classes" "Win32_DesktopMonitor" "Represents the type of monitor or display device attached to the computer system." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Video and Monitor Classes" "Win32_DisplayConfiguration" "Represents configuration information for the display device on a computer system running Windows. This class is obsolete. In place of this class, use the properties in the Win32_VideoController, Win32_DesktopMonitor, and CIM_VideoControllerResolution classes." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Video and Monitor Classes" "Win32_DisplayControllerConfiguration" "Represents the video adapter configuration information of a computer system running Windows. This class is obsolete. In place of this class, use the properties in the Win32_VideoController, Win32_DesktopMonitor, and CIM_VideoControllerResolution classes." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Video and Monitor Classes" "Win32_VideoController" "Represents the capabilities and management capacity of the video controller on a computer system running Windows." + Add-WMITreeNode $TreeView "Computer System Hardware Classes" "Video and Monitor Classes" "Win32_VideoSettings" "Relates a video controller and video settings that can be applied to it." + Add-WMITreeNode $TreeView "Operating System Classes" " " " " "Operating system related objects." + Add-WMITreeNode $TreeView "Operating System Classes" "Desktop" " " "The Desktop subcategory groups classes that represent objects that define a specific desktop configuration." + Add-WMITreeNode $TreeView "Operating System Classes" "Desktop" "Win32_Desktop" "Represents the common characteristics of a user's desktop." + Add-WMITreeNode $TreeView "Operating System Classes" "Desktop" "Win32_Environment" "Represents an environment or system environment setting on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Desktop" "Win32_TimeZone" "Represents the time zone information for a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Desktop" "Win32_UserDesktop" "Relates a user account and the desktop settings that are specific to it." + Add-WMITreeNode $TreeView "Operating System Classes" "Drivers" " " "The Drivers subcategory groups classes that represent virtual device drivers and system drivers for base services." + Add-WMITreeNode $TreeView "Operating System Classes" "Drivers" "Win32_DriverVXD" "Represents a virtual device driver on a Windows computer system." + Add-WMITreeNode $TreeView "Operating System Classes" "Drivers" "Win32_SystemDriver" "Represents the system driver for a base service." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" " " "The File System subcategory groups classes that represent the way a hard disk is logically arranged. This includes the type of file system used, the directory structure, and way the disk is partitioned." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_CIMLogicalDeviceCIMDataFile" "Relates logical devices and data files, indicating the driver files used by the device." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_Directory" "Represents a directory entry on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_DirectorySpecification" "Represents the directory layout for the product." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_DiskDriveToDiskPartition" "Relates a disk drive and a partition existing on it." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_DiskPartition" "Represents the capabilities and management capacity of a partitioned area of a physical disk on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_DiskQuota" "Tracks disk space usage for NTFS file system volumes." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_LogicalDiskRootDirectory" "Relates a logical disk and its directory structure." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_LogicalDiskToPartition" "Relates a logical disk drive and the disk partition it resides on." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_OperatingSystemAutochkSetting" "Represents the association between a CIM_ManagedSystemElement instance and the settings defined for it." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_QuotaSetting" "Contains setting information for disk quotas on a volume." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_ShortcutFile" "Represents files that are shortcuts to other files, directories, and commands." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_SubDirectory" "Relates a directory (folder) and one of its subdirectories (subfolders)." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_SystemPartitions" "Relates a computer system and a disk partition on that system." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_Volume" "Represents an area of storage on a hard disk." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_VolumeQuota" "Relates a volume to the per volume quota settings." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_VolumeQuotaSetting" "Relates disk quota settings with a specific disk volume." + Add-WMITreeNode $TreeView "Operating System Classes" "File System" "Win32_VolumeUserQuota" "Relates per user quotas to quota-enabled volumes." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_TypeLibraryAction" "Operating System Classes" + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_TypeLibraryAction" "Operating system related objects." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" " " "Software-related objects." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ClassicCOMApplicationClasses" "Association class" + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ClassicCOMApplicationClasses" "Relates a DCOM application and a COM component grouped under it." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ClassicCOMClass" "Represents the properties of a COM component." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ClassicCOMClassSettings" "Relates a COM class and the settings used to configure instances of the COM class." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ClientApplicationSetting" "Relates an executable and a DCOM application that contains the DCOM configuration options for the executable file." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_COMApplication" "Represents a COM application." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_COMApplicationClasses" "Relates a COM component and the COM application where it resides." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_COMApplicationSettings" "Relates a DCOM application and its configuration settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_COMClass" "Represents the properties of a COM component." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ComClassAutoEmulator" "Relates a COM class and another COM class that it automatically emulates." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ComClassEmulator" "Relates two versions of a COM class." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ComponentCategory" "Represents a component category." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_COMSetting" "Represents the settings associated with a COM component or COM application." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_DCOMApplication" "Represents the properties of a DCOM application." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_DCOMApplicationAccessAllowedSetting" "Relates the Win32_DCOMApplication instance and the user security identifications (SID) that can access it." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_DCOMApplicationLaunchAllowedSetting" "Relates the Win32_DCOMApplication instance and the user SIDs that can launch it." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_DCOMApplicationSetting" "Represents the settings of a DCOM application." + Add-WMITreeNode $TreeView "Operating System Classes" "Installed Applications Classes" "Win32_ImplementedCategory" "Relates a component category and the COM class using its interfaces." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" " " "The Job Objects subcategory groups classes that represent classes that provide the means of instrumenting named job objects. An unnamed job object cannot be instrumented." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_CollectionStatistics" "Relates a managed system element collection and the class representing statistical information about the collection." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_LUID" "Represents a locally unique identifier (LUID)" + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_LUIDandAttributes" "Represents a LUID and its attributes." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_NamedJobObject" "Represents a kernel object that is used to group processes for the sake of controlling the life and resources of the processes within the job object." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_NamedJobObjectActgInfo" "Represents the I/O accounting information for a job object." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_NamedJobObjectLimit" "Represents an association between a job object and the job object limit settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_NamedJobObjectLimitSetting" "Represents the limit settings for a job object." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_NamedJobObjectProcess" "Relates a job object and the process contained in the job object." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_NamedJobObjectSecLimit" "Relates a job object and the job object security limit settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_NamedJobObjectSecLimitSetting" "Represents the security limit settings for a job object." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_NamedJobObjectStatistics" "Represents an association between a job object and the job object I/O accounting information class." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_SIDandAttributes" "Represents a security identifier (SID) and its attributes." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_TokenGroups" "Represents information about the group SIDs in an access token." + Add-WMITreeNode $TreeView "Operating System Classes" "Job Objects" "Win32_TokenPrivileges" "Represents information about a set of privileges for an access token." + Add-WMITreeNode $TreeView "Operating System Classes" "Memory and Page Files" " " "The Memory and Page files subcategory groups classes that represent page file configuration settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Memory and Page Files" "Win32_LogicalMemoryConfiguration" "This class is obsolete and has been replaced by the Win32_OperatingSystem class." + Add-WMITreeNode $TreeView "Operating System Classes" "Memory and Page Files" "Win32_PageFile" "Represents the file used for handling virtual memory file swapping on a Windows system." + Add-WMITreeNode $TreeView "Operating System Classes" "Memory and Page Files" "Win32_PageFileElementSetting" "Relates the initial settings of a page file and the state of those settings during normal use." + Add-WMITreeNode $TreeView "Operating System Classes" "Memory and Page Files" "Win32_PageFileSetting" "Represents the settings of a page file." + Add-WMITreeNode $TreeView "Operating System Classes" "Memory and Page Files" "Win32_PageFileUsage" "Represents the file used for handling virtual memory file swapping on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Memory and Page Files" "Win32_SystemLogicalMemoryConfiguration" "This class is obsolete because the properties existing in the Win32_LogicalMemoryConfiguration class are now a part of the Win32_OperatingSystem class." + Add-WMITreeNode $TreeView "Operating System Classes" "Multimedia Audio or Visual" " " "The class in the Multimedia Audio or Visual subcategory represents properties of the audio or video codec installed on the computer system." + Add-WMITreeNode $TreeView "Operating System Classes" "Multimedia Audio or Visual" "Win32_CodecFile" "Represents the audio or video codec installed on the computer system." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" " " "The Networking subcategory groups classes that represent network connections, network clients, and network connection settings such as the protocol used." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_ActiveRoute" "Relates the current IP4 route to the persisted IP route table." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_IP4PersistedRouteTable" "Represents persisted IP routes." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_IP4RouteTable" "Represents information that governs the routing of network data packets." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_IP4RouteTableEvent" "Represents IP route change events." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_NetworkClient" "Represents a network client on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_NetworkConnection" "Represents an active network connection in a Windows environment." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_NetworkProtocol" "Represents a protocol and its network characteristics on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_NTDomain" "Represents a Windows NT domain." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_PingStatus" "Represents the values returned by the standard ping command." + Add-WMITreeNode $TreeView "Operating System Classes" "Networking" "Win32_ProtocolBinding" "Relates a system-level driver, network protocol, and network adapter." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" " " "The Operating System Events subcategory groups classes that represent events in the operating system related to processes, threads, and system shutdown." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ComputerShutdownEvent" "Represents computer shutdown events." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ComputerSystemEvent" "Represents events related to a computer system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_DeviceChangeEvent" "Represents device change events resulting from the addition, removal, or modification of devices on the computer system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ModuleLoadTrace" "Indicates that a process has loaded a new module." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ModuleTrace" "Base event for module events." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ProcessStartTrace" "Indicates that a new process has started." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ProcessStopTrace" "Indicates that a process has terminated." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ProcessTrace" "Base event for process events." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_SystemConfigurationChangeEvent" "Indicates that the device list on the system has been refreshed (a device has been added or removed, or the configuration changed)." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_SystemTrace" "Base class for all system trace events, including module, process, and thread traces." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ThreadStartTrace" "Indicates a new thread has started." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ThreadStopTrace" "Indicates that a thread has stopped." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_ThreadTrace" "Base event class for thread events." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Events" "Win32_VolumeChangeEvent" "Represents a network-mapped drive event resulting from the addition of a network drive letter or mounted drive on the computer system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" " " "The Operating System Settings subcategory groups classes that represent the Operating System and its settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_BootConfiguration" "Represents the boot configuration of a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_ComputerSystem" "Represents a computer system operating in a Windows environment." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_ComputerSystemProcessor" "Relates a computer system and a processor running on that system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_ComputerSystemProduct" "Represents a product." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_DependentService" "Relates two interdependent base services." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_LoadOrderGroup" "Represents a group of system services that define execution dependencies." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_LoadOrderGroupServiceDependencies" "Represents an association between a base service and a load order group that the service depends on to start running." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_LoadOrderGroupServiceMembers" "Relates a load order group and a base service." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_OperatingSystem" "Represents an operating system installed on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_OperatingSystemQFE" "Relates an operating system and product updates applied as represented in Win32_QuickFixEngineering." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_OSRecoveryConfiguration" "Represents the types of information that will be gathered from memory when the operating system fails." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_QuickFixEngineering" "Represents system-wide Quick Fix Engineering (QFE) or updates that have been applied to the current operating system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_StartupCommand" "Represents a command that runs automatically when a user logs onto the computer system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemBootConfiguration" "Relates a computer system and its boot configuration." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemDesktop" "Relates a computer system and its desktop configuration." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemDevices" "Relates a computer system and a logical device installed on that system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemLoadOrderGroups" "Relates a computer system and a load order group." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemNetworkConnections" "Relates a network connection and the computer system on which it resides." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemOperatingSystem" "Relates a computer system and its operating system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemProcesses" "Relates a computer system and a process running on that system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemProgramGroups" "Relates a computer system and a logical program group." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemResources" "Relates a system resource and the computer system it resides on." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemServices" "Relates a computer system and a service program that exists on the system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemSetting" "Relates a computer system and a general setting on that system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemSystemDriver" "Relates a computer system and a system driver running on that computer system." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemTimeZone" "Relates a computer system and a time zone." + Add-WMITreeNode $TreeView "Operating System Classes" "Operating System Settings" "Win32_SystemUsers" "Relates a computer system and a user account on that system." + Add-WMITreeNode $TreeView "Operating System Classes" "Processes" " " "The Processes subcategory groups classes that represent system processes and threads." + Add-WMITreeNode $TreeView "Operating System Classes" "Processes" "Win32_Process" "Represents a sequence of events on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Processes" "Win32_ProcessStartup" "Represents the startup configuration of a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Processes" "Win32_Thread" "Represents a thread of execution." + Add-WMITreeNode $TreeView "Operating System Classes" "Registry" " " "The class in the Registry subcategory represents the contents of the Windows registry." + Add-WMITreeNode $TreeView "Operating System Classes" "Registry" "Win32_Registry" "Represents the system registry on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Scheduler Jobs" " " "The Scheduler Jobs subcategory groups classes that represent scheduled job settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Scheduler Jobs" "Win32_CurrentTime" "Represents an instance in time as component seconds, minutes, day of the week, and so on." + Add-WMITreeNode $TreeView "Operating System Classes" "Scheduler Jobs" "Win32_ScheduledJob" "Represents a job scheduled using the Windows schedule service." + Add-WMITreeNode $TreeView "Operating System Classes" "Scheduler Jobs" "Win32_LocalTime" "Represents a point in time returned as Win32_LocalTime objects that result from a query. The Hour property is returned as the local time in a 24-hour clock." + Add-WMITreeNode $TreeView "Operating System Classes" "Scheduler Jobs" "Win32_UTCTime" "Represents a point in time that is returned as Win32_UTCTime objects that result from a query. The Hour property is returned as the coordinated universal time (UTC) time in a 24?hour clock." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" " " "The Security subcategory groups classes that represent system security settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_AccountSID" "Relates a security account instance with a security descriptor instance." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_ACE" "Represents an access control entry (ACE)." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_LogicalFileAccess" "Relates the security settings of a file or directory and one member of its discretionary access control list (DACL)." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_LogicalFileAuditing" "Relates the security settings of a file or directory one member of its system access control list (SACL)." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_LogicalFileGroup" "Relates the security settings of a file or directory and its group." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_LogicalFileOwner" "Relates the security settings of a file or directory and its owner." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_LogicalFileSecuritySetting" "Represents security settings for a logical file." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_LogicalShareAccess" "Relates the security settings of a share and one member of its DACL." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_LogicalShareAuditing" "Relates the security settings of a share and one member of its SACL." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_LogicalShareSecuritySetting" "Represents security settings for a logical file." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_PrivilegesStatus" "Represents information about the privileges required to complete an operation." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecurityDescriptor" "Represents a structural representation of a SECURITY_DESCRIPTOR." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecuritySetting" "Represents security settings for a managed element." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecuritySettingAccess" "Represents the rights granted and denied to a trustee for a given object." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecuritySettingAuditing" "Represents the auditing for a given trustee on a given object." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecuritySettingGroup" "Relates the security of an object and its group." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecuritySettingOfLogicalFile" "Represents security settings of a file or directory object." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecuritySettingOfLogicalShare" "Represents security settings of a shared object." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecuritySettingOfObject" "Relates an object to its security settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SecuritySettingOwner" "Relates the security settings of an object and its owner." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_SID" "Represents an arbitrary SID." + Add-WMITreeNode $TreeView "Operating System Classes" "Security" "Win32_Trustee" "Represents a trustee." + Add-WMITreeNode $TreeView "Operating System Classes" "Services" " " "The Services subcategory groups classes that represent services and base services." + Add-WMITreeNode $TreeView "Operating System Classes" "Services" "Win32_BaseService" "Represents executable objects that are installed in a registry database maintained by the Service Control Manager." + Add-WMITreeNode $TreeView "Operating System Classes" "Services" "Win32_Service" "Represents a service on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" " " "The Shares subcategory groups classes that represent details of shared resources, such as printers and folders." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_DFSNode" "Represents a root or junction node of a domain-based or stand-alone distributed file system (DFS)." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_DFSNodeTarget" "Represents the relationship of a DFS node to one of its targets." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_DFSTarget" "Represents the target of a DFS node." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_ServerConnection" "Represents the connections made from a remote computer to a shared resource on the local computer." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_ServerSession" "Represents the sessions that are established with the local computer by users on a remote computer." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_ConnectionShare" "Relates a shared resource on the computer and the connection made to the shared resource." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_PrinterShare" "Relates a local printer and the share that represents it as it is viewed over a network." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_SessionConnection" "Represents an association between a session established with the local server by a user on a remote machine, and the connections that depend on the session." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_SessionProcess" "Represents an association between a logon session and the processes associated with that session." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_ShareToDirectory" "Relates a shared resource on the computer system and the directory to which it is mapped." + Add-WMITreeNode $TreeView "Operating System Classes" "Shares" "Win32_Share" "Represents a shared resource on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" " " "The Start Menu subcategory groups classes that represent program groups." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" "Win32_LogicalProgramGroup" "Represents a program group in a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" "Win32_LogicalProgramGroupDirectory" "Relates logical program groups (groupings in the Start menu), and the file directories in which they are stored." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" "Win32_LogicalProgramGroupItem" "Represents an element contained by a Win32_ProgramGroup instance, that is not itself another Win32_ProgramGroup instance." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" "Win32_LogicalProgramGroupItemDataFile" "Relates the program group items of the Start menu, and the files in which they are stored." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" "Win32_ProgramGroup" "Deprecated." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" "Win32_ProgramGroup" "Represents a program group in a Windows computer system. This class has been deprecated in favor of the Win32_LogicalProgramGroup class." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" "Win32_ProgramGroupContents" "Relates a program group order and an individual program group or item contained in it." + Add-WMITreeNode $TreeView "Operating System Classes" "Start Menu" "Win32_ProgramGroupOrItem" "Represents a logical grouping of programs on the user's Start|Programs menu." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" " " "The Users subcategory groups classes that represent storage information." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowBy" "Represents the association between a shadow copy and the provider that creates the shadow copy." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowContext" "Specifies how a shadow copy is to be created, queried, or deleted." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowCopy" "Represents a duplicate copy of the original volume at a previous time." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowDiffVolumeSupport" "Represents an association between a shadow copy provider and a storage volume." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowFor" "Represents an association between a shadow copy and the volume for which the shadow copy is created." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowOn" "Represents an association between a shadow copy and where the differential data is written." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowProvider" "Represents a component that creates and represents volume shadow copies." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowStorage" "Represents an association between a shadow copy and where the differential data is written." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_ShadowVolumeSupport" "Represents an association between a shadow copy provider with a supported volume." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_Volume" "Represents an area of storage on a hard disk." + Add-WMITreeNode $TreeView "Operating System Classes" "Storage" "Win32_VolumeUserQuota" "Represents a volume to the per volume quota settings." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" " " "The Users subcategory groups classes that represent user account information, such as group membership details." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_Account" "Represents information about user accounts and group accounts known to the computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_Group" "Represents data about a group account." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_GroupInDomain" "Identifies the group accounts associated with a Windows NT domain." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_GroupUser" "Relates a group and an account that is a member of that group." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_LogonSession" "Describes the logon session or sessions associated with a user logged on to Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_LogonSessionMappedDisk" "Represents the mapped logical disks associated with the session." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_NetworkLoginProfile" "Represents the network login information of a specific user on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_SystemAccount" "Represents a system account." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_UserAccount" "Represents information about a user account on a computer system running Windows." + Add-WMITreeNode $TreeView "Operating System Classes" "Users" "Win32_UserInDomain" "Relates a user account and a Windows NT domain." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Event Log" " " "The Windows Event Log subcategory groups classes that represent events, event log entries, event log configuration settings, and so on." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Event Log" "Win32_NTEventlogFile" "Represents data stored in a Windows Event log file." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Event Log" "Win32_NTLogEvent" "Represents Windows events." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Event Log" "Win32_NTLogEventComputer" "Relates instances of Win32_NTLogEvent and Win32_ComputerSystem." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Event Log" "Win32_NTLogEventLog" "Relates instances of Win32_NTLogEvent and Win32_NTEventlogFile classes." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Event Log" "Win32_NTLogEventUser" "Relates instances of Win32_NTLogEvent and Win32_UserAccount." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Product Activation" " " "Windows Product Activation (WPA) is an antipiracy technology to reduce the casual copying of software." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Product Activation" "Win32_ComputerSystemWindowsProductActivationSetting" "Relates instances of Win32_ComputerSystem and Win32_WindowsProductActivation." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Product Activation" "Win32_Proxy" "Contains properties and methods to query and configure an Internet connection related to WPA." + Add-WMITreeNode $TreeView "Operating System Classes" "Windows Product Activation" "Win32_WindowsProductActivation" "Contains properties and methods related to WPA." + Add-WMITreeNode $TreeView "Performance Counter Classes" " " " " "Raw and calculated performance data from performance counters." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" " " "Formatted performance counter classes." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData" "Abstract base class for the formatted data classes." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_ASP_ActiveServerPages" "Performance counters for the Active Server Pages device on the computer system." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_ContentFilter_IndexingServiceFilter" "Performance information about an Indexing Service filter." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_ContentIndex_IndexingService" "Performance data about the state of the Indexing Service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_InetInfo_InternetInformationServicesGlobal" "Performance counters that monitor Internet Information Services (the web service and the FTP service) as a whole." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_ISAPISearch_HttpIndexingService" "Performance counters that monitor the HTTP Indexing Service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_MSDTC_DistributedTransactionCoordinator" "Performance counters for Microsoft Distributed Transaction Coordinator performance counters." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_NTFSDRV_SMTPNTFSStoreDriver" "Performance counters for the Exchange NTFS Store driver." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfDisk_LogicalDisk" "Performance counters that monitor logical partitions of a hard or fixed disk drive." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfDisk_PhysicalDisk" "Performance counters that monitor hard or fixed disk drives on a computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfNet_Browser" "Performance counters that measure the rates of announcements, enumerations, and other browser transmissions." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfNet_Redirector" "Performance counters that monitor network connections originating at the local computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfNet_Server" "Performance counters that monitor communications using the WINS Server service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfNet_ServerWorkQueues" "Performance counters that monitor the length of the queues and objects in the queues." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfOS_Cache" "Performance counters that monitor the file system cache, an area of physical memory that stores recently used data as long as possible to permit access to the data without having to read from the disk." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfOS_Memory" "Performance counters that describe the behavior of physical and virtual memory on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfOS_Objects" "Performance counter for the objects contained by the operating system such as events, mutexes, processes, sections, semaphores, and threads." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfOS_PagingFile" "Performance counters that monitor the paging file(s) on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfOS_Processor" "Performance counters that measure aspects of processor activity." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfOS_System" "Performance counters that apply to more than one instance of a component processors on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfProc_FullImage_Costly" "Performance counters that monitor the virtual address usage of images executed by processes on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfProc_Image_Costly" "Performance counters that monitor the virtual address usage of images executed by processes on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfProc_JobObject" "Performance counters for the accounting and processor usage data collected by each active named job object." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfProc_JobObjectDetails" "Performance counters for information about the active processes that make up a job object." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfProc_Process" "Performance counters that monitor running application program and system processes." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfProc_ProcessAddressSpace_Costly" "Performance counters that monitor memory allocation and use for a selected process." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfProc_Thread" "Performance counters that measure aspects of thread behavior." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PerfProc_ThreadDetails_Costly" "Performance counters that measure aspects of thread behavior that are difficult or time-consuming to collect." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PSched_PSchedFlow" "Performance counters for flow statistics from the packet scheduler." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_PSched_PSchedPipe" "Performance counters for pipe statistics from the packet scheduler." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_RemoteAccess_RASPort" "Performance counters that monitor individual Remote Access Service ports of the RAS device on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_RemoteAccess_RASTotal" "Performance counters that combine values for all ports of the Remote Access service (RAS) device on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_RSVP_ACSRSVPInterfaces" "Performance counters for the number of local network interfaces visible to, and used by the RSVP service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_RSVP_ACSRSVPService" "Performance counters for RSVP or ACS service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_SMTPSVC_SMTPServer" "Performance counters specific to the SMTP Server." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_Spooler_PrintQueue" "Performance performance counters for a print queue." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_TapiSrv_Telephony" "Represents the telephony system." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_Tcpip_ICMP" "Performance counters that measure the rates at which messages are sent and received by using ICMP protocols." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_Tcpip_IP" "Performance counters that measure the rates at which IP datagrams are sent and received by using IP protocols." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_Tcpip_NBTConnection" "Performance counters that measure the rates at which bytes are sent and received over the NBT connection between the local computer and a remote computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_Tcpip_NetworkInterface" "Performance counters that measure the rates at which bytes and packets are sent and received over a TCP/IP network connection." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_Tcpip_TCP" "Performance counters that measure the rates at which TCP segments are sent and received by using the TCP protocol." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_Tcpip_UDP" "Performance counters that measure the rates at which UDP datagrams are sent and received by using the UDP protocol." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_TermService_TerminalServices" "Performance counters for terminal services summary information." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_TermService_TerminalServicesSession" "Performance counters for terminal services per-session resource monitoring." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Formatted Performance Counter Classes" "Win32_PerfFormattedData_W3SVC_WebService" "Performance counters specific to the World Wide Web Publishing Service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" " " "Raw performance counter classes." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData" "Abstract base class for all concrete raw performance counter classes." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_ASP_ActiveServerPages" "Performance counters for the Active Server Pages device on the computer system." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_ContentFilter_IndexingServiceFilter" "Performance counters for an Indexing Service filter." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_ContentIndex_IndexingService" "Performance counters for the state of the Indexing Service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_InetInfo_InternetInformationServicesGlobal" "Performance counters that monitor Internet Information Services (the web service and the FTP service) as a whole." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_ISAPISearch_HttpIndexingService" "Performance counters for the HTTP Indexing Service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_MSDTC_DistributedTransactionCoordinator" "Performance counters for Microsoft Distributed Transaction Coordinator." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_NTFSDRV_SMTPNTFSStoreDriver" "Performance counters for global counters for the Exchange NTFS Store driver." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfDisk_LogicalDisk" "Performance counters that monitor logical partitions of a hard or fixed disk drive." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfDisk_PhysicalDisk" "Performance counters that monitor hard or fixed disk drives on a computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfNet_Browser" "Performance counters that measure the rates of announcements, enumerations, and other browser transmissions." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfNet_Redirector" "Performance counters that monitor network connections originating at the local computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfNet_Server" "Performance counters that monitor communications using the WINS Server service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfNet_ServerWorkQueues" "Performance counters that monitor the length of the queues and objects in the queues." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfOS_Cache" "Performance counters that monitor the file system cache." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfOS_Memory" "Performance counters that describe the behavior of physical and virtual memory on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfOS_Objects" "Performance counters for objects contained by the operating system such as events, mutexes, processes, sections, semaphores, and threads." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfOS_PagingFile" "Performance counters that monitor the paging file(s) on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfOS_Processor" "Performance counters that measure aspects of processor activity." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfOS_System" "Performance counters that apply to more than one instance of a component processors on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfProc_FullImage_Costly" "Performance counters that monitor the virtual address usage of images executed by processes on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfProc_Image_Costly" "Performance counters that monitor the virtual address usage of images executed by processes on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfProc_JobObject" "Performance counters for the accounting and processor usage data collected by each active, named Job object." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfProc_JobObjectDetails" "Performance counters for the active processes that make up a Job object." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfProc_Process" "Performance counters that monitor running application program and system processes." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly" "Performance counters that monitor memory allocation and use for a selected process." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfProc_Thread" "Performance counters that measure aspects of thread behavior." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PerfProc_ThreadDetails_Costly" "Performance counters that measure aspects of thread behavior that are difficult or time-consuming to collect." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PSched_PSchedFlow" "Performance counters for flow statistics from the packet scheduler." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_PSched_PSchedPipe" "Performance counters for pipe statistics from the packet scheduler." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_RemoteAccess_RASPort" "Performance counters that monitor individual Remote Access Service ports of the RAS device on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_RemoteAccess_RASTotal" "Performance counters that combine values for all ports of the Remote Access service (RAS) device on the computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_RSVP_ACSRSVPInterfaces" "Performance counters for local network interfaces visible to, and used by the RSVP service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_RSVP_ACSRSVPService" "Performance counters for RSVP or ACS service." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_SMTPSVC_SMTPServer" "Performance counters specific to the SMTP server." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_Spooler_PrintQueue" "Performance counters for a print queue." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_TapiSrv_Telephony" "Performance counters for the telephony system." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_Tcpip_ICMP" "Performance counters that measure the rates at which messages are sent and received by using ICMP protocols." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_Tcpip_IP" "Performance counters that measure the rates at which IP datagrams are sent and received by using IP protocols." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_Tcpip_NBTConnection" "Performance counters that measure the rates at which bytes are sent and received over the NBT connection between the local computer and a remote computer." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_Tcpip_NetworkInterface" "Performance counters that measure the rates at which bytes and packets are sent and received over a TCP/IP network connection." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_Tcpip_TCP" "Performance counters that measure the rates at which TCP Segments are sent and received by using the TCP protocol." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_Tcpip_UDP" "Performance counters that measure the rates at which UDP datagrams are sent and received by using the UDP protocol." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_TermService_TerminalServices" "Performance counters for terminal services summary information." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_TermService_TerminalServicesSession" "Performance counters for terminal services per-session resource monitoring." + Add-WMITreeNode $TreeView "Performance Counter Classes" "Raw Performance Counter Classes" "Win32_PerfRawData_W3SVC_WebService" "Performance counters specific to the World Wide Web Publishing Service." + Add-WMITreeNode $TreeView "Software-related objects" " " " " "Software-related objects." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" " " "Software-related objects." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ActionCheck" "Relates a Windows Installer action with any locational information it requires." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ApplicationCommandLine" "Identifies a connection between an application and its command-line access point." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ApplicationService" "Represents any installed or advertised components or applications available on the system." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_Binary" "Represents binary information (such as bitmaps, icons, executable files, and so on) that are used by an installation." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_BindImageAction" "Binds each executable file that must be bound to the DLLs imported by it." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_CheckCheck" "Relates an Installer action with any locational information it requires." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ClassInfoAction" "Manages the registration of COM class information with the system." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_CommandLineAccess" "Represents the command line interface to a service or application." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_Condition" "Represents the criteria used to determine the selection state of any entry in the Win32_Feature class." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_CreateFolderAction" "Creates an empty folder for components set to be installed locally." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_DuplicateFileAction" "Creates one or more copies of files installed by the InstallFiles executable action, either to a different directory than the original file, or to the same directory, but with a different name." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_EnvironmentSpecification" "Contains information about any environment variables that must be registered for their associated products installation." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ExtensionInfoAction" "Manages the registration of extension related information with the system." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_FileSpecification" "Represents a source file with its various attributes, ordered by a unique, non-localized identifier." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_FontInfoAction" "Registers installed fonts with the system." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_IniFileSpecification" "Contains the .INI information that the application needs to set in an .ini file." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_InstalledSoftwareElement" "Identifies the computer system on which a particular software element is installed." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_LaunchCondition" "Contains a list of conditions, all of which must be satisfied for the action to succeed." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ManagedSystemElementResource" "Relates an Installer feature with an action used to register and publish the feature." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_MIMEInfoAction" "Registers the MIME-related registry information with the system." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_MoveFileAction" "Locates files that already exist on the user's computer, and move or copy those files to a new location." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_MSIResource" "Represents any resource used by the Installer during the course of an installation or update." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ODBCAttribute" "Represents attributes that are set off an ODBC driver." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ODBCDataSourceAttribute" "Relates an Installer check with any setting information it requires." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ODBCDataSourceSpecification" "Specifies any data source (DSN) that must be registered as part of an installation." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ODBCDriverAttribute" "Relates an Installer check with any setting information it requires." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ODBCDriverSoftwareElement" "Determines the software element of which the ODBC driver is a part." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ODBCDriverSpecification" "Represents any ODBC driver to be installed as part of a particular product." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ODBCSourceAttribute" "Represents attributes set for an ODBC data source." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ODBCTranslatorSpecification" "Represents any ODBC translator that is included as part of a product installation." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_Patch" "Represents an individual update that is to be applied to a particular file and whose source resides at a specified location." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_PatchFile" "Relates an Installer check with any setting information it requires." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_PatchPackage" "Describes an update package that has been applied to this product." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_Product" "Represents a product as it is installed by Windows Installer." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ProductCheck" "Relates instances of CIM_Check and Win32_Product." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ProductResource" "Relates instances of Win32_Product and Win32_MSIResource." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ProductSoftwareFeatures" "Identifies the software features for a particular product." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ProgIDSpecification" "Represents any ProgID that must be registered during a given installation." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_Property" "Contains the property names and values for all defined properties in the installation." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_PublishComponentAction" "Manages the advertisement of the components that may be faulted in by other products with the system." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_RegistryAction" "Configures registry information that the application desires in the system registry." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_RemoveFileAction" "Uninstalls files previously installed by the InstallFiles action." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_RemoveIniAction" "Deletes .ini file information that the application desires to delete." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ReserveCost" "Reserves a specified amount of disk space in any directory, depending on the installation state of a component." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SelfRegModuleAction" "Processes all the modules in the SelfReg module to register the modules, if installed." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ServiceControl" "Represents instructions for controlling both installed and uninstalled services." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ServiceSpecification" "Represents a service to be installed along with an associated package." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ServiceSpecificationService" "Represents instances of Win32_ServiceSpecification and Win32_Service." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SettingCheck" "Relates an Installer check with any setting information it requires." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ShortcutAction" "Manages the creation of shortcuts." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_ShortcutSAP" "Identifies a connection between an application access point and the corresponding shortcut." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareElement" "Represents a software element, part of a software feature." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareElementAction" "Relates an Installer software element with an action that access the element." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareElementCheck" "Relates an Installer element with any condition or locational information that a feature may require." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareElementCondition" "Represents conditional checks that must be evaluated to TRUE before their associated Win32_SoftwareElement instance can be installed." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareElementResource" "Relates a software element with a resource used by that software element." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareFeature" "Represents a distinct subset of a product, consisting of one or more software elements." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareFeatureAction" "Relates an Installer feature with an action used to register and publish the feature." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareFeatureCheck" "Relates an Installer feature with any condition or locational information that a feature may require." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareFeatureParent" "Establishes dependency relationships between objects." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_SoftwareFeatureSoftwareElements" "Identifies the software elements that make up a particular software feature." + Add-WMITreeNode $TreeView "Software-related objects" "Installed Applications Classes" "Win32_TypeLibraryAction" "Registers type libraries with the system." + Add-WMITreeNode $TreeView "WMI Service Management Classes" " " " " "Management for WMI." + Add-WMITreeNode $TreeView "WMI Service Management Classes" "WMI Management Classes" " " "The WMI management classes represent operational parameters for the WMI service." + Add-WMITreeNode $TreeView "WMI Service Management Classes" "WMI Management Classes" "Win32_WMISetting" "Contains the operational parameters for the WMI service." + Add-WMITreeNode $TreeView "WMI Service Management Classes" "WMI Management Classes" "Win32_WMIElementSetting" "Association between a service running in the Windows system, and the WMI settings it can use." + + Add-WMITreeNodesOrderedByName + + Write-Progress -Activity "Added WMIClasses" -Status "Done" -Completed + } + Catch + { + Write-Verbose "Add-WMITreeNodes Catch" + Write-Verbose $_.Exception.Message + } +} +#Adds WMI Category Listitems for a WMI Root +Function Fill-ListViewWMIRoot() +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True)] + [System.Windows.Forms.ListView]$ListView, + [parameter(Mandatory=$True)] + [Object]$NodeWMIRoot + ) + Write-Verbose "Fill-ListViewWMIRoot" + Try + { + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Category") + $Column.Width=$ListView.Width *.40 + $Column=$ListView.Columns.Add("Description") + $Column.Width=$ListView.Width *.59 + ForEach($Node in $NodeWMIRoot.Nodes) + { + + $Item=$ListView.Items.Add($Node.Tag.Category) + $Item.SubItems.Add($Node.Tag.Description) + } + } + Catch [System.Exception] + { + Write-Verbose "Fill-ListViewWMIRoot Catch" + Write-Verbose $_.Exception.Message + } +} +#Adds WMI SubCategory Listitems for a WMI Category +Function Fill-ListViewWMICategory() +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True)] + [System.Windows.Forms.ListView]$ListView, + [parameter(Mandatory=$True)] + [Object]$NodeCategory + ) + Write-Verbose "Fill-ListViewCategory" + Try + { + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("SubCategory") + $Column.Width=$ListView.Width *.40 + $Column=$ListView.Columns.Add("Description") + $Column.Width=$ListView.Width *.59 + ForEach($Node in $NodeCategory.Nodes) + { + + $Item=$ListView.Items.Add($Node.Tag.SubCategory) + $Item.SubItems.Add($Node.Tag.Description) + } + } + Catch [System.Exception] + { + Write-Verbose "Fill-ListViewCategory Catch" + Write-Verbose $_.Exception.Message + } +} +#Adds WMI Class Listitems for a WMI SubCategory +Function Fill-ListViewWMISubCategory() +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True)] + [System.Windows.Forms.ListView]$ListView, + [parameter(Mandatory=$True)] + [Object]$NodeSubCategory + ) + Write-Verbose "Fill-ListViewSubCategory" + Try + { + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Class") + $Column.Width=$ListView.Width *.40 + $Column=$ListView.Columns.Add("Description") + $Column.Width=$ListView.Width *.59 + ForEach($Node in $NodeSubCategory.Nodes) + { + + $Item=$ListView.Items.Add($Node.Tag.Class) + $Item.SubItems.Add($Node.Tag.Description) + } + } + Catch [System.Exception] + { + Write-Verbose $_.Exception.Message + } +} +#Adds a WMI Object Listitem for a WMI Class +Function Fill-ListViewWMIClass() +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True)] + [System.Windows.Forms.ListView]$ListView, + [parameter(Mandatory=$True)] + [object]$NodeClass, + [parameter(Mandatory=$True)] + [int]$Count, + [parameter(Mandatory=$True)] + [string]$Name + ) + Write-Verbose "Fill-ListViewWMIClass" + Try + { + $Item=$ListView.Items.Add($Node.Tag.Class+"["+$Count+"]") + $Item.SubItems.Add($Name) + } + Catch [System.Exception] + { + Write-Verbose "Fill-ListViewWMIClass Catch" + Write-Verbose $_.Exception.Message + } +} +#Process A WMIObject Instance +Function Process-WMIObjectInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [Object]$Node + ) + Write-Verbose "Process-WMIObjectInstance" + $NodeType=Get-WMIObjectType $Node.Tag + If ($NodeType -EQ "WMIRoot") + { + Write-Verbose "Process-WMIObjectInstance WMIRoot" + Fill-ListViewWMIRoot $ListView $Node + Fill-ListViewClass $ListViewClass $Node.Tag + $TextBoxPSObject.Text = "" + $StatusBar.Text = $Node.Tag.Description + } + ElseIf ($NodeType -EQ "WMICategory") + { + Write-Verbose "Process-WMIObjectInstance WMICategory" + Fill-ListViewWMICategory $ListView $Node + Fill-ListViewClass $ListViewClass $Node.Tag + $TextBoxPSObject.Text = "" + $StatusBar.Text = $Node.Tag.Description + } + ElseIf ($NodeType -EQ "WMISubCategory") + { + Write-Verbose "Process-WMIObjectInstance WMISubCategory" + Fill-ListViewWMISubCategory $ListView $Node + Fill-ListViewClass $ListViewClass $Node.Tag + $TextBoxPSObject.Text = "" + $StatusBar.Text = $Node.Tag.Description + } + ElseIf ($NodeType -EQ "WMIClass") + { + Write-Verbose "Process-WMIObjectInstance WMIClass" + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Instance") + $Column.Width=$ListView.Width *.45 + $Column=$ListView.Columns.Add("Value") + $Column.Width=$ListView.Width *.54 + $Node.Nodes.Clear() + $StatusBar.Text = "Retrieving "+ $Node.Tag.Class +" classes" + $Objects = Get-WmiObject -Class $Sender.SelectedNode.Text -Computer $TextBoxComputers.Text -Filter $TextBoxFilter.Text + $Key="" + $Count=0 + ForEach($Object in $Objects) + { + $StatusBar.Text = "Retrieving "+ $Node.Tag.Class +"[" + $Count +"]" + $Name = Get-InstanceFriendlyName $Object + $NewNode=$Node.Nodes.Add((Get-NextKey)+" "+$Name,$Name) + $NewNode.Tag = $Object + Fill-ListViewWMIClass $ListView $Node $Count $Name + $Count++ + } + Fill-ListViewClass $ListViewClass $Node.Tag + $TextBoxPSObject.Text = "" + $StatusBar.Text = $Node.Tag.Description + } +} + +#endregion +#region Net Assemblies + +#Adds Net Assemblies +Function Add-NetAssemblies +{ + [CmdletBinding()] + param() + Try + { + Write-Verbose "Add-NetAssemblies" + $NetAssemblies=New-Object System.Collections.SortedList + $Assemblies = [appdomain]::CurrentDomain.GetAssemblies() + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Assemblies.Count + ForEach ($Assembly in $Assemblies) + { + $AssemblyName=$($Assembly.FullName).Split(",")[0] + Write-Progress -Activity "Adding Assembly $AssemblyName" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + IF ($NetAssemblies[$AssemblyName] -EQ $Null) + { + $NetAssemblies.Add($AssemblyName,$Assembly) + } + } + Write-Progress -Activity "Added PS Assemblies" -Status "Done" -Completed + $NetAssemblies + } + Catch [System.Exception] + { + Write-Verbose "Add-NetAssemblies Catch" + Write-Verbose $_.Exception.Message + } +} + +#Adds Net Assemblies node +Function Add-NetAssembliesNode +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True,Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-NetAssembliesNode" + $NetAssemblies = Add-NetAssemblies + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +".Net Assemblies"),".Net Assemblies") + $Node.Tag = $NetAssemblies + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-NetAssembliesNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region Net Classes +#Adds Net Assemblies For Net Classes +Function Add-NetClassAssemblies +{ + [CmdletBinding()] + param() + Try + { + Write-Verbose "Add-NetClassAssemblies" + If ($Script:POETreeNodes["NetAsssembliesList"] -NE $Null) + { + } + Else + { + $NetAssemblies=@{} + $NetAssemblyMaxClasses=0 + $NetAssemblyClasses=0 + $Assemblies = [appdomain]::CurrentDomain.GetAssemblies() + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Assemblies.Count + ForEach ($Assembly in $Assemblies) + { + $AssemblyName=$Assembly.FullName.Split(",")[0] + Write-Progress -Activity "Adding Assembly $AssemblyName" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + IF ($NetAssemblies[$AssemblyName] -EQ $Null) + { + $NetAssemblies.Add($AssemblyName,$Assembly) + $AssemblyClasses=$Assembly.ExportedTypes + $AssemblyClassesCount = $AssemblyClasses.Count + } + Else + { + $AssemblyClassesCount=0 + } + IF ($AssemblyClassesCount -GT $NetAssemblyMaxClasses) + { + $NetAssemblyMaxClasses = $AssemblyClassesCount + } + $NetAssemblyClasses += $AssemblyClassesCount + } + Write-Progress -Activity "Added PS Assemblies" -Status "Done" -Completed + $Script:POETreeNodes.Add("NetAssemblyMaxClasses",$NetAssemblyMaxClasses) + $Script:POETreeNodes.Add("NetAssemblyClasses",$NetAssemblyClasses) + $NetAssemblies + } + } + Catch [System.Exception] + { + Write-Verbose "Add-NetClassAssemblies Catch" + Write-Verbose $_.Exception.Message + } +} + +#Adds Net Classes +Function Add-NetClasses +{ + [CmdletBinding()] + param( + [Object]$ClassList, + [String]$ClassName, + [Object]$Class + ) + Try + { + $Position = $ClassName.IndexOf(".") + IF ($Position -GT 0) + { + $ClassFirst = $ClassName.Substring(0,$Position) + If ($ClassList.Count -GT 0) + { + $NewClassList = $ClassList[$ClassFirst] + If ($NewClassList -EQ $Null) + { + $NewClassList = New-Object System.Collections.SortedList + $ClassList.Add($ClassFirst,$NewClassList) + } + } + Else + { + $NewClassList = New-Object System.Collections.SortedList + IF ($ClassList -EQ $Null) + { + } + Else + { + $ClassList.Add($ClassFirst,$NewClassList) + } + } + $ClassRest = $ClassName.Substring($Position+1) + Add-NetClasses $NewClassList $ClassRest $Class + } + Else + { + If ($ClassList[$ClassName] -EQ $Null) + { + $ClassList.Add($Class.FullName,$Class) + } + } + } + Catch [System.Exception] + { + Write-Verbose "Add-NetClasses Catch" + Write-Verbose $_.Exception.Message + } +} +Function Add-SomeNetClasses +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True,Position=0)] + [Int]$Index + ) + Try + { + Write-Verbose "Add-SomeNetClasses Index=$Index" + $NetClasses=$Script:POETreeNodes["NetClassesList"] + $NetAssembliesToProcess=$Script:POETreeNodes["NetAssembliesToProcess"] + $NetClassesProcessed=$Script:POETreeNodes["NetClassesProcessed"] + $KeysToProcess=$NetAssembliesToProcess.Keys + $Keys=@() + ForEach($Key in $KeysToProcess) + { + $Keys += $Key + } + For ($I=0; $I -LT $Keys.Count;$I++) + { + $Key=$Keys[$I] + $Assembly=$NetAssembliesToProcess[$Key] + $Classes=$Assembly.ExportedTypes + $Count=$Classes.Count + If($Index -LT $Count) + { + $Class = $Classes[$Index] + $NetClassesProcessed++ + IF($Class.IsPublic) + { + $FullName = $Class.FullName + IF (($FullName.Contains("_")) -OR + ($FullName.Contains("XamlGeneratedNamespace")) + ) + { + } + Else + { + IF ($FullName.Contains("``")) + { + IF ($FullName.Contains("Collections")) + { + Add-NetClasses $NetClasses $FullName $Class + } + } + Else + { + Add-NetClasses $NetClasses $FullName $Class + } + } + } + } + Else + { + $NetAssembliesToProcess.Remove($Key) + } + } + $Script:POETreeNodes["NetClassesProcessed"]=$NetClassesProcessed + } + Catch + { + Write-Verbose "Add-SomeNetClasses Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add adding Net Classes node +Function Add-NetClassesNode +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True,Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-NetClassesNode" + $NetClassesNode = $Script:POETreeNodes["NetClasses"] + IF ($NetClassesNode -EQ $Null) + { + $NetClasses=New-Object System.Collections.SortedList + $NetAssembliesToProcess = Add-NetClassAssemblies + $NetClassIndex=[int]0 + $NetClassesProcessed=[int]0 + $Script:POETreeNodes.Add("NetClassesList",$NetClasses) + $Script:POETreeNodes.Add("NetClassIndex",$NetClassIndex) + $Script:POETreeNodes.Add("NetAssembliesToProcess",$NetAssembliesToProcess) + $Script:POETreeNodes.Add("NetClassesProcessed",$NetClassesProcessed) + } + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + $NetClassesNode = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +".Net Classes"),".Net Classes") + $NetClassesNode.Tag = $NetClasses + $NetClassesNode.EnsureVisible() + $NetClassesNode + } + Catch [System.Exception] + { + Write-Verbose "Add-NetClassesNodes Catch" + Write-Verbose $_.Exception.Message + } +} +#endregion +#region PS Aliases + +#Adds a PS Alias +Function Add-PSAlias +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$Alias, + [parameter(Mandatory=$True, + Position=1)] + [Object]$PSAliasesByAlias, + [parameter(Mandatory=$True, + Position=2)] + [Object]$PSAliasesByCommand + ) + TRY + { + Write-Verbose "Add-PSAlias Alias.Name=$($Alias.Name)" + If ($Alias) #Not Null + { + $AliasName = $Alias.Name + $Space = $AliasName.PadRight(25-$AliasName.Length) + $Definition = $Alias.Definition + $Name = $Space+$Definition + $PSAliasesByAlias.Add($Name,$Alias) + + $AliasName = $Alias.Name + $Definition = $Alias.Definition + $Space = $Definition.PadRight(50-$Definition.Length) + $Name = $Space+$AliasName + $PSAliasesByCommand.Add($Name,$Alias) + } + + } + Catch [System.Exception] + { + Write-Verbose "Add-PSAlias Catch" + Write-Verbose $_.Exception.Message + } +} + +#Adds PS Aliases +Function Add-PSAliases +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "Add-PSAliases" + $PSAliases=[ordered]@{} + $PSAliasesByAlias=New-Object System.Collections.SortedList + $PSAliasesByCommand=New-Object System.Collections.SortedList + $Aliases = Get-Alias + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Aliases.Count + For($I=0;$I -LT $Aliases.Count;$I++) + { + $Alias=$Aliases[$I] + Write-Progress -Activity "Adding Alias $Alias" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + $AliasNode = Add-PSAlias $Alias $PSAliasesByAlias $PSAliasesByCommand + } + Write-Progress -Activity "Added PS Aliases" -Status "Done" -Completed + $PSAliases.Add("By Alias",$PSAliasesByAlias) + $PSAliases.Add("By Command",$PSAliasesByCommand) + $PSAliases + } + Catch [System.Exception] + { + Write-Verbose "Add-PSAliases Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView node for PS Aliases +Function Add-PSAliasesNode +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True,Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-PSAliasesNode" + $PSAliases = Add-PSAliases + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"PowerShell Aliases"),"PowerShell Aliases") + $Node.Tag = $PSAliases + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-PSAliasesNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region PS Commands + +#Adds a PS Command +Function Add-PSCommand +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$PSCommand, + [parameter(Mandatory=$True, + Position=1)] + [Object]$PSCommandsByName, + [parameter(Mandatory=$True, + Position=2)] + [Object]$PSCommandsByModule, + [parameter(Mandatory=$True, + Position=3)] + [Object]$PSCommandsByApprovedVerb, + [parameter(Mandatory=$True, + Position=4)] + [Object]$PSCommandsByNonApprovedVerb + ) + TRY + { + Write-Verbose "Add-PSCommand PSCommand.Name=$($PSCommand.Name)" + If ($PSCommand -NE $Null) + { + $CommandName = $PSCommand.Name + $PSCommandsByName.Add($CommandName,$Command) + + $ModuleName = $Command.Module.Name + IF ($ModuleName -NE $Null) + { + $Module = $PSCommandsByModule[$ModuleName] + If ($Module -EQ $Null) + { + $Module=New-Object System.Collections.SortedList + $PSCommandsByModule.Add($ModuleName,$Module) + } + $Module.Add($CommandName,$Command) + } + $VerbName = $PSCommand.Verb + IF ($VerbName -NE "") + { + $Verb = $PSCommandsByApprovedVerb[$VerbName] + If ($Verb -EQ $Null) + { + $Verb = $PSCommandsByNonApprovedVerb[$VerbName] + IF($Verb -EQ $Null) + { + $Verb=New-Object System.Collections.SortedList + $PSCommandsByNonApprovedVerb.Add($VerbName,$Verb) + } + } + } + Else + { + If ($CommandName.Contains(":")) + { + $VerbName = " Drive Alias" + } + ElseIf ($CommandName.Contains("_")) + { + $VerbName = " Event Handler" + } + ElseIf ($CommandName.Contains("-")) + { + $VerbName = $CommandName.Split("-")[0] + } + Else + { + $VerbName = " Alias" + } + $Verb = $PSCommandsByNonApprovedVerb[$VerbName] + IF($Verb -EQ $Null) + { + $Verb=New-Object System.Collections.SortedList + $PSCommandsByNonApprovedVerb.Add($VerbName,$Verb) + } + } + $Verb.Add($CommandName,$PSCommand) + } + } + Catch [System.Exception] + { + Write-Verbose "Add-PSCommand Catch" + Write-Verbose $_.Exception.Message + } +} + +#Adds PS Commands +Function Add-PSCommands +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "Add-PSCommands" + $PSCommands=[ordered]@{} + $PSCommandsByModule=New-Object System.Collections.SortedList + $PSCommandsByName=New-Object System.Collections.SortedList + $PSCommandsByApprovedVerb=New-Object System.Collections.SortedList + $PSCommandsByNonApprovedVerb=New-Object System.Collections.SortedList + $Commands = Get-Command + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Commands.Count + $PSVerbs = Get-Verb + Write-Verbose "Add-PSCommands Getting Approved Verbs" + ForEach ($PSVerb IN $PSVerbs) + { + $PSCommandsByApprovedVerb.Add($PSVerb.Verb,(New-Object System.Collections.SortedList)) + } + For($I=0;$I -LT $Commands.Count;$I++) + { + $Command=$Commands[$I] + Write-Progress -Activity "Adding Command $Command" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + $CommandNode = Add-PSCommand $Command $PSCommandsByName $PSCommandsByModule $PSCommandsByApprovedVerb $PSCommandsByNonApprovedVerb + } + Write-Progress -Activity "Added PS Commands" -Status "Done" -Completed + $PSCommands.Add("By Name",$PSCommandsByName) + $PSCommands.Add("By Module",$PSCommandsByModule) + $PSCommands.Add("By Approved Verb",$PSCommandsByApprovedVerb) + $PSCommands.Add("By Non Approved Verb",$PSCommandsByNonApprovedVerb) + $PSCommands + } + Catch [System.Exception] + { + Write-Verbose "Add-PSCommands Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView node for PS Commands +Function Add-PSCommandsNode +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True,Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-PSCommandsNode" + IF ($Script:PSCommands) + { + } + Else + { + $PSCommands = Add-PSCommands + } + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + IF ($mnuPSAliases.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"PowerShell Commands"),"PowerShell Commands") + $Node.Tag = $PSCommands + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-PSCommandsNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region PS Drives + +#Adds a PS Drive +Function Add-PSDrive +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$PSDrive, + [parameter(Mandatory=$True, + Position=1)] + [Object]$PSDrivesByName, + [parameter(Mandatory=$True, + Position=2)] + [Object]$PSDrivesByProvider + ) + TRY + { + Write-Verbose "Add-PSDrive PSDrive.Name=$($PSDrive.Name)" + If ($PSDrive -NE $Null) + { + $DriveName = $Drive.Name + $PSDrivesByName.Add($DriveName,$PSDrive) + + $ProviderName = $PSDrive.Provider.Name + $Provider = $PSDrivesByProvider[$ProviderName] + If ($Provider -NE $NULL) + { + } + Else + { + $Provider=New-Object System.Collections.SortedList + $PSDrivesByProvider.Add($ProviderName,$Provider) + } + $Provider.Add($DriveName,$Drive) + } + } + Catch [System.Exception] + { + Write-Verbose "Add-PSDrive Catch" + Write-Verbose $_.Exception.Message + } +} + +#Adds PS Drives +Function Add-PSDrives +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "Add-PSDrives" + $PSDrives=[ordered]@{} + $PSDrivesByProvider=New-Object System.Collections.SortedList + $PSDrivesByName=New-Object System.Collections.SortedList + $Drives = Get-PSDrive + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Drives.Count + For($I=0;$I -LT $Drives.Count;$I++) + { + $Drive=$Drives[$I] + Write-Progress -Activity "Adding Drive $Drive" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + Add-PSDrive $Drive $PSDrivesByName $PSDrivesByProvider + } + Write-Progress -Activity "Added PS Drives" -Status "Done" -Completed + $PSDrives.Add("By Name",$PSDrivesByName) + $PSDrives.Add("By Provider",$PSDrivesByProvider) + $PSDrives + } + Catch [System.Exception] + { + Write-Verbose "Add-PSDrives Catch" + Write-Verbose $_.Exception.Message + } +} +#Add TreeView node for PS Drives + +Function Add-PSDrivesNode +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True,Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-PSDrivesNode" + $PSDrives = Add-PSDrives + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + IF ($mnuPSAliases.Checked) {$Index++} + IF ($mnuPSCommands.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"PowerShell Drives"),"PowerShell Drives") + $Node.Tag = $PSDrives + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-PSDrivesNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region PS Modules + +#Adds loaded PS Modules +Function Add-PSModules +{ + [CmdletBinding()] + param() + Try + { + Write-Verbose "Add-PSModules" + $PSModules=[ordered]@{} + $Modules=Get-Module + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Modules.Count + ForEach ($Module In $Modules) + { + Write-Progress -Activity "Adding Module $Module" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + IF (! $PSModules[$Module.Name]) + { + $PSModules.Add($Module.Name,$Module) + } + } + Write-Progress -Activity "Added PS Modules" -Status "Done" -Completed + $PSModules + } + Catch [System.Exception] + { + Write-Verbose "Add-PSModules Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView node for PS Variables +Function Add-PSModulesNode +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True,Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-PSModulesNode" + $PSModules = Add-PSModules + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + IF ($mnuPSAliases.Checked) {$Index++} + IF ($mnuPSCommands.Checked) {$Index++} + IF ($mnuPSDrives.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"PowerShell Modules"),"PowerShell Modules") + $Node.Tag = $PSModules + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-PSModulesNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region PS Variables + +#Add PS Variable +Function Add-PSVariable +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [Object]$Variable, + [parameter(Mandatory=$True, + Position=1)] + [Object]$PSVariablesAuto, + [parameter(Mandatory=$True, + Position=2)] + [Object]$PSVariablesConfig, + [parameter(Mandatory=$True, + Position=3)] + [Object]$PSVariablesForm, + [parameter(Mandatory=$True, + Position=4)] + [Object]$PSVariablesScript, + [parameter(Mandatory=$True, + Position=5)] + [Object]$PSVariablesLocal + ) + Write-Debug "Add-PSVariable Variable.Name=$($Variable.Name)" + TRY + { + If ($Variable -NE $Null) #Not Null + { + If ($IsPSAutoVariable[$Variable.Name]) + { + $PSVariablesAuto.Add($Variable.Name,$Variable) + Write-Debug "PSVariablesAuto.Count=$($PSSAutoVariables.Count)" + } + ElseIf ($IsPSConfigVariable[$Variable.Name]) + { + $PSVariablesConfig.Add($Variable.Name,$Variable) + Write-Debug "PSVariablesConfig.Count=$($PSVariablesConfig.Count)" + } + ElseIf ($IsPSFormVariable[$Variable.Name]) + { + $PSVariablesForm.Add($Variable.Name,$Variable) + Write-Debug "PSVariablesForm.Count=$($PSVariablesForm.Count)" + } + ElseIf ($IsPSScriptVariable[$Variable.Name]) + { + $PSVariablesScript.Add($Variable.Name,$Variable) + Write-Debug "PSVariablesScript.Count=$($PSVariablesScript.Count)" + } + Else + { + IF (($Variable.Value -Is [System.Windows.Forms.TreeView]) -And + ($Variable.Value.Name -EQ "TreeViewInstance") + ) + { + } + Else + { + $PSVariablesLocal.Add($Variable.Name,$Variable) + Write-Debug "PSVariablesLocal.Count=$($PSVariablesLocal.Count)" + } + } + } + } + Catch [System.Exception] + { + Write-Verbose "Add-PSVariable Catch" + Write-Verbose $_.Exception.Message + } +} + +#Adds PS Variables +Function Add-PSVariables +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "Add-PSVariables" + $Variables = Get-Variable + Write-Verbose "Variables.GetType=$($Variables.GetType())" + Write-Verbose "Variables.Count=$($Variables.Count)" + $PSVariables=[ordered]@{} + $PSVariablesAuto=[ordered]@{} + $PSVariablesConfig=[ordered]@{} + $PSVariablesForm=[ordered]@{} + $PSVariablesScript=[ordered]@{} + $PSVariablesLocal=[ordered]@{} + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Variables.Count + ForEach ($Variable In $Variables) + { + Write-Progress -Activity "Adding Variable $Variable" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + Add-PSVariable $Variable $PSVariablesAuto $PSVariablesConfig $PSVariablesForm $PSVariablesScript $PSVariablesLocal + } + Write-Progress -Activity "Added PS Variables" -Status "Done" -Completed + $PSVariables.Add("PowerShell Automatic Variables",$PSVariablesAuto) + $PSVariables.Add("PowerShell Preference Variables",$PSVariablesConfig) + $PSVariables.Add("Form Variables",$PSVariablesForm) + $PSVariables.Add("Script Variables",$PSVariablesScript) + $PSVariables.Add("User Defined Variables",$PSVariablesLocal) + $PSVariables + } + Catch [System.Exception] + { + Write-Verbose "Add-PSVariables Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView node for PS Variables +Function Add-PSVariablesNode +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-PSVariablesNode" + $PSVariables = Add-PSVariables + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + IF ($mnuPSAliases.Checked) {$Index++} + IF ($mnuPSCommands.Checked) {$Index++} + IF ($mnuPSDrives.Checked) {$Index++} + IF ($mnuPSModules.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"PowerShell Variables"),"PowerShell Variables") + $Node.Tag = $PSVariables + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-PSVariablesNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region WIN Features + +#Adds Windows Features +Function Add-WINFeatures +{ + [CmdletBinding()] + param ( + ) + Try + { + Write-Verbose "Add-WINFeatures" + $WINFeatureInstalled=New-Object System.Collections.SortedList + $WINFeatureNotInstalled=New-Object System.Collections.SortedList + $WINFeatureAll=New-Object System.Collections.SortedList + $WINFeatures=[ordered]@{} + $Features = Get-WindowsFeature -Verbose:$False + Write-Verbose "Features.GetType=$($Features.GetType())" + Write-Verbose "Features.Count=$($Features.Count)" + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Features.Count + ForEach ($Feature In $Features) + { + Write-Progress -Activity "Adding Windows Feature $Feature" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + IF ($Feature.Installed) + { + $WINFeatureInstalled.Add($Feature.Name,$Feature) + } + Else + { + $WINFeatureNotInstalled.Add($Feature.Name,$Feature) + } + $WINFeatureAll.Add($Feature.Name,$Feature) + } + Write-Progress -Activity "Added Windows Features" -Status "Done" -Completed + $WINFeatures.Add("Installed",$WINFeatureInstalled) + $WINFeatures.Add("Not Installed",$WINFeatureNotInstalled) + $WINFeatures.Add("Sorted By Name",$WINFeatureAll) + $WINFeatures + } + Catch [System.Exception] + { + Write-Verbose "Add-WINFeatures Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView node for Windows Features +Function Add-WINFeaturesNode +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-WINFeaturesNode" + $WINFeatures = Add-WINFeatures + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + IF ($mnuPSAliases.Checked) {$Index++} + IF ($mnuPSCommands.Checked) {$Index++} + IF ($mnuPSDrives.Checked) {$Index++} + IF ($mnuPSModules.Checked) {$Index++} + IF ($mnuPSVariables.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"Windows Features"),"Windows Features") + $Node.Tag = $WINFeatures + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-WINFeaturesNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region WIN Processes + +#Adds Windows Processes +Function Add-WINProcesses +{ + [CmdletBinding()] + param ( + ) + Try + { + Write-Verbose "Add-WINProcesses" + $Processes = Get-Process + $WINProcesses=[Ordered]@{} + $WINProcessesID=New-Object System.Collections.SortedList + $WINProcessesName=$Processes + $WINProcessesWindow=New-Object System.Collections.SortedList + $WINProcessesNonWindow=New-Object System.Collections.SortedList + Write-Verbose "Processes.GetType=$($Processes.GetType())" + Write-Verbose "Processes.Count=$($Processes.Count)" + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Processes.Count + ForEach ($Process In $Processes) + { + Write-Progress -Activity "Adding Windows Process $Process" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + $WINProcessesID.Add($Process.ID,$Process) + IF($Process.MainWindowTitle -EQ "") + { + $WINProcessesNonWindow.Add("$($Process.Name) ($($Process.ID))",$Process) + } + Else + { + $WINProcessesWindow.Add("$($Process.Name) ($($Process.ID))",$Process) + } + } + Write-Progress -Activity "Added Windows Processes" -Status "Done" -Completed + $WINProcesses.Add("By ID",$WINProcessesID) + $WINProcesses.Add("By Name",$WINProcessesName) + $WINProcesses.Add("Applications",$WINProcessesWindow) + $WINProcesses.Add("Background Processes",$WINProcessesNonWindow) + $WINProcesses + } + Catch [System.Exception] + { + Write-Verbose "Add-WINProcesss Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView node for Windows Processs +Function Add-WINProcessesNode +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-WINProcessesNode" + $WINProcesses = Add-WINProcesses + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + IF ($mnuPSAliases.Checked) {$Index++} + IF ($mnuPSCommands.Checked) {$Index++} + IF ($mnuPSDrives.Checked) {$Index++} + IF ($mnuPSModules.Checked) {$Index++} + IF ($mnuPSVariables.Checked) {$Index++} + IF ($mnuWINFeature.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"Windows Processes"),"Windows Processes") + $Node.Tag = $WINProcesses + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-WINProcessesNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region WIN Services + +#Adds Windows Services +Function Add-WINServices +{ + [CmdletBinding()] + param ( + ) + Try + { + Write-Verbose "Add-WINServices" + $WINServiceRunning=New-Object System.Collections.SortedList + $WINServiceNotRunning=New-Object System.Collections.SortedList + $WINServiceAll=New-Object System.Collections.SortedList + $WINServices=[ordered]@{} + $Services = Get-Service + Write-Verbose "Services.GetType=$($Services.GetType())" + Write-Verbose "Services.Count=$($Services.Count)" + $ProgressCounter = 0 + $ProgressIncrement = 100 / $Services.Count + ForEach ($Service In $Services) + { + Write-Progress -Activity "Adding Windows Service $Service" -PercentComplete $ProgressCounter -Status "Working ..." + $ProgressCounter += $ProgressIncrement + IF ($Service.Status.ToString() -EQ "Running") + { + $WINServiceRunning.Add($Service.Name,$Service) + } + Else + { + $WINServiceNotRunning.Add($Service.Name,$Service) + } + $WINServiceAll.Add($Service.Name,$Service) + } + Write-Progress -Activity "Added Windows Services" -Status "Done" -Completed + $WINServices.Add("Running",$WINServiceRunning) + $WINServices.Add("Not Running",$WINServiceNotRunning) + $WINServices.Add("Sorted By Name",$WINServiceAll) + $WINServices + } + Catch [System.Exception] + { + Write-Verbose "Add-WINServices Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView node for Windows Services +Function Add-WINServicesNode +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-WINServicesNode" + $WINServices = Add-WINServices + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + IF ($mnuPSAliases.Checked) {$Index++} + IF ($mnuPSCommands.Checked) {$Index++} + IF ($mnuPSDrives.Checked) {$Index++} + IF ($mnuPSModules.Checked) {$Index++} + IF ($mnuPSVariables.Checked) {$Index++} + IF ($mnuWINFeature.Checked) {$Index++} + IF ($mnuWINProcess.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"Windows Services"),"Windows Services") + $Node.Tag = $WINServices + $Node.EnsureVisible() + $Node + } + Catch [System.Exception] + { + Write-Verbose "Add-WINServicesNode Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion +#region "Test Cases" + +#Add TreeView nodes for Test Cases +Function Add-TestCaseLeaf +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True, + Position=0)] + [Object]$Root, + [parameter(Mandatory=$True, + Position=1)] + [String]$Key, + [parameter(Mandatory=$True, + Position=2)] + [Object]$Value + ) + Try + { + Write-Debug "Add-TestCaseLeaf $Key" + $Leaf = $Root[$Key] + If (! $Leaf) + { + $Root.Add($Key,$Value) + } + } + Catch + { + Write-Verbose "Add-TestCaseLeaf Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView nodes for Test Cases +Function Add-TestCaseBranch +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True, + Position=0)] + [Object]$Root, + [parameter(Mandatory=$True, + Position=1)] + [String]$Key + ) + Try + { + Write-Debug "Add-TestCaseBranch $Key" + $Branch = $Root[$Key] + If (! $Branch) + { + $Branch = [ordered]@{} + $Root.Add($Key,$Branch) + } + Else + { + } + $Branch + } + Catch + { + Write-Verbose "Add-TestCaseBranch Catch" + Write-Verbose $_.Exception.Message + } +} +#Adds PSCustomObject Test Cases +Function Add-PSCustomObjectTestCase +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True, + Position=0)] + [Object]$Root, + [parameter(Mandatory=$True, + Position=1)] + [Object]$Key, + [parameter(Mandatory=$True, + Position=2)] + [Object]$Value, + [parameter(Mandatory=$True, + Position=3)] + [Object]$Type + ) + Try + { + Write-Verbose "Add-PSCustomObjectTestCase Key=$Key" + [string]$PSObjectProperty=$Key + $PSObjectProperty=$PSObjectProperty.Replace("[","") + $PSObjectProperty=$PSObjectProperty.Replace("]","_") + $PSObjectProperty=$PSObjectProperty.Replace("(","") + $PSObjectProperty=$PSObjectProperty.Replace(")","") + $PSObjectProperty=$PSObjectProperty.Replace(":","") + $PSObjectProperty=$PSObjectProperty.Replace("$","") + $PSObjectProperty=$PSObjectProperty.Replace("-","") + $PSObjectProperty=$PSObjectProperty.Replace("""","") + $PSObjectProperty=$PSObjectProperty.Replace("'","") + $PSObjectProperty=$PSObjectProperty.Replace(" ","") + $PSObjectProperty=$PSObjectProperty.Replace(".","_") + Write-Verbose "Add-PSCustomObjectTestCase PSObjectProperty=$PSObjectProperty" + + $Level1=Add-TestCaseBranch $Root "PSCustomObject" + $Level2=Add-TestCaseBranch $Level1 "[PSCustomObject] Test Cases" + + $PSObjectKey="PSCustomObject Object" + $PSObject = $Level2[$PSObjectKey] + If ($PSObject -EQ $Null) + { + Write-Verbose "Add-PSCustomObjectTestCase Adding PSCustomObject Object" + $PSObject = New-Object PSObject -Property ([ordered]@{$PSObjectProperty=$Value;}) + $PSObjectLeaf=Add-TestCaseLeaf $Level2 $PSObjectKey $PSObject + $PSObjectType=$PSObject.GetType() + Write-Verbose "Add-PSCustomObjectTestCase Adding [PSObject]" + $PSObjectTypeLeaf=Add-TestCaseLeaf $Level1 "[$($PSObjectType.FullName)]" $PSObjectType + Write-Verbose "Add-PSCustomObjectTestCase Adding PSObject.BaseType" + $BaseLeaf =Add-BaseTypeTestCase $Root $PSObjectType.BaseType $Level2 + $ArrayBranch=Add-TestCaseBranch $Level1 "$($PSObjectType.FullName)[]" + [PSCustomObject[]]$PSObjectArray=@($PSObject) + $ArrayLeaf=Add-TestCaseLeaf $ArrayBranch ($PSObjectType.FullName+"[]Test Case") $PSObjectArray + $ArrayType=$PSObjectArray.GetType() + $ArrayTypeLeaf=Add-TestCaseLeaf $ArrayBranch "[$($ArrayType.FullName)]" $ArrayType + } + Else + { + Add-Member -InputObject $PSObject -MemberType NoteProperty -Name $PSObjectProperty -Value $Value + } + + $PSCustomObjectKey="PSCustomObject "+$($Type.Name) + $PSCustomObject = $Level2[$PSCustomObjectKey] + If ($PSCustomObject -EQ $Null) + { + $PSCustomObject = New-Object PSObject -Property ([ordered]@{$PSObjectProperty=$Value;}) + $PSObjectLeaf=Add-TestCaseLeaf $Level2 $PSCustomObjectKey $PSCustomObject + $PSObjectType=$PSObject.GetType() + $ArrayBranch=Add-TestCaseBranch $Level1 "$($PSObjectType.FullName)[]" + [PSCustomObject[]]$PSObjectArray=@($PSCustomObject) + $OldArray=$ArrayBranch[$PSObjectType.FullName+"[]Test Case"] + $NewArray=$OldArray + $PSObjectArray + $ArrayBranch[$PSObjectType.FullName+"[]Test Case"] = $NewArray + } + Else + { + Add-Member -InputObject $PSCustomObject -MemberType NoteProperty -Name $PSObjectProperty -Value $Value + } + } + Catch + { + Write-Verbose "Add-PSCustomObjectTestCase Catch" + Write-Verbose $_.Exception.Message + } +} +#Adds Array Test Case +Function Add-ArrayTestCase +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True, + Position=0)] + [Object]$Root, + [parameter(Mandatory=$True, + Position=1)] + [String]$Type, + [parameter(Mandatory=$True, + Position=2)] + [Object]$Value + ) + Try + { + Write-Verbose "Add-ArrayTestCase $Type" + $String = "`n" + $String += "[$Type]"+"$"+"Element="+"$"+"Value`n" + $String += "[$Type[]]"+"$"+"NewArray=@("+"$"+"Element)" + Write-Debug "Add-ArrayTestCase String=$String" + Invoke-Expression $String + $GetType=$NewArray.GetType() + $Level1=Add-TestCaseBranch $Root $GetType.BaseType.Name + $Level2=Add-TestCaseBranch $Level1 $GetType.FullName + $ArrayKey="[$($GetType.Name)]Test Case" + $String = "`n" + $String += "[$Type[]]"+"$"+"Array="+"$"+"Level2["+"$"+"ArrayKey]" + Write-Debug "Add-ArrayTestCase String=$String" + Invoke-Expression $String + IF ($Array.Count -GT 0) + { + $String = "`n" + $String += "[$Type[]]"+"$" + "AddArray="+"$"+"Array+"+"$"+"NewArray" + Write-Debug "Add-ArrayTestCase String=$String" + Invoke-Expression $String + $Level2[$ArrayKey]=$AddArray + } + Else + { + $Level2.Add($ArrayKey, $NewArray) + } + $TypeLeaf =Add-TestCaseLeaf $Level2 "[$($GetType.FullName)]" $GetType + $BaseType =Add-BaseTypeTestCase $Root $GetType.BaseType $Level1 + $Level2 + } + Catch + { + Write-Verbose "Add-ArrayTestCase Catch" + Write-Verbose $_.Exception.Message + } +} +#Adds Base Type Test Cases +Function Add-BaseTypeTestCase +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True, + Position=0)] + [Object]$Root, + [parameter(Mandatory=$True, + Position=1)] + [Object]$Type, + [parameter(Mandatory=$True, + Position=2)] + [Object]$Branch + ) + Try + { + Write-Verbose "Add-BaseTypeTestCase Type.FullName=$($Type.FullName)" + $BaseType=$Type.BaseType + Write-Debug "Add-BaseTypeTestCase Type.BaseType=$BaseType" + If ($BaseType -NE $Null) + { + $BaseTypeBranch = Add-BaseTypeTestCase $Root $BaseType $Branch + $BaseTypeLeaf = Add-TestCaseLeaf $BaseTypeBranch $Type.FullName $Branch + + } + Else + { + $BaseTypeBranch = Add-TestCaseBranch $Root $Type.Name + } + $BaseTypeBranch + } + Catch + { + Write-Verbose "Add-BaseTypeTestCase Catch" + Write-Verbose $_.Exception.Message + } +} +#Add TreeView nodes for Test Cases +Function Add-ValueTypeTestCase +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True, + Position=0)] + [Object]$Root, + [parameter(Mandatory=$True, + Position=1)] + [String]$Key, + [parameter(Mandatory=$True, + Position=2)] + [Object]$Value + ) + Try + { + Write-Verbose " " + Write-Verbose "Add-ValueTypeTestCase Key=$Key" + $GetType=$Value.GetType() + Write-Debug "Add-ValueTypeTestCase GetType=$GetType" + $Level1=Add-TestCaseBranch $Root $GetType.BaseType.Name + $Level2=Add-TestCaseBranch $Level1 $GetType.FullName + $Level3=Add-TestCaseBranch $Level2 "[$($GetType.Name)]Test Cases" + $ValueLeaf=Add-TestCaseLeaf $Level3 $Key $Value + $TypeLeaf =Add-TestCaseLeaf $Level2 "[$($GetType.FullName)]" $GetType + $BaseLeaf =Add-BaseTypeTestCase $Root $GetType.BaseType $Level1 + $ArrayLeaf=Add-ArrayTestCase $Root $GetType.FullName $Value + $ArrayBranch=Add-TestCaseLeaf $Level2 ($GetType.FullName+"[]") $ArrayLeaf + + $ArrayKey="[$($GetType.Name)[]]Test Case" + $Array=$ArrayLeaf[$ArrayKey] + $ArrayFullName=$Array.GetType().FullName + + $ObjectKey="Object[]Test Case" + $ObjectLevel1=Add-TestCaseBranch $Root "Array" + $ObjectLevel2=Add-TestCaseBranch $ObjectLevel1 "System.Object[]" + $ObjectArray = $ObjectLevel2[$ObjectKey] + + $TypeFound=$False + $TypeIndex=-1 + FOR ($I=0;$I -LT $ObjectArray.Count;$I++) + { + $Elements=$ObjectArray[$I] + $ElementsFullName=$Elements.GetType().FullName + IF ($ElementsFullName -EQ $ArrayFullName) + { + $TypeFound=$True + $TypeIndex = $I + break + } + } + Write-Debug "Add-ValueTypeTestCase TypeFound=$TypeFound" + IF ($TypeFound) + { + $ObjectArray[$TypeIndex] = $Array + } + Else + { + $NewObjectArray = $ObjectArray + @($Array) + $NewObjectArray[$ObjectArray.Count] = $Array + $ObjectLevel2[$ObjectKey]=$NewObjectArray + } + Add-PSCustomObjectTestCase $Root $Key $Value $GetType + } + Catch + { + Write-Verbose "Add-ValueTypeTestCase Catch" + Write-Verbose $_.Exception.Message + } +} +#Add Test Cases +Function Add-TestCases +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "Add-TestCases" + $TestCases=[ordered]@{} + $ObjectBranch = Add-TestCaseBranch $TestCases "Object" + $ValueTypeBranch = Add-TestCaseBranch $TestCases "ValueType" + $StringBranch = Add-TestCaseBranch $TestCases "String" + $EnumBranch = Add-TestCaseBranch $TestCases "Enum" + $ArrayBranch = Add-TestCaseBranch $TestCases "Array" + $PSObjectBranch = Add-TestCaseBranch $TestCases "PSCustomObject" + $ObjectArrayBranch = Add-TestCaseBranch $ArrayBranch "System.Object[]" + $ObjectArrayLeaf = Add-TestCaseLeaf $ObjectArrayBranch "Object[]Test Case" @() + $ObjectArrayTypeLeaf = Add-TestCaseLeaf $ObjectArrayBranch "[System.Object[]]" ((@()).GetType()) + $ObjectLeaf = Add-TestCaseLeaf $ObjectBranch "System.Object" $ObjectBranch + $ValueTypeLeaf = Add-TestCaseLeaf $ObjectBranch "System.ValueType" $ValueTypeBranch + $StringLeaf = Add-TestCaseLeaf $ObjectBranch "System.String" $StringBranch + $EnumLeaf = Add-TestCaseLeaf $ObjectBranch "System.Enum" $EnumBranch + $ArrayLeaf = Add-TestCaseLeaf $ObjectBranch "System.Array" $ArrayBranch + $PSObjectLeaf = Add-TestCaseLeaf $ObjectBranch "System.Management.Automation.PSCustomObject" $PSObjectBranch + + #System.Boolean + Add-ValueTypeTestCase $TestCases '[Boolean]$True' ([Boolean]$True) + Add-ValueTypeTestCase $TestCases '[Boolean]$False' ([Boolean]$False) + #System.Byte + Add-ValueTypeTestCase $TestCases '[Byte]0' ([Byte]0) + Add-ValueTypeTestCase $TestCases '[Byte]1' ([Byte]1) + Add-ValueTypeTestCase $TestCases '[Byte]::MinValue' ([Byte]::MinValue) + Add-ValueTypeTestCase $TestCases '[Byte]::MaxValue' ([Byte]::MaxValue) + #System.SByte + Add-ValueTypeTestCase $TestCases '[SByte]0' ([SByte]0) + Add-ValueTypeTestCase $TestCases '[SByte]1' ([SByte]1) + Add-ValueTypeTestCase $TestCases '[SByte]::MinValue' ([SByte]::MinValue) + Add-ValueTypeTestCase $TestCases '[SByte]::MaxValue' ([SByte]::MaxValue) + #System.UInt16 + Add-ValueTypeTestCase $TestCases '[UInt16]0' ([UInt16]0) + Add-ValueTypeTestCase $TestCases '[UInt16]1' ([UInt16]1) + Add-ValueTypeTestCase $TestCases '[UInt16]::MinValue' ([UInt16]::MinValue) + Add-ValueTypeTestCase $TestCases '[UInt16]::MaxValue' ([UInt16]::MaxValue) + #System.Int16 + Add-ValueTypeTestCase $TestCases '[Int16]0' ([Int16]0) + Add-ValueTypeTestCase $TestCases '[Int16]1' ([Int16]1) + Add-ValueTypeTestCase $TestCases '[Int16]::MinValue' ([Int16]::MinValue) + Add-ValueTypeTestCase $TestCases '[Int16]::MaxValue' ([Int16]::MaxValue) + #System.UInt32 + Add-ValueTypeTestCase $TestCases '[UInt32]0' ([UInt32]0) + Add-ValueTypeTestCase $TestCases '[UInt32]1' ([UInt32]1) + Add-ValueTypeTestCase $TestCases '[UInt32]::MinValue' ([UInt32]::MinValue) + Add-ValueTypeTestCase $TestCases '[UInt32]::MaxValue' ([UInt32]::MaxValue) + #System.Int32 + Add-ValueTypeTestCase $TestCases '[Int32]0' ([Int32]0) + Add-ValueTypeTestCase $TestCases '[Int32]1' ([Int32]1) + Add-ValueTypeTestCase $TestCases '[Int32]::MinValue' ([Int32]::MinValue) + Add-ValueTypeTestCase $TestCases '[Int32]::MaxValue' ([Int32]::MaxValue) + #System.UInt64 + Add-ValueTypeTestCase $TestCases '[UInt64]0' ([UInt64]0) + Add-ValueTypeTestCase $TestCases '[UInt64]1' ([UInt64]1) + Add-ValueTypeTestCase $TestCases '[UInt64]::MinValue' ([UInt64]::MinValue) + Add-ValueTypeTestCase $TestCases '[UInt64]::MaxValue' ([UInt64]::MaxValue) + #System.Int64 + Add-ValueTypeTestCase $TestCases '[Int64]0' ([Int64]0) + Add-ValueTypeTestCase $TestCases '[Int64]1' ([Int64]1) + Add-ValueTypeTestCase $TestCases '[Int64]::MinValue' ([Int64]::MinValue) + Add-ValueTypeTestCase $TestCases '[Int64]::MaxValue' ([Int64]::MaxValue) + #System.Int + Add-ValueTypeTestCase $TestCases '[Int]0' ([Int]0) + Add-ValueTypeTestCase $TestCases '[Int]1' ([Int]1) + Add-ValueTypeTestCase $TestCases '[Int]::MinValue' ([Int]::MinValue) + Add-ValueTypeTestCase $TestCases '[Int]::MaxValue' ([Int]::MaxValue) + #System.Long + Add-ValueTypeTestCase $TestCases '[Long]0' ([Long]0) + Add-ValueTypeTestCase $TestCases '[Long]1' ([Long]1) + Add-ValueTypeTestCase $TestCases '[Long]::MinValue' ([Long]::MinValue) + Add-ValueTypeTestCase $TestCases '[Long]::MaxValue' ([Long]::MaxValue) + #System.Single + Add-ValueTypeTestCase $TestCases '[Single]0' ([Single]0) + Add-ValueTypeTestCase $TestCases '[Single]1' ([Single]1) + Add-ValueTypeTestCase $TestCases '[Single]::MinValue' ([Single]::MinValue) + Add-ValueTypeTestCase $TestCases '[Single]::MaxValue' ([Single]::MaxValue) + Add-ValueTypeTestCase $TestCases '[Single]::Epsilon' ([Single]::Epsilon) + Add-ValueTypeTestCase $TestCases '[Single]::NegativeInfinity' ([Single]::NegativeInfinity) + Add-ValueTypeTestCase $TestCases '[Single]::PositiveInfinity' ([Single]::PositiveInfinity) + #System.Double + Add-ValueTypeTestCase $TestCases '[Double]0' ([Double]0) + Add-ValueTypeTestCase $TestCases '[Double]1' ([Double]1) + Add-ValueTypeTestCase $TestCases '[Double]::MinValue' ([Double]::MinValue) + Add-ValueTypeTestCase $TestCases '[Double]::MaxValue' ([Double]::MaxValue) + Add-ValueTypeTestCase $TestCases '[Double]::Epsilon' ([Double]::Epsilon) + Add-ValueTypeTestCase $TestCases '[Double]::NegativeInfinity' ([Double]::NegativeInfinity) + Add-ValueTypeTestCase $TestCases '[Double]::PositiveInfinity' ([Double]::PositiveInfinity) + #System.Float + Add-ValueTypeTestCase $TestCases '[Float]0' ([Float]0) + Add-ValueTypeTestCase $TestCases '[Float]1' ([Float]1) + Add-ValueTypeTestCase $TestCases '[Float]::MinValue' ([Float]::MinValue) + Add-ValueTypeTestCase $TestCases '[Float]::MaxValue' ([Float]::MaxValue) + Add-ValueTypeTestCase $TestCases '[Float]::Epsilon' ([Float]::Epsilon) + Add-ValueTypeTestCase $TestCases '[Float]::NegativeInfinity' ([Float]::NegativeInfinity) + Add-ValueTypeTestCase $TestCases '[Float]::PositiveInfinity' ([Float]::PositiveInfinity) + #System.Decimal + Add-ValueTypeTestCase $TestCases '[Decimal]0' ([Decimal]0) + Add-ValueTypeTestCase $TestCases '[Decimal]1' ([Decimal]1) + Add-ValueTypeTestCase $TestCases '[Decimal]::MinValue' ([Decimal]::MinValue) + Add-ValueTypeTestCase $TestCases '[Decimal]::MaxValue' ([Decimal]::MaxValue) + Add-ValueTypeTestCase $TestCases '[Decimal]::MinusOne' ([Decimal]::MinusOne) + Add-ValueTypeTestCase $TestCases '[Decimal]::Zero' ([Decimal]::Zero) + Add-ValueTypeTestCase $TestCases '[Decimal]::One' ([Decimal]::One) + #System.Math + Add-ValueTypeTestCase $TestCases '[Math]::PI' ([Math]::PI) + Add-ValueTypeTestCase $TestCases '[Math]::E' ([Math]::E) + #System.Numerics.BigInteger + Add-ValueTypeTestCase $TestCases '[System.Numerics.BigInteger]::Zero' ([System.Numerics.BigInteger]::Zero) + Add-ValueTypeTestCase $TestCases '[System.Numerics.BigInteger]::One' ([System.Numerics.BigInteger]::One) + Add-ValueTypeTestCase $TestCases '[System.Numerics.BigInteger]::MinusOne' ([System.Numerics.BigInteger]::MinusOne) + #System.Numerics.Complex + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::Zero' ([System.Numerics.Complex]::Zero) + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::One' ([System.Numerics.Complex]::One) + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::ImaginaryOne' ([System.Numerics.Complex]::ImaginaryOne) + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::Zero+[Math]::PI' ([System.Numerics.Complex]::Zero+[Math]::PI) + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::Zero+[Math]::E' ([System.Numerics.Complex]::Zero+[Math]::E) + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::One *[Math]::PI' ([System.Numerics.Complex]::One*[Math]::PI) + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::One *[Math]::E' ([System.Numerics.Complex]::One*[Math]::E) + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::ImaginaryOne*[Math]::PI' ([System.Numerics.Complex]::ImaginaryOne*[Math]::PI) + Add-ValueTypeTestCase $TestCases '[System.Numerics.Complex]::ImaginaryOne*[Math]::E' ([System.Numerics.Complex]::ImaginaryOne*[Math]::E) + #System.Char + Add-ValueTypeTestCase $TestCases '[Char]''A''' ([Char]'A') + Add-ValueTypeTestCase $TestCases '[Char]::MinValue' ([Char]::MinValue) + Add-ValueTypeTestCase $TestCases '[Char]::MaxValue' ([Char]::MaxValue) + #System.String + Add-ValueTypeTestCase $TestCases '[String]"A"' ([String]"A") + Add-ValueTypeTestCase $TestCases '[String]::Empty' ([String]::Empty) + #System.DateTime + Add-ValueTypeTestCase $TestCases '[DateTime]Get-Date' (Get-Date) + #System.TimeSpan + Add-ValueTypeTestCase $TestCases '[TimeSpan](Get-Date).TimeOfDay' ((Get-Date).TimeOfDay) + #System.DayOfWeek + Add-ValueTypeTestCase $TestCases '[DayOfWeek](Get-Date).DayOfWeek' ((Get-Date).DayOfWeek) + #System.Guid + Add-ValueTypeTestCase $TestCases '[Guid][System.Guid]::NewGuid()' ([System.Guid]::NewGuid()) + + $TestCases + } + Catch + { + Write-Verbose "Add-TestCases Catch" + Write-Verbose $_.Exception.Message + } +} + +#Add TreeView nodes for Test Cases +Function Add-TestCaseNodes +{ + [CmdletBinding()] + param ( [parameter(Mandatory=$True,Position=0)] + [System.Windows.Forms.TreeView]$TreeView + ) + Try + { + Write-Verbose "Add-TestCaseNodes" + + $TestCases=Add-TestCases + + $Index=0 + IF ($mnuWMIObjects.Checked) {$Index++} + IF ($mnuNetAssemblies.Checked) {$Index++} + IF ($mnuNetClasses.Checked) {$Index++} + IF ($mnuPSAliases.Checked) {$Index++} + IF ($mnuPSCommands.Checked) {$Index++} + IF ($mnuPSDrives.Checked) {$Index++} + IF ($mnuPSModules.Checked) {$Index++} + IF ($mnuPSVariables.Checked) {$Index++} + IF ($mnuWINFeature.Checked) {$Index++} + IF ($mnuWINProcess.Checked) {$Index++} + IF ($mnuWINService.Checked) {$Index++} + $Node = $TreeView.Nodes.Insert($Index,((Get-NextKey)+" " +"Test Cases"),"Test Cases") + $Node.Tag=$TestCases + $Node.EnsureVisible() + $Node + } + Catch + { + Write-Verbose "Add-TestCaseNodes Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion + +#Clears a listview columnns and items +Function Clear-ListView +{ + [CmdletBinding()] + param( + [parameter(Mandatory=$True)] + [System.Windows.Forms.ListView]$ListView + ) + Write-Verbose "Clear-ListView" + $ListView.Items.Clear() + $ListView.Columns.Clear() +} + +#Fills Listview with a class defintion +Function Fill-ListViewClass +{ + [CmdletBinding()] + param ( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [parameter(Mandatory=$True)] + [object]$Object + ) + Try + { + Write-Verbose "Fill-ListViewClass" + Clear-ListView $ListViewClass + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Member Type") + $Column.Width=$ListView.Width *.14 + $Column=$ListView.Columns.Add("Return Type") + $Column.Width=$ListView.Width *.30 + $Column=$ListView.Columns.Add("Definition") + $Column.Width=$ListView.Width *.52 + ForEach ($M in (Get-Member -InputObject $Object)) + { + [String]$MemberName = $M.Name + [String]$MemberType = $M.MemberType + [String]$MemberTypeName = $M.TypeName + [String]$MemberDefinition = $M.Definition + $Space = $MemberDefinition.IndexOf(" ") + [String]$ReturnType = $MemberDefinition.Substring(0,$Space) + [String]$Definition = $MemberDefinition.Substring($Space+1) + $Item=$ListView.Items.Add($MemberType) + $Item.SubItems.Add($ReturnType) + $Item.SubItems.Add($Definition) + } + } + Catch [System.Exception] + { + Write-Verbose "Fill-ListViewClass Catch" + Write-Verbose $_.Exception.Message + } +} + +#Creates a PSObject definition from a object +Function Get-PSObjectTextFromObject +{ + [CmdletBinding()] + [OutputType([string])] + param( + [Parameter(Mandatory=$true)] + [String]$Class, + [Parameter(Mandatory=$true)] + [Object]$Object + ) + Try + { + Write-Verbose "Get-PSObjectTextFromObject" + $Members=Get-Member -InputObject $Object + $ValidPropertyType = @{"{get;set;}"=$True;"{get;}"=$True;} + $ValidReturnType = @{"bool"=$True;"byte"=$True;"string"=$True;"string[]"=$True; + "int"=$True;"int16"=$True;"int32"=$True;"int64"=$True; + "uint"=$True;"uint16"=$True;"uint32"=$True;"uint64"=$True;"long"=$True; + "datetime"=$True;"timespan"=$True; + "system.boolean"=$True;"system.byte"=$True;"system.string"=$True;"system.string[]"=$True; + "system.int"=$True;"system.int16"=$True;"system.int32"=$True;"system.int64"=$True; + "system.uint"=$True;"system.uint16"=$True;"system.uint32"=$True;"system.uint64"=$True;"system.long"=$True; + "system.datetime"=$True;"system.timespan"=$True + } + [string]$String="" + $String=$String+"New-Object PSObject -Property ([Ordered]@{ `r`n" + + ForEach ($Member in $Members) + { + IF ($Member.MemberType -EQ "Property" -OR $Member.MemberType -EQ "NoteProperty") + { + [string]$Name=$Member.Name + IF ($Name.Substring(0,1) -NE "_") + { + IF (-NOT $Name.Contains("-")) + { + [String[]]$Definition=$Member.Definition.Split(" ") + [string]$PropertyType=$Definition[2] + IF ($ValidPropertyType[$PropertyType]) + { + $ReturnType=$Definition[0] + If ($ValidReturnType[$ReturnType]) + { + $String=$String+" $Name="+"$"+"$Class.$Name `r`n" + } + } + } + } + } + } + $String=$String+"}) `r`n" + $String + } + Catch [System.Exception] + { + Write-Verbose "Get-PSObjectTextFromObject Catch" + Write-Verbose $_.Exception.Message + } +} + +#Prepare ListView For ValueType Instance +Function Prepare-ListViewForValueType +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView + ) + Try + { + Write-Verbose "Prepare-ListViewForValueType" + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Type") + $Column.Width=$ListView.Width *.45 + $Column=$ListView.Columns.Add("Value") + $Column.Width=$ListView.Width *.54 + } + Catch [System.Exception] + { + Write-Verbose "Prepare-ListViewForValueType Catch" + Write-Verbose $_.Exception.Message + } +} + +#Prepare ListView For Object Instance +Function Prepare-ListViewForObject +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView + ) + Try + { + Write-Verbose "Prepare-ListViewForObject" + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Property") + $Column.Width=$ListView.Width *.45 + $Column=$ListView.Columns.Add("Value") + $Column.Width=$ListView.Width *.54 + } + Catch [System.Exception] + { + Write-Verbose "Prepare-ListViewForObject Catch" + Write-Verbose $_.Exception.Message + } +} + +#Prepare ListView For Array Instance +Function Prepare-ListViewForArray +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView + ) + Try + { + Write-Verbose "Prepare-ListViewForArray" + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Element") + $Column.Width=$ListView.Width *.45 + $Column=$ListView.Columns.Add("Value") + $Column.Width=$ListView.Width *.54 + } + Catch [System.Exception] + { + Write-Verbose "Prepare-ListViewForArray Catch" + Write-Verbose $_.Exception.Message + } +} + +#Prepare ListView For Collection Instance +Function Prepare-ListViewForCollection +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView + ) + Try + { + Write-Verbose "Prepare-ListViewForCollection" + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Item") + $Column.Width=$ListView.Width *.45 + $Column=$ListView.Columns.Add("Value") + $Column.Width=$ListView.Width *.54 + } + Catch [System.Exception] + { + Write-Verbose "Prepare-ListViewForCollection Catch" + Write-Verbose $_.Exception.Message + } +} + +#Prepare ListView For HashTable Instance +Function Prepare-ListViewForHashTable +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView + ) + Try + { + Write-Verbose "Prepare-ListViewForHashTable" + Clear-ListView $ListView + $ListView.View = [System.Windows.Forms.View]::Details + $Column=$ListView.Columns.Add("Key") + $Column.Width=$ListView.Width *.45 + $Column=$ListView.Columns.Add("Value") + $Column.Width=$ListView.Width *.54 + } + Catch [System.Exception] + { + Write-Verbose "Prepare-ListViewForHashTable Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process a Boolean Property +Function Process-BooleanProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.String]$PropertyName, + [Parameter(Mandatory=$true)] + [System.Boolean]$Boolean + ) + Try + { + Write-Verbose "Process-BooleanProperty PropertyName=$PropertyName Value=$Boolean" + $Item=$ListView.Items.Add($PropertyName) + IF ($Boolean) + { + $Item.SubItems.Add("True") + } + Else + { + $Item.SubItems.Add("False") + } + $Script:POEValues += "$PropertyName = $Boolean `r`n" + } + Catch [System.Exception] + { + Write-Verbose "Process-BooleanProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process a ValueType Property +Function Process-ValueTypeProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$ValueType + ) + Try + { + Write-Verbose "Process-ValueTypeProperty PropertyName=$PropertyName Value=$ValueType" + $Item=$ListView.Items.Add($PropertyName) + $Item.SubItems.Add($ValueType.ToString()) + $Script:POEValues += "$PropertyName = $ValueType `r`n" + } + Catch [System.Exception] + { + Write-Verbose "Process-ValueTypeProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process a String Property +Function Process-StringProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.String]$PropertyName, + [Parameter(Mandatory=$true)] + [System.String]$String + ) + Try + { + Write-Verbose "Process-StringProperty PropertyName=$PropertyName Value=$String" + $Item=$ListView.Items.Add($PropertyName) + $Item.SubItems.Add($String) + $Script:POEValues += "$PropertyName = $String `r`n" + } + Catch [System.Exception] + { + Write-Verbose "Process-StringProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process a ValueType Note Property +Function Process-ValueTypeNoteProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$PropertyValue + ) + Try + { + Write-Verbose "Process-ValueTypeNoteProperty PropertyName=$PropertyName PropertyValue=$PropertyValue" + $Item=$ListView.Items.Add($PropertyName) + $Item.SubItems.Add($PropertyValue) + $Script:POEValues += "$PropertyName = $PropertyValue `r`n" + } + Catch [System.Exception] + { + Write-Verbose "Process-ValueTypeNoteProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process An Enum Property +Function Process-EnumProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$Enum + ) + Try + { + Write-Verbose "Process-EnumProperty PropertyName=$PropertyName PropertyValue=$Enum" + $Item=$ListView.Items.Add($PropertyName) + $Item.SubItems.Add("[$($Enum.GetType().FullName)]::$($Enum.ToString())") + $Script:POEValues += "$PropertyName = [$($Enum.GetType().FullName)]::$($Enum.ToString()) `r`n" + } + Catch [System.Exception] + { + Write-Verbose "Process-EnumProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process An Struct Property +Function Process-StructProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$Struct + ) + Try + { + Write-Verbose "Process-StructProperty PropertyName=$PropertyName" + Write-Verbose "Process-StructProperty ObjectType=$($Struct.GetType().FullName)" + Process-ValueTypeProperty $ListView $PropertyName (Get-PropertyFriendlyName $Struct) + If ($mnuStructs.Checked) + { + Add-TreeNode $TreeView.SelectedNode $Struct $PropertyName + } + } + Catch [System.Exception] + { + Write-Verbose "Process-StructProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process an Object Property +Function Process-ObjectProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$Object + ) + Try + { + Write-Verbose "Process-ObjectProperty PropertyName=$PropertyName" + Write-Verbose "Process-ObjectProperty ObjectType=$($Object.GetType().FullName)" + Process-ValueTypeProperty $ListView $PropertyName (Get-PropertyFriendlyName $Object) + If ($mnuObjects.Checked) + { + Add-TreeNode $TreeView.SelectedNode $Object $PropertyName + } + } + Catch [System.Exception] + { + Write-Verbose "Process-ObjectProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process an Array Property +Function Process-ArrayProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$Array + ) + Try + { + $ArrayType = $Array.GetType().FullName + $ArrayCount = $Array.Count + Write-Verbose "Process-ArrayInstance $ArrayType.Count=$ArrayCount" + $StatusBarText = $StatusBar.Text + $Node =Add-TreeNode $TreeView.SelectedNode $Array $PropertyName + [Int]$I=0 + ForEach($Object in $Array) + { + $StatusBar.Text = "$StatusBarText $ArrayType ($I of $ArrayCount)" + $ChildNode =Add-TreeNode $Node $Object + $I++ + } + If ($mnuCollections.Checked) + { + Process-ValueTypeProperty $ListView $PropertyName (Get-PropertyFriendlyName $Array) + } + $StatusBar.Text = $StatusBarText + } + Catch [System.Exception] + { + Write-Verbose "Process-ArrayProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A Collection Property +Function Process-CollectionProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$Collection + ) + Try + { + $CollectionType = $Collection.GetType().FullName + $CollectionCount = $Collection.Count + Write-Verbose "Process-CollectionInstance $CollectionType.Count=$CollectionCount" + $StatusBarText = $StatusBar.Text + $Node =Add-TreeNode $TreeView.SelectedNode $Collection $PropertyName + [Int]$I=0 + ForEach($Object in $Collection) + { + $StatusBar.Text = "$StatusBarText $CollectionType ($I of $CollectionCount)" + $ChildNode =Add-TreeNode $Node $Object + $I++ + } + If ($mnuCollections.Checked) + { + Process-ValueTypeProperty $ListView $PropertyName (Get-PropertyFriendlyName $Collection) + } + $StatusBar.Text = $StatusBarText + } + Catch [System.Exception] + { + Write-Verbose "Process-CollectionProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A HashTable Property +Function Process-HashTableProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$HashTable + ) + Try + { + $HashTableType = $HashTable.GetType().FullName + $HashTableCount = $HashTable.Count + Write-Verbose "Process-HashTableProperty $HashTableType.Count=$HashTableCount" + $StatusBarText = $StatusBar.Text + $Node=Add-TreeNode $TreeView.SelectedNode $HashTable $PropertyName + [Int]$I=0 + $Keys=$HashTable.Keys + ForEach($Key In $Keys) + { + $StatusBar.Text = "$StatusBarText $HashTableType ($($I+1) of $HashTableCount)" + IF ($HashTable[$Key] -NE $Null) + { + $ChildNode=Add-TreeNode $Node $HashTable[$Key] $Key + } + Else + { + $ChildNode=Add-TreeNode $Node "Null" $Key + } + $I++ + } + If ($mnuCollections.Checked) + { + Process-ValueTypeProperty $ListView $PropertyName (Get-PropertyFriendlyName $HashTable) + } + $StatusBar.Text = $StatusBarText + } + Catch [System.Exception] + { + Write-Verbose "Process-HashTableProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A Dictionary Property +Function Process-DictionaryProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [String]$PropertyName, + [Parameter(Mandatory=$true)] + [Object]$Dictionary + ) + Try + { + $DictionaryType = $Dictionary.GetType().FullName + $DictionaryCount = $Dictionary.Count + Write-Verbose "Process-DictionaryInstance $DictionaryType.Count=$DictionaryCount" + $StatusBarText = $StatusBar.Text + $Node=Add-TreeNode $TreeView.SelectedNode $Dictionary $PropertyName + [Int]$I=0 + ForEach($Key In $Keys) + { + $StatusBar.Text = "$StatusBarText $DictionaryType ($($I+1) of $DictionaryCount)" + IF ($Dictionary[$Key] -NE $Null) + { + $ChildNode=Add-TreeNode $Node $Dictionary[$Key] $Key + } + Else + { + $ChildNode=Add-TreeNode $Node "Null" $Key + } + $I++ + } + If ($mnuCollections.Checked) + { + Process-ValueTypeProperty $ListView $PropertyName (Get-PropertyFriendlyName $Dictionary) + } + $StatusBar.Text = $StatusBarText + } + Catch [System.Exception] + { + Write-Verbose "Process-DictionaryProperty Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A Boolean Instance +Function Process-BooleanInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [System.Boolean]$Boolean + ) + Try + { + Write-Verbose "Process-BooleanInstance $Boolean" + Prepare-ListViewForValueType $ListView + Process-BooleanProperty $ListView "Boolean" $Boolean + $StatusBar.Text="System.Boolean" + } + Catch [System.Exception] + { + Write-Verbose "Process-ArrayBoolean Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A ValueType Instance +Function Process-ValueTypeInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [Object]$ValueType + ) + Try + { + Write-Verbose "Process-ValueTypeInstance $($ValueType.GetType().Name)=$ValueType" + Prepare-ListViewForValueType $ListView + Process-ValueTypeProperty $ListView $ValueType.GetType().Name $ValueType + $StatusBar.Text="$($ValueType.GetType().FullName)" + } + Catch [System.Exception] + { + Write-Verbose "Process-ValueTypeInstance Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A String Instance +Function Process-StringInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [System.String]$String + ) + Try + { + Write-Verbose "Process-StringInstance $($String.GetType().Name)=$String" + Prepare-ListViewForValueType $ListView + Process-ValueTypeProperty $ListView "String" $String + Process-ValueTypeProperty $ListView "Length" $String.Length + $StatusBar.Text="$($String.GetType().FullName)" + } + Catch [System.Exception] + { + Write-Verbose "Process-StringInstance Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A Enum Instance +Function Process-EnumInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [Object]$Enum + ) + Try + { + Write-Verbose "Process-EnumInstance [$($Enum.GetType().FullName)]::$Enum" + Prepare-ListViewForValueType $ListView + Process-EnumProperty $ListView $Enum.GetType().Name $Enum + $StatusBar.Text="$($Enum.GetType().FullName)" + } + Catch [System.Exception] + { + Write-Verbose "Process-EnumInstance Catch" + Write-Verbose $_.Exception.Message + } +} + +#Gets object's property +Function Get-ObjectInstanceProperty +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [Object]$Object, + [Parameter(Mandatory=$true)] + [System.String]$Property, + [Parameter(Mandatory=$true)] + [System.String]$PropertyType + ) + Try + { + Write-Verbose "Get-ObjectInstanceProperty Object=$($Object.GetType().FullName) Property=$Property" + $ObjectProperty=$Null + $String="[$PropertyType]"+"$"+"ObjectProperty="+"$"+"Object.$Property" + Write-Verbose "Get-ObjectInstanceProperty String=$String" + Invoke-Expression $String + Write-Verbose "Get-ObjectInstanceProperty ObjectProperty=$($ObjectProperty.GetType().FullName)" + $ObjectProperty + } + Catch [System.Exception] + { + Write-Verbose "Get-ObjectInstanceProperty Catch" + Write-Error $_.Exception.Message + $Null + } +} + +#Process An Object Instance +Function Process-ObjectInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [Object]$Object + ) + Try + { + $ObjectType = $Object.GetType().FullName + Write-Verbose "Process-ObjectInstance ObjectType=$ObjectType" + $Node=$TreeView.SelectedNode + $Node.Nodes.Clear() + Prepare-ListViewForObject $ListView + $Members=Get-Member -InputObject $Object + $MemberCount = $Members.Count + $MemberIndex = 0 + [string]$String="" + ForEach ($Member in $Members) + { + Write-Verbose " " + [String]$MemberTypeName=$Member.TypeName + Write-Verbose "Process-ObjectInstance MemberTypeName=$MemberTypeName" + [String]$MemberName=$Member.Name + Write-Verbose "Process-ObjectInstance MemberName=$MemberName" + [String]$MemberType=$Member.MemberType + $MemberIndex++ + $StatusBar.Text = "Processing $MemberTypeName $MemberType[$MemberIndex of $MemberCount] $MemberName" + If ($Script:IsValidMemberType[$MemberType]) + { + Write-Verbose "Process-ObjectInstance MemberType=$MemberType" + If (Get-IsValidMemberName $MemberName $MemberTypeName) + { + [String[]]$Definition=$Member.Definition.Split(" ") + [String]$PropertyType=$Definition[2] + Write-Verbose "Process-ObjectInstance PropertyType=$PropertyType" + [String]$MemberReturnType=$Definition[0] + Write-Verbose "Process-ObjectInstance MemberReturnType=$MemberReturnType" + If ($MemberType -EQ "Property") + { + If ($Script:IsValidPropertyType[$PropertyType]) + { + $ObjectProperty=$Null + $String="[$MemberReturnType]"+"$"+"ObjectProperty="+"$"+"Object.$MemberName" + Write-Verbose "Process-ObjectInstance InvokeProperty=$String" + + Trap { Write-Verbose "Process-ObjectInstance Trapped Error" + Continue + } + Invoke-Expression $String + If ($ObjectProperty -NE $Null) + { + Write-Verbose "Process-ObjectInstance ObjectProperty.Type=$($ObjectProperty.GetType().FullName)" +# If ($mnuCaptureTypes.Checked) +# { +# Add-PSTypeNames $ObjectProperty +# } + $ObjectPropertyType = Get-PropertyReturnType $ObjectProperty + Write-Verbose "Process-ObjectInstance ObjectPropertyType=$ObjectPropertyType" + Switch($ObjectPropertyType) + { + "Boolean" + { + Write-Verbose "Process-ObjectInstance Boolean" + Process-BooleanProperty $ListView $MemberName $ObjectProperty + Continue + } + "ValueType" + { + Write-Verbose "Process-ObjectInstance ValueType" + Process-ValueTypeProperty $ListView $MemberName $ObjectProperty + Continue + } + "String" + { + Write-Verbose "Process-ObjectInstance String" + If ([string]::IsNullOrEmpty($ObjectProperty)) + { + If ($ObjectProperty -EQ $Null) + { + Process-StringProperty $ListView $MemberName "NULL" + } + Else + { + Process-StringProperty $ListView $MemberName "[System.String]::EmptyString" + } + } + Else + { + Process-StringProperty $ListView $MemberName $ObjectProperty + } + Continue + } + "Enum" + { + Write-Verbose "Process-ObjectInstance Enum" + Process-EnumProperty $ListView $MemberName $ObjectProperty + Continue + } + "Struct" + { + Write-Verbose "Process-ObjectInstance Struct" + Process-StructProperty $TreeView $ListView $MemberName $ObjectProperty + Continue + } + "Object" + { + Write-Verbose "Process-ObjectProperty Object" + Process-ObjectProperty $TreeView $ListView $MemberName $ObjectProperty + Continue + } + "Array" + { + Write-Verbose "Process-ObjectProperty Array" + Process-ArrayProperty $TreeView $ListView $StatusBar $MemberName $ObjectProperty + Continue + } + "Collection" + { + Write-Verbose "Process-ObjectInstance Collection" + Process-CollectionProperty $TreeView $ListView $StatusBar $MemberName $ObjectProperty + Continue + } + "HashTable" + { + Write-Verbose "Process-ObjectInstance HashTable" + Process-HashTableProperty $TreeView $ListView $StatusBar $MemberName $ObjectProperty + Continue + } + "Dictionary" + { + Write-Verbose "Process-ObjectInstance Dictionary" + Process-DictionaryProperty $TreeView $ListView $StatusBar $MemberName $ObjectProperty + Continue + } + Default + { + Write-Verbose "Process-ObjectInstance Unknown" + Process-ObjectProperty $TreeView $ListView $MemberName $ObjectProperty + Continue + } + } + } + Else + { + Write-Verbose "Process-ObjectInstance PropertyName=$MemberName Is Null" + If ($mnuNulls.Checked) + { + Process-ValueTypeProperty $ListView $MemberName "Null" + } + } + } + Else + { + Write-Verbose "Process-ObjectInstance MemberName=$MemberName PropertyType not valid" + } + } + Else + { + Write-Verbose "Process-ObjectInstance MemberName=$MemberName Not a Property" + [String]$PropertyName=$Definition[1] + [String[]]$PropertyNameParts=$PropertyName.Split("=") + [String]$PropertyKey=$PropertyNameParts[0] + [String]$PropertyValue=$PropertyNameParts[1] + Write-Verbose "Process-ObjectInstance PropertyKey=$PropertyKey PropertyValue=$PropertyValue" + If($Script:IsPropertyValueType[$MemberReturnType]) + { + Process-ValueTypeNoteProperty $ListView $PropertyKey $PropertyValue + } + Else + { + Write-Verbose "Process-ObjectInstance MemberTypeName=$MemberTypeName is not PropertyValueType" + } + } + } + Else + { + Write-Verbose "Process-ObjectInstance MemberName=$MemberName not valid" + } + } + Else + { + Write-Verbose "Process-ObjectInstance MemberType=$MemberType not valid" + } + } + $StatusBar.Text = "$ObjectType" + + } + Catch [System.Exception] + { + Write-Verbose "Process-ObjectInstance Catch" + Write-Error $_.Exception.Message + } +} + +#Process An Array Instance +Function Process-ArrayInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [Object]$Array + ) + Try + { + $ArrayType = $Array.GetType().FullName + $ArrayCount = $Array.Count + Write-Verbose "Process-ArrayInstance $ArrayType.Count=$ArrayCount" + $Node = $TreeView.SelectedNode + $Node.Nodes.Clear() + Prepare-ListViewForArray $ListView + [Int]$I=0 + ForEach($Object in $Array) + { + $StatusBar.Text = "$ArrayType ($($I+1) of $ArrayCount)" + $ChildNode =Add-TreeNode $Node $Object + Process-ValueTypeProperty $ListView "$($Node.Text)[$I]" (Get-PropertyFriendlyName $Object) + $I++ + } + $StatusBar.Text = "$ArrayType.Count=$ArrayCount" + } + Catch [System.Exception] + { + Write-Verbose "Process-ArrayInstance Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A Collection Instance +Function Process-CollectionInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [Object]$Collection + ) + Try + { + $CollectionType = $Collection.GetType().FullName + $CollectionCount = $Collection.Count + Write-Verbose "Process-CollectionInstance $CollectionType.Count=$CollectionCount" + $Node = $TreeView.SelectedNode + $Node.Nodes.Clear() + Prepare-ListViewForCollection $ListView + [Int]$I=0 + ForEach($Object In $Collection) + { + $StatusBar.Text = "$CollectionType ($($I+1) of $CollectionCount)" + $ChildNode =Add-TreeNode $Node $Object + Process-ValueTypeProperty $ListView "$($Node.Text)[$I]" (Get-PropertyFriendlyName $Object) + $I++ + } + $StatusBar.Text = "$CollectionType.Count=$CollectionCount" + } + Catch [System.Exception] + { + Write-Verbose "Process-CollectionInstance Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A HashTable Instance +Function Process-HashTableInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [Object]$HashTable + ) + Try + { + $HashTableType=$HashTable.GetType().FullName + $HashTableCount=$HashTable.Count + Write-Verbose "Process-HashTableInstance $HashTableType.Count=$HashTableCount" + $Node = $TreeView.SelectedNode + $Node.Nodes.Clear() + Prepare-ListViewForHashTable $ListView + $Keys=$HashTable.Keys + [Int]$I=0 + ForEach($Key In $Keys) + { + $StatusBar.Text = "$HashTableType ($($I+1) of $HashTableCount)" + IF ($HashTable[$Key] -NE $Null) + { + IF ($HashTable[$Key].Value -NE $NULL) + { + $ChildNode=Add-TreeNode $Node $HashTable[$Key].Value $Key + Process-ValueTypeProperty $ListView $Key (Get-PropertyFriendlyName $HashTable[$Key].Value) + } + Else + { + $ChildNode=Add-TreeNode $Node $HashTable[$Key] $Key + Process-ValueTypeProperty $ListView $Key (Get-PropertyFriendlyName $HashTable[$Key]) + } + } + Else + { + $ChildNode=Add-TreeNode $Node $HashTable[$Key] $Key + Process-ValueTypeProperty $ListView $Key "" + } + $I++ + } + $StatusBar.Text = "$HashTableType.Count=$HashTableCount" + } + Catch [System.Exception] + { + Write-Verbose "Process-HashTableInstance Catch" + Write-Verbose $_.Exception.Message + } +} + +#Process A Dictionary Instance +Function Process-DictionaryInstance +{ + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [System.Windows.Forms.TreeView]$TreeView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.ListView]$ListView, + [Parameter(Mandatory=$true)] + [System.Windows.Forms.StatusBar]$StatusBar, + [Parameter(Mandatory=$true)] + [Object]$Dictionary + ) + Try + { + $DictionaryType=$Dictionary.GetType().FullName + $DictionaryCount=$Dictionary.Count + Write-Verbose "Process-DictionaryInstance $DictionaryType.Count=$DictionaryCount" + $Node = $TreeView.SelectedNode + $Node.Nodes.Clear() + Prepare-ListViewForDictionary $ListView + $Keys=$Dictionary.Keys + [Int]$I=0 + ForEach($Key In $Keys) + { + $StatusBar.Text = "$DictionaryType ($($I+1) of $DictionaryCount)" + IF ($Dictionary[$Key] -NE $Null) + { + IF ($Dictionary[$Key].Value -NE $NULL) + { + $ChildNode=Add-TreeNode $Node $Dictionary[$Key].Value $Key + Process-ValueTypeProperty $ListView $Key (Get-PropertyFriendlyName $Dictionary[$Key].Value) + } + Else + { + $ChildNode=Add-TreeNode $Node $Dictionary[$Key] $Key + Process-ValueTypeProperty $ListView $Key (Get-PropertyFriendlyName $Dictionary[$Key]) + } + } + Else + { + $ChildNode=Add-TreeNode $Node $Dictionary[$Key] $Key + Process-ValueTypeProperty $ListView $Key "" + } + $I++ + } + $StatusBar.Text = "$DictionaryType.Count=$DictionaryCount" + } + Catch [System.Exception] + { + Write-Verbose "Process-DictionaryInstance Catch" + Write-Verbose $_.Exception.Message + } +} + +#region Form +#region Form and Control Events + +#Event Handler for the Powershell prompt execute button +Function ButtonExecute_Click +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [System.Object] $sender + ) + Try + { + Write-Verbose "ButtonExecute_Click" + $TextBoxOutput.Text + $Output = $ExecutionContext.InvokeCommand.InvokeScript($TextBoxPowerShell.Text) + IF ($Output -NE "") + { + ForEach ($Line In $OutPut) + { + $TextBoxOutput.Text += "$Line `r`n" + } + } + } + Catch [System.Exception] + { + Write-Verbose "ButtonExecute_Click Catch" + Write-Error $_.Exception.Message + } +} + +#Event Handler for the SplitContainer event SplitterMoved +Function SplitContainer_SplitterMoved +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True, + Position=0)] + [System.Object] $sender, + [parameter(Mandatory=$True, + Position=1)] + [System.Windows.Forms.SplitterEventArgs] $e + ) + Write-Verbose "SplitContainer_SplitterMoved" + Form_Resize +} + +#Event Handler for the TreeView event AfterSelect +Function TreeView_AfterSelect +{ + [CmdletBinding()] + param ( + [parameter(Mandatory=$True)] + [Object]$Sender, + [parameter(Mandatory=$True)] + [Object]$EventArg + ) + Try + { + Write-Verbose "" + Write-Verbose "TreeView_AfterSelect Sender.Name=$($Sender.Name) EventArg.Node=$($EventArg.Node.Text)" + $Sender.SelectedNode = $EventArg.Node + $TreeView=$Sender + $ListView=$Sender.Tag + $StatusBar=$ListView.Tag + $Node=$Sender.SelectedNode + $Object = $Node.Tag + $Script:POEValues = "" + $TextBoxValues.Text = $Script:POEValues + If (Get-IsWMIObject $Object) + { + Write-Verbose "TreeView_AfterSelect WMIObject" + Process-WMIObjectInstance $TreeView $ListView $StatusBar $Node + $ObjectType="WMIObject" + } + Else + { + $ObjectType = Get-InstanceType $Object + Write-Verbose "TreeView_AfterSelect ObjectType=$ObjectType" + Switch($ObjectType) + { + "Boolean" + { + Write-Verbose "TreeView_AfterSelect Boolean" + Process-BooleanInstance $TreeView $ListView $StatusBar $Object + Continue + } + "ValueType" + { + Write-Verbose "TreeView_AfterSelect ValueType" + Process-ValueTypeInstance $TreeView $ListView $StatusBar $Object + Continue + } + "String" + { + Write-Verbose "TreeView_AfterSelect String" + If([System.String]::IsNullOrEmpty($Object)) + { + If($Object -EQ $Null) + { + Process-StringInstance $TreeView $ListView $StatusBar "Null" + } + Else + { + Process-StringInstance $TreeView $ListView $StatusBar "[System.String]::EmptyString" + } + } + Else + { + Process-StringInstance $TreeView $ListView $StatusBar $Object + } + Continue + } + "Enum" + { + Write-Verbose "TreeView_AfterSelect Enum" + Process-EnumInstance $TreeView $ListView $StatusBar $Object + Continue + } + "Object" + { + Write-Verbose "TreeView_AfterSelect Object" + Process-ObjectInstance $TreeView $ListView $StatusBar $Object + Continue + } + "Array" + { + Write-Verbose "TreeView_AfterSelect Array" + Process-ArrayInstance $TreeView $ListView $StatusBar $Object + Continue + } + "Collection" + { + Write-Verbose "TreeView_AfterSelect Collection" + Process-CollectionInstance $TreeView $ListView $StatusBar $Object + Continue + } + "HashTable" + { + Write-Verbose "TreeView_AfterSelect HashTable" + Process-HashTableInstance $TreeView $ListView $StatusBar $Object + Continue + } + "Dictionary" + { + Write-Verbose "TreeView_AfterSelect Dictionary" + Process-DictionaryInstance $TreeView $ListView $StatusBar $Object + Continue + } + Default + { + Write-Verbose "TreeView_AfterSelect Unknown" + Process-ObjectInstance $TreeView $ListView $StatusBar $Object + Continue + } + } + If ($Sender.Name -EQ "TreeViewInstance") + { + Write-Verbose "TreeView_AfterSelect Fill-ListViewClass" + Fill-ListViewClass $ListViewClass $Object + If ($ObjectType -EQ "WMIObject") + { + Write-Verbose "TreeView_AfterSelect Get-PSObjectTextFromObject WMIObject" + $TextBoxPSObject.Text = Get-PSObjectTextFromObject $Node.Parent.Tag.Class $Object + $StatusBar.Text = $Node.Parent.Tag.Class+" - "+$Node.Parent.Tag.Description + } + ElseIf($ObjectType -EQ "PSObject") + { + Write-Verbose "TreeView_AfterSelect Get-PSObjectTextFromObject PSObject" + $TextBoxPSObject.Text = Get-PSObjectTextFromObject $Object.GetType().Name $Object + } + Else + { + Write-Verbose "TreeView_AfterSelect Get-PSObjectTextFromObject Object" + $TextBoxPSObject.Text = Get-PSObjectTextFromObject $Object.GetType().Name $Object + #$StatusBar.Text = $Object.GetType().FullName + } + $TextBoxValues.Text = $Script:POEValues + Write-Verbose "TreeView_AfterSelect GetTypeNames" + If ($Object -IS [System.Type]) + { + [String[]]$PSTypeNames = @("System.Type","System.Object") + } + ElseIf ($Object -IS [System.Reflection.Assembly]) + + { + [String[]]$PSTypeNames = @("System.Reflection.Assembly","System.Object") + } + ElseIf ($Object -IS [System.Management.Automation.PSCustomObject]) + + { + [String[]]$PSTypeNames = @("System.Management.Automation.PSCustomObject","System.Object") + } + Else + { + [String[]]$PSTypeNames = $Object.PSTypeNames + } + $TreeViewInterface.Nodes.Clear() + Clear-ListView $ListViewInterface + For ($I=0;$I -LT $PSTypeNames.Count;$I++) + { + Write-Verbose "TreeView_AfterSelect PSTypeName=$($PSTypeNames[$I])" + IF ($PSTypeNames[$I].Contains("#")) + { + } + Else + { + $PSTypeName = $PSTypeNames[$I] + Trap {Continue} + $Type = $PSTypeName -As [System.Type] + If ($Type -NE $Null) + { + Add-TreeNode $TreeViewInterface $Type "[$($Type.FullName)]" + } + Else + { + IF ($I -EQ 0) + { + $Type=$Object.GetType() + Add-TreeNode $TreeViewInterface $Type "[$($Type.FullName)]" + } + } + } + } +# If ($mnuCaptureTypes.Checked) +# { +# Add-PSTypeNames $Object +# } + } + Else + { + #$StatusBar.Text = $Object.GetType().FullName + } + } + } + Catch [System.Exception] + { + Write-Verbose "TreeView_AfterSelect Catch" + Write-Error $_.Exception.Message + } +} + +#Event Handler for the form event Load +Function Form_Load +{ + [CmdletBinding()] + param ( + ) + Write-Verbose "Form_Load" + Get-PSObjectExplorerProfile +} + +#Event Handler for the form event Resize +Function Form_Resize +{ + [CmdletBinding()] + param ( + ) + Write-Verbose "Form_Resize" +} + +#endregion +#region Menu events + +#Event Handler for the Exit Menu event Click +Function mnuExit_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuExit_Click" + $Form.Close() + } + Catch [System.Exception] + { + Write-Verbose "mnuExit_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View WMI Objects event Click +Function mnuWMIObjects_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuWMIObjects_Click" + $mnuWMIObjects.Checked = ! $mnuWMIObjects.Checked + IF ($mnuWMIObjects.Checked) + { + Add-WMITreeNodes $TreeViewInstance + } + Else + { + IF ($Script:WMIRootNode) + { + Remove-TreeNode $Script:WMIRootNode + $Script:WMIClasses=$Null + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuWMIObjects_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View Net Assemblies event Click +Function mnuNetAssemblies_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuNetAssemblies_Click" + $mnuNetAssemblies.Checked = ! $mnuNetAssemblies.Checked + IF ($mnuNetAssemblies.Checked) + { + $NetAssembliesNode = Add-NetAssembliesNode $TreeViewInstance + $Script:POETreeNodes.Add("NetAssemblies",$NetAssembliesNode) + } + Else + { + $NetAssembliesNode = $Script:POETreeNodes["NetAssemblies"] + IF ($NetAssembliesNode -NE $Null) + { + Remove-TreeNode $NetAssembliesNode + $Script:POETreeNodes.Remove("NetAssemblies") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuWMIObjects_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View Net Classes event Click +Function mnuNetClasses_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuNetClasses_Click" + $mnuNetClasses.Checked = ! $mnuNetClasses.Checked + IF ($mnuNetClasses.Checked) + { + $NetClassesNode = Add-NetClassesNode $TreeViewInstance + $Script:POETreeNodes.Add("NetClasses",$NetClassesNode) + $TimerNetClasses.Enabled = $True + } + Else + { + $NetClassesNode = $Script:POETreeNodes["NetClasses"] + IF ($NetClassesNode -NE $Null) + { + Remove-TreeNode $NetClassesNode + $Script:POETreeNodes.Remove("NetClasses") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuNetClasses_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View PS Aliases event Click +Function mnuPSAliases_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuPSAliases_Click" + $mnuPSAliases.Checked = ! $mnuPSAliases.Checked + IF ($mnuPSAliases.Checked) + { + $PSAliasesNode = Add-PSAliasesNode $TreeViewInstance + $Script:POETreeNodes.Add("PSAliases",$PSAliasesNode) + } + Else + { + $PSAliasesNode = $Script:POETreeNodes["PSAliases"] + IF ($PSAliasesNode -NE $Null) + { + Remove-TreeNode $PSAliasesNode + $Script:POETreeNodes.Remove("PSAliases") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuPSAliases_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View PS Commands event Click +Function mnuPSCommands_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuPSCommands_Click" + $mnuPSCommands.Checked = ! $mnuPSCommands.Checked + IF ($mnuPSCommands.Checked) + { + $PSCommandsNode = Add-PSCommandsNode $TreeViewInstance + $Script:POETreeNodes.Add("PSCommands",$PSCommandsNode) + } + Else + { + $PSCommandsNode = $Script:POETreeNodes["PSCommands"] + IF ($PSCommandsNode -NE $Null) + { + Remove-TreeNode $PSCommandsNode + $Script:POETreeNodes.Remove("PSCommands") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuPSCommands_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View PS Drives event Click +Function mnuPSDrives_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuPSDrives_Click" + $mnuPSDrives.Checked = ! $mnuPSDrives.Checked + IF ($mnuPSDrives.Checked) + { + $PSDrivesNode = Add-PSDrivesNode $TreeViewInstance + $Script:POETreeNodes.Add("PSDrives",$PSDrivesNode) + } + Else + { + $PSDrivesNode = $Script:POETreeNodes["PSDrives"] + IF ($PSDrivesNode -NE $Null) + { + Remove-TreeNode $PSDrivesNode + $Script:POETreeNodes.Remove("PSDrives") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuPSDrives_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View PS Modules event Click +Function mnuPSModules_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuPSModules_Click" + $mnuPSModules.Checked = ! $mnuPSModules.Checked + IF ($mnuPSModules.Checked) + { + $PSModulesNode = Add-PSModulesNode $TreeViewInstance + $Script:POETreeNodes.Add("PSModules",$PSModulesNode) + } + Else + { + $PSModulesNode = $Script:POETreeNodes["PSModules"] + IF ($PSModulesNode -NE $Null) + { + Remove-TreeNode $PSModulesNode + $Script:POETreeNodes.Remove("PSModules") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuPSModules_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View PS Variables event Click +Function mnuPSVariables_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuPSVariables_Click" + $mnuPSVariables.Checked = ! $mnuPSVariables.Checked + IF ($mnuPSVariables.Checked) + { + $PSVariablesNode = Add-PSVariablesNode $TreeViewInstance + $Script:POETreeNodes.Add("PSVariables",$PSVariablesNode) + } + Else + { + $PSVariablesNode = $Script:POETreeNodes["PSVariables"] + IF ($PSVariablesNode -NE $Null) + { + Remove-TreeNode $PSVariablesNode + $Script:POETreeNodes.Remove("PSVariables") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuPSVariables_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View WIN Features event Click +Function mnuWINFeature_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuWINFeature_Click" + $mnuWINFeature.Checked = ! $mnuWINFeature.Checked + IF ($mnuWINFeature.Checked) + { + $WINFeatureNode = Add-WINFeaturesNode $TreeViewInstance + $Script:POETreeNodes.Add("WINFeatures",$WINFeatureNode) + } + Else + { + $WINFeatureNode = $Script:POETreeNodes["WINFeatures"] + IF ($WINFeatureNode -NE $Null) + { + Remove-TreeNode $WINFeatureNode + $Script:POETreeNodes.Remove("WINFeatures") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuWINFeature_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View WIN Processes event Click +Function mnuWINProcess_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuWINProcess_Click" + $mnuWINProcess.Checked = ! $mnuWINProcess.Checked + IF ($mnuWINProcess.Checked) + { + $WINProcessNode = Add-WINProcessesNode $TreeViewInstance + $Script:POETreeNodes.Add("WINProcesses",$WINProcessNode) + } + Else + { + $WINProcessNode = $Script:POETreeNodes["WINProcesses"] + IF ($WINProcessNode -NE $Null) + { + Remove-TreeNode $WINProcessNode + $Script:POETreeNodes.Remove("WINProcesses") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuWINProcess_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View WIN Services event Click +Function mnuWINService_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuWINService_Click" + $mnuWINService.Checked = ! $mnuWINService.Checked + IF ($mnuWINService.Checked) + { + $WINServiceNode = Add-WINServicesNode $TreeViewInstance + $Script:POETreeNodes.Add("WINServices",$WINServiceNode) + } + Else + { + $WINServiceNode = $Script:POETreeNodes["WINServices"] + IF ($WINServiceNode -NE $Null) + { + Remove-TreeNode $WINServiceNode + $Script:POETreeNodes.Remove("WINServices") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuWINService_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the View Test Cases event Click +Function mnuTestCases_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuTestCases_Click" + $mnuTestCases.Checked = ! $mnuTestCases.Checked + IF ($mnuTestCases.Checked) + { + $TestCasesNode = Add-TestCaseNodes $TreeViewInstance + $Script:POETreeNodes.Add("POETestCases",$TestCasesNode) + } + Else + { + $TestCasesNode = $Script:POETreeNodes["POEtestCases"] + IF ($TestCasesNode -NE $Null) + { + Remove-TreeNode $TestCasesNode + $Script:POETreeNodes.Remove("POETestCases") + } + } + } + Catch [System.Exception] + { + Write-Verbose "mnuTestCases_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the Options Show Objects event Click +Function mnuObjects_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuObjects_Click" + $mnuObjects.Checked = ! $mnuObjects.Checked + } + Catch [System.Exception] + { + Write-Verbose "mnuObjects_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the Options Show Structs event Click +Function mnuStructs_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuStructs_Click" + $mnuStructs.Checked = ! $mnuStructs.Checked + } + Catch [System.Exception] + { + Write-Verbose "mnuStructs_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the Options Show Collections event Click +Function mnuCollections_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuCollections_Click" + $mnuCollections.Checked = ! $mnuCollections.Checked + } + Catch [System.Exception] + { + Write-Verbose "mnuCollections_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the Options Show Nulls event Click +Function mnuNulls_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuNulls_Click" + $mnuNulls.Checked = ! $mnuNulls.Checked + } + Catch [System.Exception] + { + Write-Verbose "mnuNulls_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the Options Show Empty Strings event Click +Function mnuEmptyStrings_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuEmptyStrings_Click" + $mnuEmptyStrings.Checked = ! $mnuEmptyStrings.Checked + } + Catch [System.Exception] + { + Write-Verbose "mnuEmptyStrings_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#Event Handler for the Help About event Click +Function mnuAbout_Click +{ + [CmdletBinding()] + param () + Try + { + Write-Verbose "mnuExit_Click" + [System.Windows.Forms.MessageBox]::Show("PowerShell Object Explorer`n`nBy Brian Nadjiwon","PowerShell Object Explorer") + } + Catch [System.Exception] + { + Write-Verbose "mnuExit_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +Function TimerNetClasses_Tick +{ + [CmdletBinding()] + param () + Try + { + Write-Debug "TimerNetClasses_Tick" + $TimerNetClasses.Enabled=$False + $NetClassIndex = $Script:POETreeNodes["NetClassIndex"] + $NetAssembliesToProcess = $Script:POETreeNodes["NetAssembliesToProcess"] + Add-SomeNetClasses $NetClassIndex + $NetClassIndex++ + $Script:POETreeNodes["NetClassIndex"]=$NetClassIndex + $mnuStatus.Text="Loading Class $NetClassIndex" + IF ($NetAssembliesToProcess.Count -GT 0) + { + $TimerNetClasses.Enabled = $True + } + Else + { + $mnuStatus.Text="" + $Script:POETreeNodes.Remove("NetClassesList") + $Script:POETreeNodes.Remove("NetClassIndex") + $Script:POETreeNodes.Remove("NetClassesProcessed") + $Script:POETreeNodes.Remove("NetAssemblyClasses") + $Script:POETreeNodes.Remove("NetAssemblyMaxClasses") + $Script:POETreeNodes.Remove("NetAssembliesToProcess") + } + } + Catch [System.Exception] + { + Write-Verbose "mnuExit_Click Catch" + Write-Verbose $_.Exception.Message + } +} + +#endregion + +#Generates the form for PSObjectExplorer +Function Generate-PSObjectExplorerForm +{ + [CmdletBinding()] + param () + +Write-Verbose "Generate-Form" +$Form = New-Object System.Windows.Forms.Form +$MainMenu = New-Object System.Windows.Forms.MainMenu +$mnuFile = New-Object System.Windows.Forms.MenuItem +$mnuExit = New-Object System.Windows.Forms.MenuItem +$mnuView = New-Object System.Windows.Forms.MenuItem +$mnuWMIObjects = New-Object System.Windows.Forms.MenuItem +$mnuSeparatorV1 = New-Object System.Windows.Forms.MenuItem +$mnuNetAssemblies = New-Object System.Windows.Forms.MenuItem +$mnuNetClasses = New-Object System.Windows.Forms.MenuItem +$mnuSeparatorV2= New-Object System.Windows.Forms.MenuItem +$mnuPSAliases = New-Object System.Windows.Forms.MenuItem +$mnuPSCommands = New-Object System.Windows.Forms.MenuItem +$mnuPSDrives = New-Object System.Windows.Forms.MenuItem +$mnuPSModules = New-Object System.Windows.Forms.MenuItem +$mnuPSVariables = New-Object System.Windows.Forms.MenuItem +$mnuSeparatorV3= New-Object System.Windows.Forms.MenuItem +$mnuWINFeature = New-Object System.Windows.Forms.MenuItem +$mnuSeparatorV4= New-Object System.Windows.Forms.MenuItem +$mnuWINProcess = New-Object System.Windows.Forms.MenuItem +$mnuWINService = New-Object System.Windows.Forms.MenuItem +$mnuSeparatorV5= New-Object System.Windows.Forms.MenuItem +$mnuTestCases = New-Object System.Windows.Forms.MenuItem +$mnuOptions = New-Object System.Windows.Forms.MenuItem +$mnuObjects = New-Object System.Windows.Forms.MenuItem +$mnuStructs = New-Object System.Windows.Forms.MenuItem +$mnuSeparator4= New-Object System.Windows.Forms.MenuItem +$mnuCollections = New-Object System.Windows.Forms.MenuItem +$mnuSeparator5= New-Object System.Windows.Forms.MenuItem +$mnuNulls = New-Object System.Windows.Forms.MenuItem +$mnuEmptyStrings = New-Object System.Windows.Forms.MenuItem +$mnuSeparator6= New-Object System.Windows.Forms.MenuItem +$mnuHelp = New-Object System.Windows.Forms.MenuItem +$mnuAbout = New-Object System.Windows.Forms.MenuItem +$mnuStatus = New-Object System.Windows.Forms.MenuItem +$SplitContainerInstance = New-Object System.Windows.Forms.SplitContainer +$StatusBarInstance = New-Object System.Windows.Forms.StatusBar +$TreeViewInstance = New-Object System.Windows.Forms.TreeView +$TabControl = New-Object System.Windows.Forms.TabControl +$TabPageInstance = New-Object System.Windows.Forms.TabPage +$ListViewInstance = New-Object System.Windows.Forms.ListView +$TabPageClass = New-Object System.Windows.Forms.TabPage +$ListViewClass = New-Object System.Windows.Forms.ListView +$TabPageInterface = New-Object System.Windows.Forms.TabPage +$SplitContainerInterface = New-Object System.Windows.Forms.SplitContainer +$TreeViewInterface = New-Object System.Windows.Forms.TreeView +$ListViewInterface = New-Object System.Windows.Forms.ListView +$StatusBarInterface = New-Object System.Windows.Forms.StatusBar +$TabPagePSObject = New-Object System.Windows.Forms.TabPage +$TextBoxPSObject = New-Object System.Windows.Forms.TextBox +$TabPageValues = New-Object System.Windows.Forms.TabPage +$TextBoxValues = New-Object System.Windows.Forms.TextBox +$TabPagePowerShell = New-Object System.Windows.Forms.TabPage +$SplitContainerPowerShell = New-Object System.Windows.Forms.SplitContainer +$TextBoxPowerShell = New-Object System.Windows.Forms.TextBox +$ButtonExecute = New-Object System.Windows.Forms.Button +$TextBoxOutput = New-Object System.Windows.Forms.TextBox +$ButtonClear = New-Object System.Windows.Forms.Button +$TabPageWMIClasses = New-Object System.Windows.Forms.TabPage +$LabelComputers = New-Object System.Windows.Forms.Label +$TextBoxComputers = New-Object System.Windows.Forms.TextBox +$LabelFilter = New-Object System.Windows.Forms.Label +$TextBoxFilter = New-Object System.Windows.Forms.TextBox +$TimerNetClasses = New-Object System.Windows.Forms.Timer + +Write-Verbose "Generate-Form Form" +$Form.Name = 'Form' +$Form.Text = 'Powershell Object Explorer' +$Form.DataBindings.DefaultDataSourceUpdateMode = 0 +$Form.ClientSize = New-Object System.Drawing.Size(890,359) +$Form.StartPosition = 1 +$Form.BackColor = [System.Drawing.Color]::FromArgb(255,185,209,234) + +$Form.Add_Load({Form_Load}) +$Form.Add_FormClosing({$TimerNetClasses.Enabled=$False}) +$Form.Add_Resize({Form_Resize}) + +Write-Verbose "Generate-Form Menus" + +$MainMenu.Name = "MainMenu" +$Form.Menu = $MainMenu + +$mnuFile.Name = 'mnuFile' +$mnuFile.Text = '&File' +$MainMenu.MenuItems.Add($mnuFile) | Out-Null + +$mnuExit.Name = 'mnuExit' +$mnuExit.Text = 'E&xit' +$mnuExit.Add_Click({mnuExit_Click}) +$mnuFile.MenuItems.Add($mnuExit) | Out-Null + +$mnuView.Name = 'mnuView' +$mnuView.Text = '&View' +$MainMenu.MenuItems.Add($mnuView) | Out-Null + +$mnuWMIObjects.Name = 'mnuWMIObjects' +$mnuWMIObjects.Text = '&WMI Objects' +$mnuWMIObjects.Add_Click({mnuWMIObjects_Click}) +$mnuView.MenuItems.Add($mnuWMIObjects) | Out-Null + +$mnuSeparatorV1.Name = 'mnuSeparatorV1' +$mnuSeparatorV1.Text = '-' +$mnuView.MenuItems.Add($mnuSeparatorV1) | Out-Null + +$mnuNetAssemblies.Name = 'mnuNetAssemblies' +$mnuNetAssemblies.Text = '.Net Assemblies' +$mnuNetAssemblies.Add_Click({mnuNetAssemblies_Click}) +$mnuView.MenuItems.Add($mnuNetAssemblies) | Out-Null + +$mnuNetClasses.Name = 'mnuNetClasses' +$mnuNetClasses.Text = '.Net Classes' +$mnuNetClasses.Add_Click({mnuNetClasses_Click}) +$mnuView.MenuItems.Add($mnuNetClasses) | Out-Null + +$mnuSeparatorV2.Name = 'mnuSeparatorV2' +$mnuSeparatorV2.Text = '-' +$mnuView.MenuItems.Add($mnuSeparatorV2) | Out-Null + +$mnuPSAliases.Name = 'mnuPSAliases' +$mnuPSAliases.Text = 'PowerShell &Aliases' +$mnuPSAliases.Add_Click({mnuPSAliases_Click}) +$mnuView.MenuItems.Add($mnuPSAliases) | Out-Null + +$mnuPSCommands.Name = 'mnuPSCommands' +$mnuPSCommands.Text = 'PowerShell &Commands' +$mnuPSCommands.Add_Click({mnuPSCommands_Click}) +$mnuView.MenuItems.Add($mnuPSCommands) | Out-Null + +$mnuPSDrives.Name = 'mnuPSDrives' +$mnuPSDrives.Text = 'PowerShell &Drives' +$mnuPSDrives.Add_Click({mnuPSDrives_Click}) +$mnuView.MenuItems.Add($mnuPSDrives) | Out-Null + +$mnuPSModules.Name = 'mnuPSModules' +$mnuPSModules.Text = 'PowerShell &Modules' +$mnuPSModules.Add_Click({mnuPSModules_Click}) +$mnuView.MenuItems.Add($mnuPSModules) | Out-Null + +$mnuPSVariables.Name = 'mnuPSVariables' +$mnuPSVariables.Text = 'PowerShell &Variables' +$mnuPSVariables.Add_Click({mnuPSVariables_Click}) +$mnuView.MenuItems.Add($mnuPSVariables) | Out-Null + +$mnuSeparatorV3.Name = 'mnuSeparatorV3' +$mnuSeparatorV3.Text = '-' +$mnuView.MenuItems.Add($mnuSeparatorV3) | Out-Null + +$mnuWINFeature.Name = 'mnuWINFeature' +$mnuWINFeature.Text = 'Windows &Features' +$mnuWINFeature.Add_Click({mnuWINFeature_Click}) +$mnuView.MenuItems.Add($mnuWINFeature) | Out-Null + +$mnuSeparatorV4.Name = 'mnuSeparatorV4' +$mnuSeparatorV4.Text = '-' +$mnuView.MenuItems.Add($mnuSeparatorV4) | Out-Null + +$mnuWINProcess.Name = 'mnuWINProcess' +$mnuWINProcess.Text = 'Windows &Processes' +$mnuWINProcess.Add_Click({mnuWINProcess_Click}) +$mnuView.MenuItems.Add($mnuWINProcess) | Out-Null + +$mnuWINService.Name = 'mnuWINService' +$mnuWINService.Text = 'Windows &Services' +$mnuWINService.Add_Click({mnuWINService_Click}) +$mnuView.MenuItems.Add($mnuWINService) | Out-Null + +$mnuSeparatorV5.Name = 'mnuSeparatorV5' +$mnuSeparatorV5.Text = '-' +$mnuView.MenuItems.Add($mnuSeparatorV5) | Out-Null + +$mnuTestCases.Name = 'mnuTestCases' +$mnuTestCases.Text = 'Test Cases' +$mnuTestCases.Add_Click({mnuTestCases_Click}) +$mnuView.MenuItems.Add($mnuTestCases) | Out-Null + +$mnuOptions.Name = 'mnuOptions' +$mnuOptions.Text = '&Options' +$MainMenu.MenuItems.Add($mnuOptions) | Out-Null + +$mnuObjects.Name = 'mnuObjects' +$mnuObjects.Text = '&Show Objects' +$mnuObjects.Add_Click({mnuObjects_Click}) +$mnuOptions.MenuItems.Add($mnuObjects) | Out-Null + +$mnuStructs.Name = 'mnuStructs' +$mnuStructs.Text = 'Show St&ructs' +$mnuStructs.Add_Click({mnuStructs_Click}) +$mnuOptions.MenuItems.Add($mnuStructs) | Out-Null + +$mnuSeparator4.Name = 'mnuSeparator4' +$mnuSeparator4.Text = '-' +$mnuOptions.MenuItems.Add($mnuSeparator4) | Out-Null + +$mnuCollections.Name = 'mnuCollections' +$mnuCollections.Text = 'Show &Collections' +$mnuCollections.Add_Click({mnuCollections_Click}) +$mnuOptions.MenuItems.Add($mnuCollections) | Out-Null + +$mnuSeparator5.Name = 'mnuSeparator5' +$mnuSeparator5.Text = '-' +$mnuOptions.MenuItems.Add($mnuSeparator5) | Out-Null + +$mnuNulls.Name = 'mnuNulls' +$mnuNulls.Text = 'Show &Nulls' +$mnuNulls.Add_Click({mnuNulls_Click}) +$mnuOptions.MenuItems.Add($mnuNulls) | Out-Null + +$mnuEmptyStrings.Name = 'mnuEmptyStrings' +$mnuEmptyStrings.Text = 'Show &Empty Strings' +$mnuEmptyStrings.Add_Click({mnuEmptyStrings_Click}) +$mnuOptions.MenuItems.Add($mnuEmptyStrings) | Out-Null + +$mnuHelp.Name = 'mnuHelp' +$mnuHelp.Text = '&Help' +$MainMenu.MenuItems.Add($mnuHelp) | Out-Null + +$mnuAbout.Name = 'mnuAbout' +$mnuAbout.Text = '&About' +$mnuAbout.Add_Click({mnuAbout_Click}) +$mnuHelp.MenuItems.Add($mnuAbout) | Out-Null + +$mnuStatus.Name = 'mnuStatus' +$mnuStatus.Text = '' +$MainMenu.MenuItems.Add($mnuStatus) | Out-Null + +Write-Verbose "Generate-Form Computer SplitContainer" + +$SplitContainerInstance.Dock = [System.Windows.Forms.DockStyle]::Fill +$SplitContainerInstance.Location = New-Object System.Drawing.Point(0, 0) +$SplitContainerInstance.TabIndex = 0 +$SplitContainerInstance.Name = "SplitContainer" +$SplitContainerInstance.Text = "SplitContainer" +$SplitContainerInstance.Panel1.Controls.Add($TreeViewInstance) +$SplitContainerInstance.Panel2.Controls.Add($TabControl) + +$SplitContainerInstance.Add_SplitterMoved({SplitContainer_SplitterMoved $SplitContainerInstance $_}) + +$Form.Controls.Add($SplitContainerInstance) + +Write-Verbose "Generate-Form StatusBarInstance" + +$StatusBarInstance.Name = 'StatusBarInstance' +$StatusBarInstance.DataBindings.DefaultDataSourceUpdateMode = 0 +$StatusBarInstance.TabIndex = 8 +$StatusBarInstance.Size = New-Object System.Drawing.Size(428,22) +$StatusBarInstance.Location = New-Object System.Drawing.Point(0,337) +$StatusBarInstance.Text = 'Ready' + +$Form.Controls.Add($StatusBarInstance) + +#$Form.Controls.Add($TextBoxFilter) + +Write-Verbose "Generate-Form TreeViewInstance" + +$TreeViewInstance.Name = "TreeViewInstance" +$TreeViewInstance.TabIndex = 0 +$TreeViewInstance.Anchor = 15 +$TreeViewInstance.Dock = [System.Windows.Forms.DockStyle]::Fill +$TreeViewInstance.HideSelection = $False +$TreeViewInstance.Tag = $ListViewInstance + +$TreeViewInstance.Add_AfterSelect({TreeView_AfterSelect -Sender $TreeViewInstance -EventArg $_}) + +Write-Verbose "Generate-Form TabControl" + +$TabControl.Name = "TabControl" +$TabControl.TabIndex = 9 +$TabControl.Anchor = 15 +$TabControl.Dock = [System.Windows.Forms.DockStyle]::Fill + +#$Form.Controls.Add($TabControl) + +Write-Verbose "Generate-Form TabPage Instance" + +$TabPageInstance.Name = "TabPageInstance" +$TabPageInstance.Text = "Instance" +$TabPageInstance.TabIndex = 0 +$TabPageInstance.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabControl.Controls.Add($TabPageInstance) + +Write-Verbose "Generate-Form ListViewInstance" + +$ListViewInstance.Name = "ListViewInstance" +$ListViewInstance.TabIndex = 1 +$ListViewInstance.Dock = [System.Windows.Forms.DockStyle]::Fill +$ListViewInstance.Tag = $StatusBarInstance + + +$TabPageInstance.Controls.Add($ListViewInstance) + +Write-Verbose "Generate-Form TabPage Class" + +$TabPageClass.Name = "TabPageClass" +$TabPageClass.Text = "Class" +$TabPageClass.TabIndex = 0 +$TabPageClass.Anchor = 15 +$TabPageClass.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabControl.Controls.Add($TabPageClass) + +Write-Verbose "Generate-Form ListViewClass" + +$ListViewClass.Name = "ListViewClass" +$ListViewClass.TabIndex = 11 +$ListViewClass.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabPageClass.Controls.Add($ListViewClass) + +Write-Verbose "Generate-Form TabPage Interface" + +$TabPageInterface.Name = "TabPageInterface" +$TabPageInterface.Text = "Interface" +$TabPageInterface.TabIndex = 0 +$TabPageInterface.Anchor = 15 +$TabPageInterface.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabControl.Controls.Add($TabPageInterface) + +Write-Verbose "Generate-Form SplitContainerInterface" + +$SplitContainerInterface.Name = "SplitContainerInterface" +$SplitContainerInterface.Text = "SplitContainerInterface" +$SplitContainerInterface.Dock = [System.Windows.Forms.DockStyle]::Fill +#$SplitContainerInterface.SplitterDistance = 211 +$SplitContainerInterface.TabIndex = 0 + +$SplitContainerInterface.Panel1.Controls.Add($TreeViewInterface) +$SplitContainerInterface.Panel2.Controls.Add($ListViewInterface) + +$SplitContainerInterface.Add_SplitterMoved({SplitContainer_SplitterMoved $SplitContainerInterface $_}) + +$TabPageInterface.Controls.Add($SplitContainerInterface) + +$StatusBarInterface.Name = 'StatusBarInterface' +$StatusBarInterface.DataBindings.DefaultDataSourceUpdateMode = 0 +$StatusBarInterface.TabIndex = 8 +$StatusBarInterface.Size = New-Object System.Drawing.Size(428,22) +$StatusBarInterface.Location = New-Object System.Drawing.Point(0,337) +$StatusBarInterface.Text = 'StatusBarTabControl' + +$TabPageInterface.Controls.Add($StatusBarInterface) + + +Write-Verbose "Generate-Form TreeViewInstance" + +$TreeViewInterface.Name = "TreeViewInterface" +$TreeViewInterface.TabIndex = 0 +$TreeViewInterface.Dock = [System.Windows.Forms.DockStyle]::Fill +$TreeViewInterface.HideSelection = $False +$TreeViewInterface.Tag = $ListViewInterface + +$TreeViewInterface.Add_AfterSelect({TreeView_AfterSelect -Sender $TreeViewInterface -EventArg $_}) + +Write-Verbose "Generate-Form ListViewInterface" + +$ListViewInterface.Name = "ListViewInterface" +$ListViewInterface.TabIndex = 11 +$ListViewInterface.Dock = [System.Windows.Forms.DockStyle]::Fill +$ListViewInterface.Tag = $StatusBarInterface + + +Write-Verbose "Generate-Form TabPage PSObject" + +$TabPagePSObject.Name = "TabPagePSObject" +$TabPagePSObject.Text = "PSObject" +$TabPagePSObject.TabIndex = 0 +$TabPagePSObject.Anchor = 15 +$TabPagePSObject.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabControl.Controls.Add($TabPagePSObject) + +Write-Verbose "Generate-Form txtPSObject" + +$TextBoxPSObject.Text = '' +$TextBoxPSObject.Name = 'TextBoxPSObject' +$TextBoxPSObject.TabIndex = 15 +$TextBoxPSObject.MultiLine = $True +$TextBoxPSObject.WordWrap = $False +$TextBoxPSObject.ScrollBars = [System.Windows.Forms.ScrollBars]::Both +$TextBoxPSObject.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabPagePSObject.Controls.Add($TextBoxPSObject) + +Write-Verbose "Generate-Form TabPage Values" + +$TabPageValues.Name = "TabPageValues" +$TabPageValues.Text = "Values" +$TabPageValues.TabIndex = 0 +$TabPageValues.Anchor = 15 +$TabPageValues.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabControl.Controls.Add($TabPageValues) + +Write-Verbose "Generate-Form txtValues" + +$TextBoxValues.Text = '' +$TextBoxValues.Name = 'TextBoxValues' +$TextBoxValues.TabIndex = 15 +$TextBoxValues.MultiLine = $True +$TextBoxValues.WordWrap = $False +$TextBoxValues.ScrollBars = [System.Windows.Forms.ScrollBars]::Both +$TextBoxValues.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabPageValues.Controls.Add($TextBoxValues) + +Write-Verbose "Generate-Form TabPage PowerShell" + +$TabPagePowerShell.Name = "TabPagePowerShell" +$TabPagePowerShell.Text = "PowerShell" +$TabPagePowerShell.TabIndex = 0 +$TabPagePowerShell.Anchor = 15 +$TabPagePowerShell.Dock = [System.Windows.Forms.DockStyle]::Fill + +$TabControl.Controls.Add($TabPagePowerShell) + +Write-Verbose "Generate-Form SplitContainerPowerShell" + +$SplitContainerPowerShell.Name = "SplitContainerPowerShell" +$SplitContainerPowerShell.Text = "SplitContainerPowerShell" +$SplitContainerPowerShell.Dock = [System.Windows.Forms.DockStyle]::Fill +#$SplitContainerPowerShell.SplitterDistance = 211 +$SplitContainerPowerShell.Orientation = [System.Windows.Forms.Orientation]::Horizontal + +$SplitContainerPowerShell.Panel1.Controls.Add($TextboxPowerShell) +$SplitContainerPowerShell.Panel1.Controls.Add($ButtonExecute) +$SplitContainerPowerShell.Panel2.Controls.Add($TextboxOutput) +$SplitContainerPowerShell.Panel2.Controls.Add($ButtonClear) + +$SplitContainerPowerShell.Add_SplitterMoved({SplitContainer_SplitterMoved $SplitContainerPowerShell $_}) + +$TabPagePowerShell.Controls.Add($SplitContainerPowerShell) + +Write-Verbose "Generate-Form txtPowerShell" + +$TextBoxPowerShell.Text = '' +$TextBoxPowerShell.Name = 'TextBoxPowerShell' +$TextBoxPowerShell.TabIndex = 15 +$TextBoxPowerShell.MultiLine = $True +$TextBoxPowerShell.WordWrap = $False +$TextBoxPowerShell.ScrollBars = [System.Windows.Forms.ScrollBars]::Both +$TextBoxPowerShell.Dock = [System.Windows.Forms.DockStyle]::Fill + +Write-Verbose "Generate-Form ButtonExecute" + +$ButtonExecute.Enabled = $True +$ButtonExecute.Name = "ButtonExecute" +$ButtonExecute.Location = New-Object System.Drawing.Point(40,10) +$ButtonExecute.Size = New-Object System.Drawing.Size(75, 23) +$ButtonExecute.TabIndex = 0 +$ButtonExecute.Text = "Execute" +$ButtonExecute.UseVisualStyleBackColor = $True +$ButtonExecute.Dock = [System.Windows.Forms.DockStyle]::Right +#$ButtonExecute.Add_Click({ButtonExecute_Click $ButtonExecute}) +$ButtonExecute.Add_Click({ + Try + { + Write-Verbose "ButtonExecute_Click" + $TextBoxOutput.Text + #$Output = $ExecutionContext.InvokeCommand.InvokeScript($TextBoxPowerShell.Text,$False,$Null,$Null) + $Output = $ExecutionContext.InvokeCommand.InvokeScript($TextBoxPowerShell.Text) + IF ($Output -NE "") + { + ForEach ($Line In $OutPut) + { + $TextBoxOutput.Text += "$Line `r`n" + } + } + } + Catch [System.Exception] + { + Write-Verbose "ButtonExecute_Click Catch" + Write-Error $_.Exception.Message + } +}) + +Write-Verbose "Generate-Form txtOutput" + +$TextBoxOutput.Text = '' +$TextBoxOutput.Name = 'TextBoxOutput' +$TextBoxOutput.TabIndex = 15 +$TextBoxOutput.MultiLine = $True +$TextBoxOutput.WordWrap = $False +$TextBoxOutput.ScrollBars = [System.Windows.Forms.ScrollBars]::Both +$TextBoxOutput.Dock = [System.Windows.Forms.DockStyle]::Fill + +Write-Verbose "Generate-Form ButtonClear" + +$ButtonClear.Enabled = $True +$ButtonClear.Name = "ButtonClear" +$ButtonClear.Location = New-Object System.Drawing.Point(40,10) +$ButtonClear.Size = New-Object System.Drawing.Size(75, 23) +$ButtonClear.TabIndex = 0 +$ButtonClear.Text = "Clear" +$ButtonClear.UseVisualStyleBackColor = $True +$ButtonClear.Dock = [System.Windows.Forms.DockStyle]::Right +$ButtonClear.Add_Click({$TextBoxOutput.Text = ""}) + +Write-Verbose "Generate-Form TabPage WMIClasses" + +$TabPageWMIClasses.Name = "TabPageWMIClasses" +$TabPageWMIClasses.Text = "WMI Classes" +$TabPageWMIClasses.TabIndex = 0 +$TabPageWMIClasses.Anchor = 15 +$TabPageWMIClasses.Dock = [System.Windows.Forms.DockStyle]::Fill +$TabControl.Controls.Add($TabPageWMIClasses) + +Write-Verbose "Generate-Form LabelComputers" + +$LabelComputers.Text = 'Computer' +$LabelComputers.Name = 'LabelComputers' +$LabelComputers.TabIndex = 12 +$LabelComputers.Size = New-Object System.Drawing.Size(60,20) +$LabelComputers.Location = New-Object System.Drawing.Point(1,25) +$LabelComputers.DataBindings.DefaultDataSourceUpdateMode = 0 + +$TabPageWMIClasses.Controls.Add($LabelComputers) + +Write-Verbose "Generate-Form TextBoxComputers" + +$TextBoxComputers.Text = 'Localhost' +$TextBoxComputers.Name = 'TextBoxComputerss' +$TextBoxComputers.TabIndex = 13 +$TextBoxComputers.Size = New-Object System.Drawing.Size(306,20) +$TextBoxComputers.Location = New-Object System.Drawing.Point(61,20) +$TextBoxComputers.DataBindings.DefaultDataSourceUpdateMode = 0 + +$TabPageWMIClasses.Controls.Add($TextBoxComputers) + +Write-Verbose "Generate-Form LabelFilter" + +$LabelFilter.Text = 'Filter' +$LabelFilter.Name = 'LabelFilter' +$LabelFilter.TabIndex = 14 +$LabelFilter.Size = New-Object System.Drawing.Size(60,20) +$LabelFilter.Location = New-Object System.Drawing.Point(1,50) +$LabelFilter.DataBindings.DefaultDataSourceUpdateMode = 0 + +$TabPageWMIClasses.Controls.Add($LabelFilter) + +Write-Verbose "Generate-Form TextBoxFilter" + +$TextBoxFilter.Text = '' +$TextBoxFilter.Name = 'TextBoxFilter' +$TextBoxFilter.TabIndex = 15 +$TextBoxFilter.Size = New-Object System.Drawing.Size(306,20) +$TextBoxFilter.Location = New-Object System.Drawing.Point(61,45) +$TextBoxFilter.DataBindings.DefaultDataSourceUpdateMode = 0 + +$TabPageWMIClasses.Controls.Add($TextBoxFilter) + +#$TimerNetClasses.Name = "TimerNetClasses" +$TimerNetClasses.Interval=100 +$TimerNetClasses.Add_Tick({TimerNetClasses_Tick}) + +#Show the Form +$Form.ShowDialog()| Out-Null +} + +#endregion + +# VerbosePreference= SilentlyContinue is the default +#$VerbosePreference="SilentlyContinue" + +# VerbosePreference= Continue will show verbose statements (useful for debugging) +#$VerbosePreference="Continue" + +# DebugPreference= SilentlyContinue is the default +#$DebugPreference="SilentlyContinue" + +# DebugPreference= Continue will show verbose statements (useful for debugging) +#$DebugPreference="Continue" + +#CLS +#$Error.Clear() + +Generate-PSObjectExplorerForm + diff --git a/App/Scripts/PowerCopy.ps1 b/Extensions/Tools/PowerCopy.ps1 similarity index 100% rename from App/Scripts/PowerCopy.ps1 rename to Extensions/Tools/PowerCopy.ps1 diff --git a/App/Scripts/Show-PSHelpTree.ps1 b/Extensions/Tools/Show-PSHelpTree.ps1 similarity index 100% rename from App/Scripts/Show-PSHelpTree.ps1 rename to Extensions/Tools/Show-PSHelpTree.ps1 diff --git a/App/Scripts/ThumbnailPhotoManager.ps1 b/Extensions/Tools/ThumbnailPhotoManager.ps1 similarity index 100% rename from App/Scripts/ThumbnailPhotoManager.ps1 rename to Extensions/Tools/ThumbnailPhotoManager.ps1 diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 9cecc1d..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/App/license.txt b/License.txt similarity index 96% rename from App/license.txt rename to License.txt index 6635df9..df039a0 100644 --- a/App/license.txt +++ b/License.txt @@ -1,40 +1,40 @@ -AdminMenu is a powershell driven WPF menu geared for IT professionals -Copyright (C) 2016 PowershellCrack.com. Richard Tracy - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -Some Powershell script are included; most of them are from the -Microsoft Technet Gallery. Microsoft User license aggreement states: - -The MIT License (MIT) - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +AdminMenu is a powershell driven WPF menu geared for IT professionals +Copyright (C) 2016 PowershellCrack.com. Richard Tracy + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Some Powershell script are included; most of them are from the +Microsoft Technet Gallery. Microsoft User license aggreement states: + +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index a18ff6d..0000000 --- a/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# Admin Run-As Menu -I developed a PowerShell driven Admin Utility menu (using the latest WPF technology and Mahapps theme) that is highly customizable. - -![Alt_text](http://4.bp.blogspot.com/-Qs89EvFyqd8/WC0siMzc03I/AAAAAAAAD90/_-CsNB0sZHUmspoOxROR9JMb8MrL6FpSgCK4B/s1600/adminmenu_creds.png) - -![Alt_text](http://2.bp.blogspot.com/-tYgUvZ8pMfE/WC0teSKRvWI/AAAAAAAAD-E/aV9tXaICpxgizd--Du6FKPwV7s3jgPqpwCK4B/s1600/adminmenu_tab2.png) - -![Alt_text](http://3.bp.blogspot.com/-dgWB7g6VSvU/WC0tjZ9WMyI/AAAAAAAAD-k/3R-a8ky_BF0aFIJSuNaII-sV09IAdOT7QCK4B/s1600/adminmenu_tab6.png) - - -# EULA -AdminMenu is a powershell driven WPF menu geared for IT professionals - -Copyright (C) 2016 PowershellCrack.com. Richard Tracy - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -Some Powershell script are included; most of them are from the -Microsoft Technet Gallery. Microsoft User license aggreement states: - -The MIT License (MIT) - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - diff --git a/App/Resources/About.xaml b/Resources/About.xaml similarity index 98% rename from App/Resources/About.xaml rename to Resources/About.xaml index 53c7eaf..8e99480 100644 --- a/App/Resources/About.xaml +++ b/Resources/About.xaml @@ -1,34 +1,34 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/App/Resources/AppHide-MahApps.xaml b/Resources/AppHide-MahApps.xaml similarity index 94% rename from App/Resources/AppHide-MahApps.xaml rename to Resources/AppHide-MahApps.xaml index 0355ea7..9bb1c9d 100644 --- a/App/Resources/AppHide-MahApps.xaml +++ b/Resources/AppHide-MahApps.xaml @@ -1,73 +1,74 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App/Resources/AppHide.xaml b/Resources/AppHide.xaml similarity index 96% rename from App/Resources/AppHide.xaml rename to Resources/AppHide.xaml index bb992d9..52b1f84 100644 --- a/App/Resources/AppHide.xaml +++ b/Resources/AppHide.xaml @@ -1,52 +1,52 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/App/Resources/AppOpen-MahApps.xaml b/Resources/AppOpen-MahApps.xaml similarity index 62% rename from App/Resources/AppOpen-MahApps.xaml rename to Resources/AppOpen-MahApps.xaml index 517adf5..49143ed 100644 --- a/App/Resources/AppOpen-MahApps.xaml +++ b/Resources/AppOpen-MahApps.xaml @@ -1,74 +1,75 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App/Resources/AppOpen.xaml b/Resources/AppOpen.xaml similarity index 98% rename from App/Resources/AppOpen.xaml rename to Resources/AppOpen.xaml index f05f912..97a6c90 100644 --- a/App/Resources/AppOpen.xaml +++ b/Resources/AppOpen.xaml @@ -1,53 +1,53 @@ - - - - - - - - - - - + + + + + + + + + + + \ No newline at end of file diff --git a/App/Resources/BureauBlue.xaml b/Resources/BureauBlue.xaml similarity index 98% rename from App/Resources/BureauBlue.xaml rename to Resources/BureauBlue.xaml index 10b0d71..9c67ee4 100644 --- a/App/Resources/BureauBlue.xaml +++ b/Resources/BureauBlue.xaml @@ -1,3837 +1,3837 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #FF000000 - #FFFFFFFF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #FF000000 + #FFFFFFFF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App/Resources/CredentialWindow.xaml b/Resources/CredentialWindow.xaml similarity index 98% rename from App/Resources/CredentialWindow.xaml rename to Resources/CredentialWindow.xaml index 7bf9d3e..4b1eae8 100644 --- a/App/Resources/CredentialWindow.xaml +++ b/Resources/CredentialWindow.xaml @@ -1,57 +1,57 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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�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 literal 0 HcmV?d00001 diff --git a/Utilities/NetCalc.exe b/Utilities/NetCalc.exe new file mode 100644 index 0000000000000000000000000000000000000000..a1b3a435bb2c1c0a09f118c4cf3f701f8ff441bb GIT binary patch literal 32768 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�~Pf0ZI0v!2DeR8NNhJ`Mb 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
uR~t@M11 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 Date: Sun, 15 Jul 2018 09:55:58 -0400 Subject: [PATCH 2/2] add readme --- README.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..95ac4c9 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# Admin Run-As Menu +I developed a PowerShell driven Admin Utility menu (using the latest WPF technology and Mahapps theme) that is highly customizable. + +![Alt_text](http://4.bp.blogspot.com/-Qs89EvFyqd8/WC0siMzc03I/AAAAAAAAD90/_-CsNB0sZHUmspoOxROR9JMb8MrL6FpSgCK4B/s1600/adminmenu_creds.png) + +![Alt_text](http://2.bp.blogspot.com/-tYgUvZ8pMfE/WC0teSKRvWI/AAAAAAAAD-E/aV9tXaICpxgizd--Du6FKPwV7s3jgPqpwCK4B/s1600/adminmenu_tab2.png) + +![Alt_text](http://3.bp.blogspot.com/-dgWB7g6VSvU/WC0tjZ9WMyI/AAAAAAAAD-k/3R-a8ky_BF0aFIJSuNaII-sV09IAdOT7QCK4B/s1600/adminmenu_tab6.png) + + +# EULA +AdminMenu is a powershell driven WPF menu geared for IT professionals + +Copyright (C) 2016 PowershellCrack.com. Richard Tracy + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Some Powershell script are included; most of them are from the +Microsoft Technet Gallery. Microsoft User license aggreement states: + +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy

Alternative Proxy