From d1ab168edf9439ed478da6481e5d188dc61c36a2 Mon Sep 17 00:00:00 2001 From: Nigel Tatschner Date: Mon, 11 Jan 2021 12:25:23 +0000 Subject: [PATCH 1/4] Adding initial framework --- Modules/tatux.net/.gitignore | 2 + Modules/tatux.net/Classes/README.md | 1 + Modules/tatux.net/Colors.ps1 | 21 +++ Modules/tatux.net/Config.ps1 | 32 +++++ Modules/tatux.net/Private/README.md | 1 + Modules/tatux.net/Private/Tests/README.md | 1 + .../Public/Get-NTTCPConnectionInfo.ps1 | 0 Modules/tatux.net/Public/README.md | 1 + Modules/tatux.net/Public/Tests/README.md | 1 + Modules/tatux.net/README.md | 4 + Modules/tatux.net/tatux.net.psd1 | 132 ++++++++++++++++++ Modules/tatux.net/tatux.net.psm1 | 33 +++++ 12 files changed, 229 insertions(+) create mode 100644 Modules/tatux.net/.gitignore create mode 100644 Modules/tatux.net/Classes/README.md create mode 100644 Modules/tatux.net/Colors.ps1 create mode 100644 Modules/tatux.net/Config.ps1 create mode 100644 Modules/tatux.net/Private/README.md create mode 100644 Modules/tatux.net/Private/Tests/README.md create mode 100644 Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 create mode 100644 Modules/tatux.net/Public/README.md create mode 100644 Modules/tatux.net/Public/Tests/README.md create mode 100644 Modules/tatux.net/README.md create mode 100644 Modules/tatux.net/tatux.net.psd1 create mode 100644 Modules/tatux.net/tatux.net.psm1 diff --git a/Modules/tatux.net/.gitignore b/Modules/tatux.net/.gitignore new file mode 100644 index 0000000..b9ee499 --- /dev/null +++ b/Modules/tatux.net/.gitignore @@ -0,0 +1,2 @@ +Config.psd1 +*git-ignore* \ No newline at end of file diff --git a/Modules/tatux.net/Classes/README.md b/Modules/tatux.net/Classes/README.md new file mode 100644 index 0000000..a7e17cf --- /dev/null +++ b/Modules/tatux.net/Classes/README.md @@ -0,0 +1 @@ +# tatux.net Classes Functions diff --git a/Modules/tatux.net/Colors.ps1 b/Modules/tatux.net/Colors.ps1 new file mode 100644 index 0000000..e2f73ab --- /dev/null +++ b/Modules/tatux.net/Colors.ps1 @@ -0,0 +1,21 @@ +# Color variables for easy peasy splatting :-) +$Green = @{ + Background = 'Black' + Foreground = 'Green' +} +$Cyan = @{ + Background = 'Black' + Foreground = 'Cyan' +} +$Magenta = @{ + Background = 'Black' + Foreground = 'Magenta' +} +$Red = @{ + Background = 'Black' + Foreground = 'Red' +} +$Yellow = @{ + Background = 'Black' + Foreground = 'Yellow' +} diff --git a/Modules/tatux.net/Config.ps1 b/Modules/tatux.net/Config.ps1 new file mode 100644 index 0000000..3ea771d --- /dev/null +++ b/Modules/tatux.net/Config.ps1 @@ -0,0 +1,32 @@ +#region read in or create an initial config file and variable +$ConfigFile = "Config.psd1" + +if (Test-Path "$PSScriptRoot\$ConfigFile") { + try { + $Params = @{ + BaseDirectory = $PSScriptRoot + FileName = $ConfigFile + } + $Config = Import-LocalizedData @Params + foreach ($variable in $Config.keys) { + Write-Verbose "Setting $var variable." + New-Variable -Name "$variable" -Value $Config.$variable -Force + Export-ModuleMember -Variable $variable + } + } catch { + Write-Warning "Invalid configuration data in $ConfigFile." + Write-Warning "Please fill out or correct $PSScriptRoot\$ConfigFile." + Write-Verbose $_.Exception.Message + Write-Verbose $_.InvocationInfo.ScriptName + Write-Verbose $_.InvocationInfo.PositionMessage + } +} else { + @" +@{ + Variable = "" +} +"@ | Out-File -Encoding UTF8 -FilePath "$PSScriptRoot\$ConfigFile" + Write-Warning "Generated $PSScriptRoot\$ConfigFile." + Write-Warning "Please edit $ConfigFile and re-import module." +} +#endregion diff --git a/Modules/tatux.net/Private/README.md b/Modules/tatux.net/Private/README.md new file mode 100644 index 0000000..a5df128 --- /dev/null +++ b/Modules/tatux.net/Private/README.md @@ -0,0 +1 @@ +# tatux.net Private Functions diff --git a/Modules/tatux.net/Private/Tests/README.md b/Modules/tatux.net/Private/Tests/README.md new file mode 100644 index 0000000..9e5938a --- /dev/null +++ b/Modules/tatux.net/Private/Tests/README.md @@ -0,0 +1 @@ +# tatux.net Private\Tests Functions diff --git a/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 b/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 new file mode 100644 index 0000000..e69de29 diff --git a/Modules/tatux.net/Public/README.md b/Modules/tatux.net/Public/README.md new file mode 100644 index 0000000..2f70b8f --- /dev/null +++ b/Modules/tatux.net/Public/README.md @@ -0,0 +1 @@ +# tatux.net Public Functions diff --git a/Modules/tatux.net/Public/Tests/README.md b/Modules/tatux.net/Public/Tests/README.md new file mode 100644 index 0000000..e5dca58 --- /dev/null +++ b/Modules/tatux.net/Public/Tests/README.md @@ -0,0 +1 @@ +# tatux.net Public\Tests Functions diff --git a/Modules/tatux.net/README.md b/Modules/tatux.net/README.md new file mode 100644 index 0000000..5429c55 --- /dev/null +++ b/Modules/tatux.net/README.md @@ -0,0 +1,4 @@ +# tatux.net Powershell Module + +*Admin network based tools, providing backwards compatibility for older OS types* + diff --git a/Modules/tatux.net/tatux.net.psd1 b/Modules/tatux.net/tatux.net.psd1 new file mode 100644 index 0000000..675c3b7 --- /dev/null +++ b/Modules/tatux.net/tatux.net.psd1 @@ -0,0 +1,132 @@ +# +# Module manifest for module 'tatux.net' +# +# Generated by: Nigel Tatschner +# +# Generated on: 11/01/2021 +# + +@{ + +# Script module or binary module file associated with this manifest. +RootModule = 'tatux.net' + +# Version number of this module. +ModuleVersion = '0.0.1' + +# Supported PSEditions +# CompatiblePSEditions = @() + +# ID used to uniquely identify this module +GUID = '699172df-81aa-4d37-b4e9-a26e6c4e8bdf' + +# Author of this module +Author = 'Nigel Tatschner' + +# Company or vendor of this module +CompanyName = 'Tatux Solutions' + +# Copyright statement for this module +Copyright = '(c) 2021 Nigel Tatschner. All rights reserved.' + +# Description of the functionality provided by this module +Description = 'Admin network based tools, providing backwards compatibility for older OS types' + +# Minimum version of the PowerShell engine required by this module +# PowerShellVersion = '' + +# Name of the PowerShell host required by this module +# PowerShellHostName = '' + +# Minimum version of the PowerShell host required by this module +# PowerShellHostVersion = '' + +# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# DotNetFrameworkVersion = '' + +# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# ClrVersion = '' + +# Processor architecture (None, X86, Amd64) required by this module +# ProcessorArchitecture = '' + +# Modules that must be imported into the global environment prior to importing this module +RequiredModules = @('tatux.utils') + +# Assemblies that must be loaded prior to importing this module +# RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module. +# ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +# TypesToProcess = @() + +# Format files (.ps1xml) to be loaded when importing this module +# FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess +# NestedModules = @() + +# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. +FunctionsToExport = '*' + +# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. +CmdletsToExport = '*' + +# Variables to export from this module +VariablesToExport = '*' + +# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. +AliasesToExport = '*' + +# DSC resources to export from this module +# DscResourcesToExport = @() + +# List of all modules packaged with this module +# ModuleList = @() + +# List of all files packaged with this module +# FileList = @() + +# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. +PrivateData = @{ + + PSData = @{ + + # Tags applied to this module. These help with module discovery in online galleries. + # Tags = @() + + # A URL to the license for this module. + # LicenseUri = '' + + # A URL to the main website for this project. + # ProjectUri = '' + + # A URL to an icon representing this module. + # IconUri = '' + + # ReleaseNotes of this module + # ReleaseNotes = '' + + # Prerelease string of this module + # Prerelease = '' + + # Flag to indicate whether the module requires explicit user acceptance for install/update/save + # RequireLicenseAcceptance = $false + + # External dependent modules of this module + # ExternalModuleDependencies = @() + + } # End of PSData hashtable + +} # End of PrivateData hashtable + +# HelpInfo URI of this module +# HelpInfoURI = '' + +# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. +# DefaultCommandPrefix = '' + +} + diff --git a/Modules/tatux.net/tatux.net.psm1 b/Modules/tatux.net/tatux.net.psm1 new file mode 100644 index 0000000..c7d149f --- /dev/null +++ b/Modules/tatux.net/tatux.net.psm1 @@ -0,0 +1,33 @@ +#region get public and private function definition files. +$Public = @( + Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -Exclude "*.Tests.ps1" -ErrorAction SilentlyContinue +) +$Private = @( + Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -Exclude "*.Tests.ps1" -ErrorAction SilentlyContinue +) +#endregion + +#region source the files +foreach ($Function in @($Public + $Private)) { + $FunctionPath = $Function.fullname + try { + . $FunctionPath # dot source function + } catch { + Write-Error -Message "Failed to import function at $($FunctionPath): $_" + } +} +#endregion + +#region read in or create an initial config file and variable +#. "$PSScriptRoot\Config.ps1" # uncomment to source config parsing logic +#endregion + +#region set variables visible to the module and its functions only +$Date = Get-Date -UFormat "%Y.%m.%d" +$Time = Get-Date -UFormat "%H:%M:%S" +. "$PSScriptRoot\Colors.ps1" +#endregion + +#region export Public functions ($Public.BaseName) for WIP modules +Export-ModuleMember -Function $Public.Basename +#endregion From 4fd4fed6eb24bac9b81440dcf616bc17d095e88a Mon Sep 17 00:00:00 2001 From: Nigel Tatschner Date: Thu, 14 Jan 2021 16:23:09 +0000 Subject: [PATCH 2/4] Basic framework and content built out, need ti fix output --- .../Public/Invoke-NativeExpression.ps1 | 18 ++ .../Public/Get-NTTCPConnectionInfo.ps1 | 186 ++++++++++++++++++ Modules/tatux.net/tatux.net.psm1 | 9 +- 3 files changed, 209 insertions(+), 4 deletions(-) create mode 100644 Modules/Tatux.Utils/Public/Invoke-NativeExpression.ps1 diff --git a/Modules/Tatux.Utils/Public/Invoke-NativeExpression.ps1 b/Modules/Tatux.Utils/Public/Invoke-NativeExpression.ps1 new file mode 100644 index 0000000..64e349d --- /dev/null +++ b/Modules/Tatux.Utils/Public/Invoke-NativeExpression.ps1 @@ -0,0 +1,18 @@ +function Invoke-NativeExpression { + param ( + [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)] + [string]$Expression + ) + + process { + $executable, $arguments = $expression -split ' ' + $arguments = $arguments | foreach { "'$_'" } + $arguments = $arguments -join ' ' + $command = $executable + ' ' + $arguments + + if ($command) { + Write-Verbose "Invoking '$command'" + Invoke-Expression -command $command + } + } +} \ No newline at end of file diff --git a/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 b/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 index e69de29..3bb1a02 100644 --- a/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 +++ b/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 @@ -0,0 +1,186 @@ +<# + .SYNOPSIS + Using the legacy 'netstat' to parse information about TCP connections on a host + + .DESCRIPTION + Gather details from netstat about TCP connection an a Windows host, this should be as backward compatible as possible to allow the widest application. + + .PARAMETER DisplayExecutable + Displays the executable involved in creating each connection or listening port. In some cases well-known executables host multiple independent components, and in these cases the sequence of components involved in creating the connection or listening port is displayed. In this case the executable name is in [] at the bottom, on top is the component it called, and so forth until TCP/IP was reached. Note that this option can be time-consuming and will fail unless you have sufficient permissions. + + .PARAMETER ResolveAddress + Resolves the remote hosts DNS name if possible + + .PARAMETER IgnoreLoopback + Displays only locally assigend address connection info + + .PARAMETER ComputerName + A remote host to run the command on + + .EXAMPLE + PS C:\> Get-NTTCPConnectionInfo + + .OUTPUTS + object, object +#> +function Get-NTTCPConnectionInfo { + [CmdletBinding(DefaultParameterSetName = 'Default', + ConfirmImpact = 'None')] + [OutputType([object], ParameterSetName = 'Default')] + [OutputType([object], ParameterSetName = 'Executable')] + [OutputType([object])] + param + ( + [Parameter(ParameterSetName = 'Executable')] + [Alias('b')] + [switch]$DisplayExecutable, + [Parameter(ParameterSetName = 'Default')] + [Parameter(ParameterSetName = 'Executable')] + [Alias('f')] + [switch]$ResolveAddress, + [Parameter(ParameterSetName = 'Default')] + [Parameter(ParameterSetName = 'Executable')] + [switch]$IgnoreLoopback, + [Parameter(ParameterSetName = 'Default')] + [Parameter(ParameterSetName = 'Executable')] + [Alias('cn')] + [string]$ComputerName = 'localhost' + ) + + BEGIN { + # Creating the properties for the switches. + # Main Properties + $MainProps = [ordered]@{ + protocol = "" + localaddress = "" + remoteaddress = "" + state = "" + } + + # Executable properties + $ExecutableProps = [ordered]@{ + process = "" -as [System.Diagnostics.Process] + } + # Limit default properties to display on the process output + # so we can maintain the object integrity whiles being selective about default values + $defaultDisplaySet = "ProcessName", "ID" + $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet', [string[]]$defaultDisplaySet) + # We add this to the process object to apply our limiting + $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) + } + PROCESS { + switch ($PSCmdlet.ParameterSetName) { + "Executable" { + if ($ResolveAddress) { + $MainProps = $MainProps + $ExecutableProps + try { + NETSTAT -p tcp -f -o | ForEach-Object -Process { + if ([string]::IsNullOrEmpty($_)) { continue } + $NTTCPObj = New-Object system.collections.arraylist + $_.split('') | Foreach-Object -Process { + if ([string]::IsNullOrEmpty($_) -eq $false) { + $NTTCPObj.Add($_) | Out-Null + } + } + $obj = New-Object System.Management.Automation.PSObject -Property $MainProps + + # Getting Process info + $Process = Get-Process -Id $NTTCPObj[5] | Select-Object -Property * + + $Process | Add-Member MemberSet PSStandardMembers $PSStandardMembers + $obj.protocol = $NTTCPObj[0] + $obj.localaddress = $NTTCPObj[1] + $obj.remoteaddress = $NTTCPObj[2] + $obj.state = $NTTCPObj[3] + $Obj.process = $Process + $obj + } + } + catch { + $_ + } + } + else { + $MainProps = $MainProps + $ExecutableProps + try { + NETSTAT -p tcp -o | ForEach-Object -Process { + if ([string]::IsNullOrEmpty($_)) { continue } + $NTTCPObj = New-Object system.collections.arraylist + $_.split('') | Foreach-Object -Process { + if ([string]::IsNullOrEmpty($_) -eq $false) { + $NTTCPObj.Add($_) | Out-Null + } + } + $obj = New-Object System.Management.Automation.PSObject -Property $MainProps + + # Getting Process info + $Process = Get-Process -Id $NTTCPObj[5] | Select-Object -Property * + + $Process | Add-Member MemberSet PSStandardMembers $PSStandardMembers + $obj.protocol = $NTTCPObj[0] + $obj.localaddress = $NTTCPObj[1] + $obj.remoteaddress = $NTTCPObj[2] + $obj.state = $NTTCPObj[3] + $Obj.process = $Process + $obj + } + } + catch { + $_ + } + } + } + "Default" { + if ($ResolveAddress) { + try { + NETSTAT -p tcp -f | ForEach-Object -Process { + if ([string]::IsNullOrEmpty($_)) { continue } + $NTTCPObj = New-Object system.collections.arraylist + $_.split('') | Foreach-Object -Process { + if ([string]::IsNullOrEmpty($_) -eq $false) { + $NTTCPObj.Add($_) | Out-Null + } + } + $obj = New-Object System.Management.Automation.PSObject -Property $MainProps + $obj.protocol = $NTTCPObj[0] + $obj.localaddress = $NTTCPObj[1] + $obj.remoteaddress = $NTTCPObj[2] + $obj.state = $NTTCPObj[3] + $obj + } + } + catch { + $_ + } + } + else { + try { + $netstatoutput = $(NETSTAT -p tcp) + $netstatoutput | ForEach-Object -Process { + if ([string]::IsNullOrEmpty($_)) { continue } + $NTTCPObj = New-Object system.collections.arraylist + $_.split('') | Foreach-Object -Process { + if ([string]::IsNullOrEmpty($_) -eq $false) { + $NTTCPObj.Add($_) | Out-Null + } + } + $obj = New-Object System.Management.Automation.PSObject -Property $MainProps + $obj.protocol = $NTTCPObj[0] + $obj.localaddress = $NTTCPObj[1] + $obj.remoteaddress = $NTTCPObj[2] + $obj.state = $NTTCPObj[3] + $obj + } + } + catch { + $_ + } + } + } + Default { } + } + } + END { + + } +} diff --git a/Modules/tatux.net/tatux.net.psm1 b/Modules/tatux.net/tatux.net.psm1 index c7d149f..771d2cf 100644 --- a/Modules/tatux.net/tatux.net.psm1 +++ b/Modules/tatux.net/tatux.net.psm1 @@ -1,5 +1,5 @@ #region get public and private function definition files. -$Public = @( +$Public = @( Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -Exclude "*.Tests.ps1" -ErrorAction SilentlyContinue ) $Private = @( @@ -11,9 +11,10 @@ $Private = @( foreach ($Function in @($Public + $Private)) { $FunctionPath = $Function.fullname try { - . $FunctionPath # dot source function - } catch { - Write-Error -Message "Failed to import function at $($FunctionPath): $_" + . $FunctionPath # dot source function + } + catch { + Write-Error -Message "Failed to import function at $($FunctionPath): $_" } } #endregion From 80c5b41332aba978130ecd87949004dc73df8ac3 Mon Sep 17 00:00:00 2001 From: Nigel Tatschner Date: Mon, 1 Jan 2024 14:03:16 +0000 Subject: [PATCH 3/4] uploading stuff --- .../Public/Get-NTTCPConnectionInfo.ps1 | 11 +- PSApps/AdminTools/.gitignore | 7 + PSApps/AdminTools/AdminTools.psproj | 13 + PSApps/AdminTools/ChildForm.psf | 161 +++++++ PSApps/AdminTools/Globals.ps1 | 34 ++ PSApps/AdminTools/MainForm.psf | 399 ++++++++++++++++++ PSApps/AdminTools/Startup.pss | 39 ++ 7 files changed, 658 insertions(+), 6 deletions(-) create mode 100644 PSApps/AdminTools/.gitignore create mode 100644 PSApps/AdminTools/AdminTools.psproj create mode 100644 PSApps/AdminTools/ChildForm.psf create mode 100644 PSApps/AdminTools/Globals.ps1 create mode 100644 PSApps/AdminTools/MainForm.psf create mode 100644 PSApps/AdminTools/Startup.pss diff --git a/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 b/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 index 3bb1a02..3b018c9 100644 --- a/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 +++ b/Modules/tatux.net/Public/Get-NTTCPConnectionInfo.ps1 @@ -12,7 +12,7 @@ Resolves the remote hosts DNS name if possible .PARAMETER IgnoreLoopback - Displays only locally assigend address connection info + Displays only locally assigned address connection info .PARAMETER ComputerName A remote host to run the command on @@ -74,7 +74,7 @@ function Get-NTTCPConnectionInfo { if ($ResolveAddress) { $MainProps = $MainProps + $ExecutableProps try { - NETSTAT -p tcp -f -o | ForEach-Object -Process { + netstat -p tcp -o -f | ForEach-Object -Process { if ([string]::IsNullOrEmpty($_)) { continue } $NTTCPObj = New-Object system.collections.arraylist $_.split('') | Foreach-Object -Process { @@ -103,7 +103,7 @@ function Get-NTTCPConnectionInfo { else { $MainProps = $MainProps + $ExecutableProps try { - NETSTAT -p tcp -o | ForEach-Object -Process { + netstat -p tcp -o | ForEach-Object -Process { if ([string]::IsNullOrEmpty($_)) { continue } $NTTCPObj = New-Object system.collections.arraylist $_.split('') | Foreach-Object -Process { @@ -133,7 +133,7 @@ function Get-NTTCPConnectionInfo { "Default" { if ($ResolveAddress) { try { - NETSTAT -p tcp -f | ForEach-Object -Process { + netstat -p tcp -f | ForEach-Object -Process { if ([string]::IsNullOrEmpty($_)) { continue } $NTTCPObj = New-Object system.collections.arraylist $_.split('') | Foreach-Object -Process { @@ -155,8 +155,7 @@ function Get-NTTCPConnectionInfo { } else { try { - $netstatoutput = $(NETSTAT -p tcp) - $netstatoutput | ForEach-Object -Process { + netstat -p tcp | ForEach-Object -Process { if ([string]::IsNullOrEmpty($_)) { continue } $NTTCPObj = New-Object system.collections.arraylist $_.split('') | Foreach-Object -Process { diff --git a/PSApps/AdminTools/.gitignore b/PSApps/AdminTools/.gitignore new file mode 100644 index 0000000..6d4ced6 --- /dev/null +++ b/PSApps/AdminTools/.gitignore @@ -0,0 +1,7 @@ +*.TempPoint.* +*.Export.* +*.psprojs +*.RestorePoint.* +*.Run.ps1 +*.Package.ps1 +CustomMenu.inf \ No newline at end of file diff --git a/PSApps/AdminTools/AdminTools.psproj b/PSApps/AdminTools/AdminTools.psproj new file mode 100644 index 0000000..89c33ea --- /dev/null +++ b/PSApps/AdminTools/AdminTools.psproj @@ -0,0 +1,13 @@ + + 2.1 + 68045061-8d0e-4d53-9174-9e26bdcadc2b + 0 + + + Startup.pss + MainForm.psf + Globals.ps1 + ChildForm.psf + .gitignore + + \ No newline at end of file diff --git a/PSApps/AdminTools/ChildForm.psf b/PSApps/AdminTools/ChildForm.psf new file mode 100644 index 0000000..afd4537 --- /dev/null +++ b/PSApps/AdminTools/ChildForm.psf @@ -0,0 +1,161 @@ + + bea9cc3b-f121-40e9-901e-87e34be96ecb + iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAARnQU1BAACx +jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAB4iSURBVHhe7d3Xc57nfedhTw6yp5ujHG+yf0N2 +9mQzk8lM7PFmE2dndzZjJ7EjxZsoUbMcSZSsSLYUy46aFXXLalRhJ0WwgSQAovcOkCgs6AB7lWWn +bH573w8JCrJoi5bpSNR9fWauAQG8ePACOri/7wuQ+owkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk +SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk +SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk +SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk +SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk +SZIkSZIkSZIkSZIkSZIkSZL06enVX/mVX+n+z7/5m9233Xpb96pV93bfddcqAOC6cU/3N+79Rvf/ ++P3Pd/+HX/3V7nS2Zz+7dPjv/+xnPxs/eG1NdI9Oxfjs6TgwfRIAuE6MzZxKTsa+9r64/favxa/9 +2n+MS8f8T+83f+M3ul989a0YOHIqGgenor7vYDQAANeVfH53ji1G1+Bk/MEf/sGHD4Bbb72tu3tk +KpqHpqNp4DAAcJ1q7D8Ug0dOxutvrv/wAXDvPd/oPrx4PvYNHInmQQDgetWYRsDIzJlYt2Hrhw+A +e1bd031o4Ww0DU5FyxAAXJ9aR6ajbXQm2kaugXSda37NJF+z7Vpd89I1Vn4P8ggYTQNgzbrNHz4A +VuUBsHiu+hFA6/D7tY3OXTJbvWwdna+0XdI6MvuBjwGAf2/t6Zxq6J6Mt2raYvWmpli9ufkjey19 +/Nt1femaM1HfPRFvbW39ha+ZP35r/UB1zbrO8Xjz7ZZrcj9r9g1WI2D5+5BHwP7Zs1c/AA6nAdAy +vHJVpAM/LZSWnpFo6R5KhtOf90dT11A0dvRHY+dgNHePROvAZDUMLn8cAHwMusbm06HaGjv29Udz +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 +gQwAACiQAQAABTIAAKBABgAAFMgAAIACGQAAUCADAAAKZAAAQIEMAAAokAEAAAUyAACgQAYAABTI +AACAAhkAAFAgAwAACmQAAECBDAAAKJABAAAFMgAAoEAGAAAUyAAAgAIZAABQIAMAAApkAABAgQwA +ACiQAQAABTIAAKBABgAAFMgAAIACGQAAUCADAAAKZAAAQIEMAAAokAEAAAUyAACgQAYAABTIAACA +AhkAAFAgAwAACmQAAECBDAAAKJABAAAFMgAAoEAGAAAUyAAAgAIZAABQIAMAAApkAABAgQwAACiQ +AQAABTIAAKBABgAAFMgAAIACGQAAUCADAAAKZAAAQIEMAAAokAEAAAUyAACgQAYAABTIAACAAhkA +AFAgAwAACmQAAECBDAAAKJABAAAFMgAAoEAGAAAUyAAAgAIZAABQIAMAAApkAABAgQwAACiQAQAA +BTIAAKBABgAAFMgAAIACGQAAUCADAAAKZAAAQIEMAAAokAEAAAUyAACgQAYAABTIAACAAhkAAFAg +AwAACmQAAECBDAAAKJABAAAFMgAAoEAGAAAUyAAAgAIZAABQIAMAAApkAABAgQwAACiQAQAABTIA +AKBABgAAFMgAAIACGQAAUCADAAAKZAAAQIEMAAAokAEAAAUyAACgQAYAABTIAACAAhkAAFAgAwAA +CmQAAECBDAAAKJABAAAFMgAAoEAGAAAUyAAAgAIZAABQIAMAAApkAABAgQwAACiQAQAABTIAAKBA +BgAAFMgAAIACGQAAUCADAAAKZAAAQIEMAAAokAEAAAUyAACgQAYAABTIAACAAhkAAFAgAwAACmQA +AECBDAAAKJABAAAFMgAAoEAGAAAUyAAAgAIZAABQIAMAAApkAABAgQwAACiQAQAABTIAAKBABgAA +FMgAAIACGQAAUCADAAAKZAAAQIEMAAAokAEAAAUyAACgQAYAABTIAACAAhkAAFAgAwAACmQAAECB +DAAAKJABAAAFMgAAoEAGAAAUyAAAgAIZAABQIAMAAApkAABAgQwAACiQAQAABTIAAKBABgAAFMgA +AIACGQAAUCADAAAKZAAAQIEMAAAokAEAAAUyAACgQAYAABTIAACAAhkAAFAgAwAACmQAAECBDAAA +KJABAAAFMgAAoEAGAAAUyAAAgAIZAABQIAMAAApkAABAgQwAACiQAQAABTIAAKBABgAAFMgAAIAC +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 +AAB8PPKj3vyId3x8vPoxwPXi+PHj1X1f+XXkp+Gvp68j//PL+RmHlV/HSgYAAL9U+dFzfjSdH4le +D/J9zU/5fxq+jp92+GcGAAAUyAAAgAIZAABQIAMAAApkAABAga7pADh1Jv9jCRcvCgB8cuXz+poN +gMPpQkeOJvklAPDJlc7riYWLh/8vPAAOpBWRlwQA8Ml3+fz+KAPgQBoAy+sBALj+7E+uegCsWnVP +77v/FrF4IUkfBABcnxaSdyNiS83ODx8AN9xw4+DmrTti7fot1WIAAK5fW2p2xEN///CHDwBJkiRJ +kiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ +kiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ +kiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ +kiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ +kiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpE9lnPvP/AW4rgZqR25UH +AAAAAElFTkSuQmCC +
1XaAR1o2BggAACODCAAAAAAABADNk11v2jAUhu8n7T9YvthVxEeBULRgqaRDmmgHIoxdTk5yBl4dH2Q7W7Nf +P4eA1Ba2pJX2oaCIJOfxeX3yJJjHXyGxhr1+RUhQXRBb7GBMo8JYyFqfhErxu2lNUWfV2SPnHnlk +DdoIVON+q1MeHglzaXMNYwW51Vx6ZJHHUiQzKFZ4B2ocD4d8kAz87qjXh87liBLFM9f5i1vvKs2E +WiFKQ0myFTLVDqAhKqvLe/u8LvFC4w60LQ7kVW4xSriEa5GBKtO4Ut8j3V7QPpbWobeYAmVT16mW +CaUAZSPxwwGXnQuP9Ed+LXTL9UYoyvquvPrVIh/cmbLHY6mFIsu1XaAR1o2BstAlBb3gbo71G1vB +vaVs34z8otu7b26hQ/kN8vRpvs/lzaC9Lzsy9X5NcmtR/XHD4n2b+ex3bp1RRCVb1JRN0NHuM1iK +zfZ0lqfcteASN0swLi1l81kD5AYTXr03v1cq4ncbQJUmx701ACpzhwOPXJx+IGes4PF7lcI9ZU3S +VA694dnubaMwHw2EmO3ctmMJJbwE10wLtaFspXNotsRamJzLyBYSJjy5C1GWb+wsH7QrH/9TO0Ou +EpB/x9CQ5wbMmkuRHrSbcmmajPyx21XmZ/k97A5e4nfjTi92vPM8xxsH+reeP7g4/jXsJ5sO5XgG +CAAA
+ + 0 + +
\ No newline at end of file diff --git a/PSApps/AdminTools/Globals.ps1 b/PSApps/AdminTools/Globals.ps1 new file mode 100644 index 0000000..bcf59ed --- /dev/null +++ b/PSApps/AdminTools/Globals.ps1 @@ -0,0 +1,34 @@ +#-------------------------------------------- +# Declare Global Variables and Functions here +#-------------------------------------------- + + +#Sample function that provides the location of the script +function Get-ScriptDirectory +{ +<# + .SYNOPSIS + Get-ScriptDirectory returns the proper location of the script. + + .OUTPUTS + System.String + + .NOTES + Returns the correct path within a packaged executable. +#> + [OutputType([string])] + param () + if ($null -ne $hostinvocation) + { + Split-Path $hostinvocation.MyCommand.path + } + else + { + Split-Path $script:MyInvocation.MyCommand.Path + } +} + +#Sample variable that provides the location of the script +[string]$ScriptDirectory = Get-ScriptDirectory + + diff --git a/PSApps/AdminTools/MainForm.psf b/PSApps/AdminTools/MainForm.psf new file mode 100644 index 0000000..fe8ca13 --- /dev/null +++ b/PSApps/AdminTools/MainForm.psf @@ -0,0 +1,399 @@ + + e53b79ec-8f1e-4f02-944d-aeefaba53ab2 + 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 +lP0AAAAASUVORK5CYII= +
pKZs1pDDXwUAACODCAAAAAAABAC1lEFP4zAQhe9I+x8sn6O22ba0lVpLSwAJLYWKFPaIHGcEpo6nsp2F8Otx +kkYgmlVyWcWyYvk9z8vkS5a3yQsIZ9mPE0KW9YK4Yg8rGhfWQTb4I3WKr3ZwiSar54C0bQXkAYyV +qFeTwai8AhLlyuUGVhpyZ7gKyCZPlBS/odjiDvQqmc34VExPw8V4AqP5ghLNM195zaUuz6REPEuV +Gi+lEWpnUFlaJfVZNwb3YFxx8PzKHcaCKziXGegyh5fOAxLOlsNG2mVdYwqUXfpKnZ5ISdAulu/e +MJ4vAjKezDtNa26epKZsGpDD6LTc+JmypiGd8thx4zZopfMNoCzyGcHEwgDoTu8W3lxdirTXuvjr +jzuIr5Gnn7key+VyWAkadTdLZ7lzqP87TUlVJuJKRSVNXWC18KHFMxrKblDDUVeO5dcoeN3+8KcH +Izwd9TA1aEwCchg9TDUcLc/Xw1ujG45Dj26fgFueXOkU3ijrpa5YKjORKlQ7Uce+ewsRZnvfv0RB +ecgd+KJG6ifKtibv035/xIO0OVexKxSccbGLUJWv71/+r1j7z1rsWlv6WG19Y3xYQ17/PD8Xza1l +H1hxOChfBQAA
+ + 0 + +
\ No newline at end of file diff --git a/PSApps/AdminTools/Startup.pss b/PSApps/AdminTools/Startup.pss new file mode 100644 index 0000000..2dbbd9f --- /dev/null +++ b/PSApps/AdminTools/Startup.pss @@ -0,0 +1,39 @@ + + + + Param ([String]$Commandline) + + #-------------------------------------------------------------------------- + #TODO: Add initialization script here (Load modules and check requirements) + + + #-------------------------------------------------------------------------- + + if((Show-MainForm_psf) -eq 'OK') + { + + } + + $script:ExitCode = 0 #Set the exit code for the Packager +} + + +]]> + \ No newline at end of file From b7f3a4d462a37024177aa763d895f984ef43220f Mon Sep 17 00:00:00 2001 From: Nigel Tatschner Date: Mon, 1 Jan 2024 16:35:29 +0000 Subject: [PATCH 4/4] uploading stuff --- Modules/.gitignore | 2 + Modules/.psd1 | Bin 0 -> 7882 bytes Modules/.psm1 | 33 +++++++ Modules/Colors.ps1 | 21 +++++ Modules/Config.ps1 | 32 +++++++ Modules/README.MD | 5 +- .../Public/New-NTModuleTemplate.ps1 | 82 +++++++++++++----- Modules/Tatux.Win.Admin/.gitignore | 2 + Modules/Tatux.Win.Admin/Classes/README.md | 1 + Modules/Tatux.Win.Admin/Classes/Taskbar.cs | 33 +++++++ Modules/Tatux.Win.Admin/Colors.ps1 | 21 +++++ Modules/Tatux.Win.Admin/Config.ps1 | 32 +++++++ Modules/Tatux.Win.Admin/Private/README.md | 1 + .../Tatux.Win.Admin/Private/Tests/README.md | 1 + Modules/Tatux.Win.Admin/Public/README.md | 1 + .../Public/Test-WindowsTaskbar.ps1 | 27 ++++++ .../Tatux.Win.Admin/Public/Tests/README.md | 1 + Modules/Tatux.Win.Admin/README.md | 4 + Modules/Tatux.Win.Admin/Tatux.Win.Admin.psd1 | Bin 0 -> 7938 bytes Modules/Tatux.Win.Admin/Tatux.Win.Admin.psm1 | 33 +++++++ Scripts/Copy-StartUpItems.ps1 | 0 Scripts/FirstLogonScript.bat | 0 Scripts/TestStartBarAsSystem.ps1 | 19 ++++ 23 files changed, 326 insertions(+), 25 deletions(-) create mode 100644 Modules/.gitignore create mode 100644 Modules/.psd1 create mode 100644 Modules/.psm1 create mode 100644 Modules/Colors.ps1 create mode 100644 Modules/Config.ps1 create mode 100644 Modules/Tatux.Win.Admin/.gitignore create mode 100644 Modules/Tatux.Win.Admin/Classes/README.md create mode 100644 Modules/Tatux.Win.Admin/Classes/Taskbar.cs create mode 100644 Modules/Tatux.Win.Admin/Colors.ps1 create mode 100644 Modules/Tatux.Win.Admin/Config.ps1 create mode 100644 Modules/Tatux.Win.Admin/Private/README.md create mode 100644 Modules/Tatux.Win.Admin/Private/Tests/README.md create mode 100644 Modules/Tatux.Win.Admin/Public/README.md create mode 100644 Modules/Tatux.Win.Admin/Public/Test-WindowsTaskbar.ps1 create mode 100644 Modules/Tatux.Win.Admin/Public/Tests/README.md create mode 100644 Modules/Tatux.Win.Admin/README.md create mode 100644 Modules/Tatux.Win.Admin/Tatux.Win.Admin.psd1 create mode 100644 Modules/Tatux.Win.Admin/Tatux.Win.Admin.psm1 create mode 100644 Scripts/Copy-StartUpItems.ps1 create mode 100644 Scripts/FirstLogonScript.bat create mode 100644 Scripts/TestStartBarAsSystem.ps1 diff --git a/Modules/.gitignore b/Modules/.gitignore new file mode 100644 index 0000000..b9ee499 --- /dev/null +++ b/Modules/.gitignore @@ -0,0 +1,2 @@ +Config.psd1 +*git-ignore* \ No newline at end of file diff --git a/Modules/.psd1 b/Modules/.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..bb100067cf5a8696f45861456275a76619017a6d GIT binary patch literal 7882 zcmeI1Yj0CW5Qg`2rTzy?`H)bRP$*QiQYEZhAX1iE60BTiLk#jD)JNwRkX3t-LZiFwx7hxl`!t-zzdf_6BLtjsm&>%|3KFV;b8#<6rO}X;v1)StbOL%eHM9{WV{+*ry89K(_C2LzsTi4V}TI14m)UTr)7ora5E&VQp>@>b@ z>D{2TW5R5^6?Z7pvixM_-w;%56_r0Dvx_hYq-SAjl4=Vb z7|eoJ=>tspY{RwMBXYeYIZq?^w(DCVn+n-_7;+jf#PLMyO*5NIpS%d~^yXL;$B{qR zcNNV{IPj{WWI&7{QkYjj6-}kM(X1;ll_{BYwxpLkqTxP%T?Es}36H=!XQF*3>Sm=L_40_2+i26C#(U9s zTk;U_m+|F1JlEd%%tR*!)Vo|uJ=B6)O% z|8Fbn?tNkYWvwC1G4)MRD}*a?T>C`QpFDekWG-hZF0jgxg``ciVBMk8ioiPWuBcGQ|?BgF6vy+LMM z(jW5dhp+YYi?aQ9@vbcy_H_U77SeP3s3K`M;;4@$DQ95Q*Z~=q`jU!?JL*Afo*E2Z zy=EgDSS{t&GnDn7X+C~ov7LN{tftXkEMwzWx;CZI*cPtwbzmG6thGzlfeUg zQUw<4jcwIySnXImZAR%M!Pd&Ze7*VLW~sJpM+@kSJL=Mrkgb*?^65zH<{uv`i4EZ| zOQRl<%OtOi^RC6a5IERU44R3T`_VR&Rbb^Q4qz4Z4X%IcUGh3nb2CbU{QjwJAVtR_ z{)Hm}3zFdOh(IyCX^xb<97=Lw;t!XkMokN9hgFD19@svGr!1M_O0zhwo+G zan*7>zT)+cr_4pYPwmGHnQC~82Ut;GeUC>_G>D~AN8>%!E|Xm0RR#8Eu^1lb%lCGM zLKb2!l{WH&Q}1?Lsn?THGKrk^XXASU6tR^hluTbIR|1$$TzZ4}^#j9}df z)TzF#kM?r|tDY=35;Z^vSJV*KNyxmsDou2?mr2s{+E=BHYe(pMOOF26L0JdgYo%lI z&!xDo>|aM~;{?l2Yi=ulys%1ZT@-C;9}M*6w?**Z^+M}iR!PS!AeZ90vfovgzaw9# zTA)Iv7PflXYrdOBLyyP1qSlQyPfoQSSM@CLFh*J;q~#K;SMu{%Y=zUtt~yBTdx)0x zXRs+hIl^L=NW0bNiZq_1DQ5TEBiWC!zpws`>;ljAD5#l6v75En-xJrIv$>`~K%e8! zo*O=A{>{5XG98%(ZK3y;bVE-8O3U$}koBJ+_5YB6IZ57e!OC8;vO$`%6?@Bd?e9%6+OaFt<&k7ukh&Lan*qwGAEwCx)MZ$|M8ja#Xo30mKP zMvA%HV$OBl3~}eDWduPcbQ}1xotE;{jDx6)A8{&l5PJ?gg}R&da4mgb!#frT&MN_yDOIa#1d{Ql(g28l)tRfTaCue4%der8a~_RsMS0_nG6v z?Ch?MAw;dJ3W3+VvuED(p8N3EpKIak@Ksm~MR*y;p&QP_Y3S+OFto!c3_@SuX5mbC z`g%T%Ps;1o!;w~=>AeqOGyJSKM*3_?(lB1H&*l3rKT6(6zti|uPwR?s96pBc_4!I~ zoaou9u1)GJbi%Lm^(JANoUv9S=YDt)?#=%`)aS$SsDuIu&%z(^j!Qe#K2z;JiJA^G zCQR$&s7+g|K5B=2MPJX1wYIpL>Ftj0z>4X2p>Jo>qlkY8T2beBGvYbWyJM}&ZSjNF zug0_M^ENU()4p(0==WThkK^4!_xcqq$)bj%ynj`ep?M%H-xn%&^j#0N%S1mg=DNQQ zhhbM%h5D$M7bYT-WnS*b>4mN%&4bccVAm507>AC_Is;J=N8gt~%o5 zuI@k4>ZjVLt7m=Pd#op06{cE32L|)4W%dA5zS?jtkCogmiRV$&-gbQ-Iq9y5A(!z= zIu7-|S*Glph3q{R@95|DuA`X<2k~|y4#+KJ7>gIAVyTpG7TXF;RY}IqhB&_?86N#t z<(5sYZ3#7*C*dMar^17OO#^&&<@LEXJMnqS9v*SYrm)nHUfH?iq^+HZ2)uJ5*<(pJ zFZFzw=Zf4%7wu`fmt(h3gn++_FW2Fv_9kYALOB#7G@a_LW?d}D<2M&tQz&A&;*CRD zlbC}=tauXTqCYGWk%M@(ijHdwBsXWHT%Y8fxfNDJPE=aOyFJv;=Q0yAvsI4!OW5H{ zYO{(hR?~@9_$bU{Gva?!{lKpJfFkVaiRGIMJ)MSk*Y+sl`{**~6LI*f`y`%Dy`oa! z(eJez@rj>$*FzR!MYFeCl)aM_G7{cju6R`3ktBYUPF^c_bni?W_Vl-|-|aE$xI5Z! zs2}SGPNgC7d9F`7E+Uk=NzS&sz7e*=i*OLLXkv=1tD^Vc$F*s)3a78d1Kk@r6Hlby zrRSpyH6I~|pX&~sZODG`*$dz5+b^*T;Ho7KyXpfT-GDv!k2;dpLLAMxB-IRj8b6@I z(s|M`aYa9f&(njUtM_bF1M8*SdrsuNW34AHEVomy;A#~8#VR&&Ma_UUd%r9jsVDKt zqTcI3c*<3xT*=S@J?R3={l=#HHN5szI;}@Lz+kcTCx72!aJ|x7wxS30q#b?fK**M} z2tRFE-QweOnOGD4DjUs+oRhpW&gU7QPtagPIcOqX9z@?vUV)dVJb+g)H@N*f(em`? zQ?ZO3>icc`K+29~{4-_lvGQ&?GLtXldLJprPNE*oI)9KoPv@F5D_8{Nw!4U#9__E^ zz1Yn6zYgZT7%|M-#NsWkHhy1L8r+J@Ne#&fsMVYAK z#@;vYJkWd9Y586@JJ&tO^D9yBc&b`7$JAb|kg10Ux9Qu{*@tIPEQqJlM-x5uDU%A} zT?PJUxfmU%^ZR!8LKR{yoi_ZTsZYCwI&N}aSG*9pT}grIk*=z5kdug9>u@}xZOY;_ zgFS49HVMQw6~U$xq|<%b9PQ@@);(EmBx`^Ut>_`HV#uPr&L+0n&6u>h_DyBt+7`O* zT%-SOP_;qlN_LF@oW)hSe;d7xvn@NVxheldVO`d$D45j2z+8S)1pnPAwAp1DJLUm7 zi>q?KqbYw|u}-%@hfFVQ{qoJSq37crN$bR(Czslct9};vB4%1Lq}38wIMuguEx}hf zZR}`*w7G|D*?c;i>XRcZSBbP+bFE0vb2R1Zesd&yG57a0pHW@VxfumL(;!Z>mixQX znsYX{6bP7e{JYnNGH174fAi^(N=IeETG+jiZI~%QX*C|SoC)vfj$vnxnW?h!&9YG0 zhVo2Y}ITBp-D zf5ShQW5a9BJ303}7D7Kis-t8Q9Eabuj=pFyb2i`jy3fN&AIS7#v1GX#9OfH#%Cl@1 zUyO2pF7rD0m}BWbts-$^LN+4nq^`f-B`>n)Vrh8XdZ|}*TYl1g?71se$oIBu9+&l; z!v6d&db^xiQx;e(2L#U}6BGS^X%sts^ZorxOwGOxil(=T8{Vzz&05YQ`=PDsd@8o> ze+=9isJ~9rho1@B+<-;OlZ;JTS4}hIouB3z1WuSXh-Eu1<=bK$WL@HjQ=xrjWuKw$ iW;0x&|Edukj^DhquI08Y%L%7xQ+}h)(WlG*BmNB@;|_EH literal 0 HcmV?d00001 diff --git a/Modules/Tatux.Win.Admin/Tatux.Win.Admin.psm1 b/Modules/Tatux.Win.Admin/Tatux.Win.Admin.psm1 new file mode 100644 index 0000000..c7d149f --- /dev/null +++ b/Modules/Tatux.Win.Admin/Tatux.Win.Admin.psm1 @@ -0,0 +1,33 @@ +#region get public and private function definition files. +$Public = @( + Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -Exclude "*.Tests.ps1" -ErrorAction SilentlyContinue +) +$Private = @( + Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -Exclude "*.Tests.ps1" -ErrorAction SilentlyContinue +) +#endregion + +#region source the files +foreach ($Function in @($Public + $Private)) { + $FunctionPath = $Function.fullname + try { + . $FunctionPath # dot source function + } catch { + Write-Error -Message "Failed to import function at $($FunctionPath): $_" + } +} +#endregion + +#region read in or create an initial config file and variable +#. "$PSScriptRoot\Config.ps1" # uncomment to source config parsing logic +#endregion + +#region set variables visible to the module and its functions only +$Date = Get-Date -UFormat "%Y.%m.%d" +$Time = Get-Date -UFormat "%H:%M:%S" +. "$PSScriptRoot\Colors.ps1" +#endregion + +#region export Public functions ($Public.BaseName) for WIP modules +Export-ModuleMember -Function $Public.Basename +#endregion diff --git a/Scripts/Copy-StartUpItems.ps1 b/Scripts/Copy-StartUpItems.ps1 new file mode 100644 index 0000000..e69de29 diff --git a/Scripts/FirstLogonScript.bat b/Scripts/FirstLogonScript.bat new file mode 100644 index 0000000..e69de29 diff --git a/Scripts/TestStartBarAsSystem.ps1 b/Scripts/TestStartBarAsSystem.ps1 new file mode 100644 index 0000000..4a29719 --- /dev/null +++ b/Scripts/TestStartBarAsSystem.ps1 @@ -0,0 +1,19 @@ +# Using the Tatux.Win.Admin module and the Test-WindowsTaskbar function, we can determine if the taskbar is visible as a Scheduled task running as system +Import-Module 'D:\Nerd Stuff\Dev Stuff\Git_Repos\Get-PowerShell\Modules\Tatux.Win.Admin\Tatux.Win.Admin.psm1' + +Start-Transcript -Path 'D:\Nerd Stuff\Dev Stuff\TestStartBarAsSystem.txt' -Append +$count = 0 +$EndTime = (Get-Date).AddSeconds(30) +while ((Get-Date) -lt $EndTime) { + $count++ + $taskbarStatus = Test-WindowsTaskbar + if ($taskbarStatus) { + Write-Host "[$($count)]Taskbar is visible." + } + else { + Write-Host "[$($count)]Taskbar is not visible." + } + Start-Sleep -Seconds 1 + +} +Stop-Transcript \ No newline at end of file