diff --git a/Tools.ps1 b/Tools.ps1 index 89e02fd..9b167f1 100644 --- a/Tools.ps1 +++ b/Tools.ps1 @@ -479,7 +479,7 @@ Function Create-Shortcut { } # Function to enable or disable a specified log -function Toggle-Log { +Function Toggle-Log { param ( [Parameter(Mandatory = $true)][string]$Name, [Parameter(Mandatory = $true, ParameterSetName = 'Enable')][switch]$Enable, @@ -495,7 +495,7 @@ function Toggle-Log { } # Function to install the PSAtera Powershell module -function Install-PSAteraModule { +Function Install-PSAteraModule { Try { $module = Get-Module -ListAvailable -Name PSAtera If ( (-not $module) -and (IsAdmin) ) { @@ -510,7 +510,7 @@ function Install-PSAteraModule { } # Function to install the MSP360 Powershell module -function Install-MSP360Module { +Function Install-MSP360Module { Try { $module = Get-Module -ListAvailable -Name MSP360 If ( (-not $module) -and (IsAdmin) ) { @@ -526,7 +526,7 @@ function Install-MSP360Module { } # Function to delete a file -function Remove-File ([Parameter(ValueFromPipeline=$true)][string]$path) { +Function Remove-File ([Parameter(ValueFromPipeline=$true)][string]$path) { If ( Test-Path $path ) { If ( !((Get-Item $path) -is [System.IO.DirectoryInfo]) ) { Try { @@ -539,7 +539,7 @@ function Remove-File ([Parameter(ValueFromPipeline=$true)][string]$path) { } # Function to ZIP a file or directory -function Zip-Object { +Function Zip-Object { param( [Parameter(ValueFromPipeline=$true)][string]$path, [Parameter(ValueFromPipeline=$false)][string]$dest @@ -569,7 +569,7 @@ function Zip-Object { } # Function to UNZIP a file or directory -function Unzip-Object ([Parameter(ValueFromPipeline=$true)][string]$path) { +Function Unzip-Object ([Parameter(ValueFromPipeline=$true)][string]$path) { If ( [System.IO.Path]::GetExtension($path) -eq ".zip" ) { $dest = Split-Path -Parent $path LogMsg "Extracting ""${path}"" to ""${dest}""" @@ -583,7 +583,7 @@ function Unzip-Object ([Parameter(ValueFromPipeline=$true)][string]$path) { } # Function to get a copy of the LiquidFiles CLI agent -function Get-LiquidFilesCLI { +Function Get-LiquidFilesCLI { $url = 'https://lfupdate.s3.amazonaws.com/clients/windows_cli/LiquidFilesCLI-2.0.128.zip' $zip_filename = Split-Path -Leaf $url $zip_path = "${Global:ToolsDirectory}\${zip_filename}" @@ -604,13 +604,13 @@ function Get-LiquidFilesCLI { } # Function to determine if an app is running -function IsRunning ([Parameter(ValueFromPipeline=$true)][string]$Name) { +Function IsRunning ([Parameter(ValueFromPipeline=$true)][string]$Name) { $RunningInstances = Get-Process | Where-Object { $_.Name -ilike $Name } If ( $RunningInstances ) { Return $true } Else { Return $false } } # Function to create a local user account -function Create-LocalUser { +Function Create-LocalUser { param( [Parameter(Mandatory=$true)][string]$Username, [Parameter(Mandatory=$true)][string]$Password, @@ -657,12 +657,12 @@ function Create-LocalUser { } # Returns the number of MB a process is consuming -function Get-MemoryUsage ([string]$AppName) { +Function Get-MemoryUsage ([string]$AppName) { [math]::Round((Get-Process -Name $AppName -ErrorAction SilentlyContinue | Measure-Object -Property WorkingSet -Sum).Sum / 1MB) } # Kills a process if it's using more than the specified amount of memory -function Stop-MemoryHog ([string]$AppName,[int]$MemoryLimit) { +Function Stop-MemoryHog ([string]$AppName,[int]$MemoryLimit) { $MemoryUsed = (Get-MemoryUsage -AppName $AppName) If ( $MemoryUsed -gt $MemoryLimit ) { $MemoryDifference = $MemoryUsed - $MemoryLimit @@ -673,7 +673,7 @@ function Stop-MemoryHog ([string]$AppName,[int]$MemoryLimit) { } # Returns a formatted list of the largest or smallest files in a directory -function Get-FileSizes { +Function Get-FileSizes { param( [Parameter(ValueFromPipeline=$true)][string]$Path, [switch]$Recurse, @@ -724,7 +724,7 @@ function Get-FileSizes { } # Function to write text to a file in UTF8 encoding without BOM -function WriteToFile_UTF8NoBOM { +Function WriteToFile_UTF8NoBOM { param( [Parameter(ValueFromPipeline=$false)][string]$FilePath, [Parameter(ValueFromPipeline=$true)][string]$Value @@ -735,7 +735,7 @@ function WriteToFile_UTF8NoBOM { } # Function to enumerate all user profile folders -function EnumUserProfiles { +Function EnumUserProfiles { $ProfilePath = (Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' -Name ProfilesDirectory) $UserProfilePaths = @() ForEach ( $userProfile in (Get-ChildItem -Path $ProfilePath | Where-Object { $_.PSIsContainer }) ) { @@ -745,7 +745,7 @@ function EnumUserProfiles { } # Function to test for the presense of a Registry property -function Test-RegistryProperty { +Function Test-RegistryProperty { param( [Parameter(Mandatory=$true)][string]$Path, [Parameter(Mandatory=$true)][string]$Name @@ -757,5 +757,37 @@ function Test-RegistryProperty { Catch { Return $false } } +# Function to format a quantity of bytes into a denomination +Function Beautify-Bytes { + param( + [int64]$Amount, + [int]$Precision=2, + [string]$Units, + [switch]$WithUnitLabel + ) + Switch ( $Units.ToUpper() ) { + "KB" { $UnitLabel = "KB" ; $Divisor = 1KB } + "MB" { $UnitLabel = "MB" ; $Divisor = 1MB } + "GB" { $UnitLabel = "GB" ; $Divisor = 1GB } + "TB" { $UnitLabel = "TB" ; $Divisor = 1TB } + default { $UnitLabel = "bytes" ; $Divisor = 1 } + } + Switch ( $WithUnitLabel ) { + $true { Return (ZeroPad-Decimal -Amount $([Math]::Round($Amount / $Divisor,$Precision)) -NeededDecimalPlaces $Precision) + "${UnitLabel}" } + $false { Return (ZeroPad-Decimal -Amount $([Math]::Round($Amount / $Divisor,$Precision)) -NeededDecimalPlaces $Precision) } + } +} + +# Function to pad zeros onto the end of a decimal number +Function ZeroPad-Decimal { + param( + $Amount, + $NeededDecimalPlaces + ) + $splitNumbers = $Amount.ToString().Split('.') + $paddedDecimal = $splitNumbers[1].PadRight($NeededDecimalPlaces, '0') + Return $splitNumbers[0] + '.' + $paddedDecimal +} + Setup-MSPDirectories Setup-LogFile \ No newline at end of file