PowerLumber.psm1
Write-Verbose 'Importing from [C:\projects\powerlumber\PowerLumber\private]' # .\PowerLumber\private\Compare-Weekday.ps1 function Compare-Weekday { <# .DESCRIPTION Determine if the day of the week has changed since the last check. .PARAMETER Weekday A valid Day of the week is required. .EXAMPLE Compare-Weekday -Weekday Tuesday .NOTES It will return boolean #> [CmdletBinding()] [OutputType([boolean])] param( $Weekday = $null ) if ($null -eq $Weekday) { # No day was passed in (This is acceptable.) Return $false } else { $CurrentDay = (Get-Date).DayOfWeek if ($CurrentDay -eq $Weekday) { # The days match. $true } else { # The days do not match. $false } } } # .\PowerLumber\private\Get-Timestamp.ps1 #============================================================================================= # ____ _ _ #| _ \ _____ _____ _ __| | _ _ _ __ ___ | |__ ___ _ __ #| |_) / _ \ \ /\ / / _ \ '__| | | | | | '_ ` _ \| '_ \ / _ \ '__| #| __/ (_) \ V V / __/ | | |__| |_| | | | | | | |_) | __/ | #|_| \___/ \_/\_/ \___|_| |_____\__,_|_| |_| |_|_.__/ \___|_| #============================================================================================= function Get-Timestamp { <# .SYNOPSIS Function to create timestamp. .DESCRIPTION Returns the current timestamp. .EXAMPLE $datenow = Get-Timestamp .NOTES No Additional information about the function or script. #> try { return $(get-date).ToString("yyyy-MM-dd HH:mm:ss") } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.ItemName Throw "Get-Timestamp: $ErrorMessage $FailedItem" } } #============================================================================================= # ___ _ _ _ _ _ # |_ _|_ ____ _____ | | _____ / \ _ _| |_ ___ _ __ ___ __ _| |_(_) ___ _ __ # | || '_ \ \ / / _ \| |/ / _ \_____ / _ \| | | | __/ _ \| '_ ` _ \ / _` | __| |/ _ \| '_ \ # | || | | \ V / (_) | < __/_____/ ___ \ |_| | || (_) | | | | | | (_| | |_| | (_) | | | | # |___|_| |_|\_/ \___/|_|\_\___| /_/ \_\__,_|\__\___/|_| |_| |_|\__,_|\__|_|\___/|_| |_| #============================================================================================= # .\PowerLumber\private\Write-Message.ps1 #============================================================================================= # ____ _ _ #| _ \ _____ _____ _ __| | _ _ _ __ ___ | |__ ___ _ __ #| |_) / _ \ \ /\ / / _ \ '__| | | | | | '_ ` _ \| '_ \ / _ \ '__| #| __/ (_) \ V V / __/ | | |__| |_| | | | | | | |_) | __/ | #|_| \___/ \_/\_/ \___|_| |_____\__,_|_| |_| |_|_.__/ \___|_| #============================================================================================= function Write-Message { <# .SYNOPSIS Function to write log files, option to print to console. .DESCRIPTION Writes messages to log file and optional console. .PARAMETER Message Please Specify a message. .PARAMETER Logfile Please Specify a valid logfile. .PARAMETER OutputStyle Please specify an output OutputStyle. .EXAMPLE Write-Message -Message "I love lamp" -Logfile "C:\temp\mylog.log" -OutputStyle noConsole .EXAMPLE Write-Message -Message "I love lamp" -Logfile "C:\temp\mylog.log" -OutputStyle both .EXAMPLE Write-Message -Message "I love lamp" -Logfile "C:\temp\mylog.log" -OutputStyle consoleOnly .EXAMPLE Write-Message -Message "I love lamp" -Logfile "C:\temp\mylog.log" .EXAMPLE Write-Message -Message "I love lamp" -OutputStyle ConsoleOnly .NOTES No Additional information about the function or script. #> [CmdletBinding(DefaultParameterSetName = 'LogFileFalse')] param( [Parameter(Mandatory = $true, ParameterSetName = 'LogFileTrue')] [Parameter(Mandatory = $true, ParameterSetName = 'LogFileFalse')] [string]$Message, [Parameter(Mandatory = $true, ParameterSetName = 'LogFileTrue')] [string]$Logfile, [Parameter(Mandatory = $false, ParameterSetName = 'LogFileTrue')] [Parameter(Mandatory = $true, ParameterSetName = 'LogFileFalse')] [validateset('ConsoleOnly', 'Both', 'noConsole', IgnoreCase = $true)] [string]$OutputStyle ) try { $dateNow = Get-Timestamp switch ($OutputStyle) { ConsoleOnly { Write-Output "" Write-Output "$dateNow $Message" } Both { Write-Output "" Write-Output "$dateNow $Message" if (!(Test-Path $logfile -ErrorAction SilentlyContinue)) { Write-Warning "Logfile does not exist." New-Log -Logfile $Logfile } Write-Output "$dateNow $Message" | Out-File $Logfile -append -encoding ASCII } noConsole { if (!(Test-Path $logfile -ErrorAction SilentlyContinue)) { Write-Warning "Logfile does not exist." New-Log -Logfile $Logfile } Write-Output "$dateNow $Message" | Out-File $Logfile -append -encoding ASCII } default { Write-Output "" Write-Output "$dateNow $Message" if (!(Test-Path $logfile -ErrorAction SilentlyContinue)) { Write-Warning "Logfile does not exist." New-Log -Logfile $Logfile } Write-Output "$dateNow $Message" | Out-File $Logfile -append -encoding ASCII } } } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.ItemName Throw "Write-Message: $ErrorMessage $FailedItem" } } #============================================================================================= # ___ _ _ _ _ _ # |_ _|_ ____ _____ | | _____ / \ _ _| |_ ___ _ __ ___ __ _| |_(_) ___ _ __ # | || '_ \ \ / / _ \| |/ / _ \_____ / _ \| | | | __/ _ \| '_ ` _ \ / _` | __| |/ _ \| '_ \ # | || | | \ V / (_) | < __/_____/ ___ \ |_| | || (_) | | | | | | (_| | |_| | (_) | | | | # |___|_| |_|\_/ \___/|_|\_\___| /_/ \_\__,_|\__\___/|_| |_| |_|\__,_|\__|_|\___/|_| |_| #============================================================================================= Write-Verbose 'Importing from [C:\projects\powerlumber\PowerLumber\public]' # .\PowerLumber\public\Clear-LogDirectory.ps1 #============================================================================================= # ____ _ _ #| _ \ _____ _____ _ __| | _ _ _ __ ___ | |__ ___ _ __ #| |_) / _ \ \ /\ / / _ \ '__| | | | | | '_ ` _ \| '_ \ / _ \ '__| #| __/ (_) \ V V / __/ | | |__| |_| | | | | | | |_) | __/ | #|_| \___/ \_/\_/ \___|_| |_____\__,_|_| |_| |_|_.__/ \___|_| #============================================================================================= function Clear-LogDirectory { <# .SYNOPSIS Clears logs in a directory older than the specified number of days. .DESCRIPTION Clears logs in a directory older than the specified number of days. .PARAMETER Path Please Specify a valid path. .PARAMETER Daysback Please Specify a number of daysback. .EXAMPLE Clear-LogDirectory -Path "c:\temp" -DaysBack 3 .NOTES No Additional information about the function or script. #> param( [cmdletbinding()] [Parameter(Mandatory = $true)] [ValidateScript( {Test-Path $_ })] [string]$Path, [Parameter(Mandatory = $true)] [int]$DaysBack ) try { $DatetoDelete = (Get-Date).AddDays( - $Daysback) if (! (Get-ChildItem $Path)) { Write-Message -Message "Path is not valid" -OutputStyle consoleOnly } else { Get-ChildItem $Path -Recurse | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item -Recurse -Confirm:$false Write-Message -Message "Logs older than $DaysBack have been cleared!" -OutputStyle consoleOnly } } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.ItemName Throw "Clear-LogDirectory: $ErrorMessage $FailedItem" } } #============================================================================================= # ___ _ _ _ _ _ # |_ _|_ ____ _____ | | _____ / \ _ _| |_ ___ _ __ ___ __ _| |_(_) ___ _ __ # | || '_ \ \ / / _ \| |/ / _ \_____ / _ \| | | | __/ _ \| '_ ` _ \ / _` | __| |/ _ \| '_ \ # | || | | \ V / (_) | < __/_____/ ___ \ |_| | || (_) | | | | | | (_| | |_| | (_) | | | | # |___|_| |_|\_/ \___/|_|\_\___| /_/ \_\__,_|\__\___/|_| |_| |_|\__,_|\__|_|\___/|_| |_| #============================================================================================= # .\PowerLumber\public\Invoke-RollLog.ps1 function Invoke-RollLog { <# .DESCRIPTION This function will Roll the log file if it is a new week day. .PARAMETER LogFile A valid file path is required. .PARAMETER Weekday A valid Weekday in datetime format is required. .EXAMPLE Invoke-RollLogs -LogFile "c:\temp\test.log" -Weekday Tuesday .NOTES It's pretty simple. #> [CmdletBinding()] [OutputType([boolean])] param( [Parameter(Mandatory = $true)][string]$Logfile, [Parameter(Mandatory = $true)][string]$Weekday ) try { if (!(Test-Path -Path $Logfile)) { Write-Message -Message "#################### New Log created #####################" -Logfile $logfile -OutputStyle both Throw "LogFile path: $Logfile does not exist." } else { # Determine if its a new day if (Compare-Weekday -Weekday $Script:Weekday) { # The Day of the week has not changed. Return $true } else { # The day of the week has changed. $CurrentTime = Get-Date -Format MMddHHmm $OldLogName = "$currentTime.log" Rename-Item -Path $logfile -NewName $OldLogName -Force -Confirm:$false # Create a new log. Write-Message -Message "#################### New Log created #####################" -Logfile $logfile } } } catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.ItemName Throw "Invoke-RollLog: $ErrorMessage $FailedItem" } } # .\PowerLumber\public\New-Log.ps1 #============================================================================================= # ____ _ _ #| _ \ _____ _____ _ __| | _ _ _ __ ___ | |__ ___ _ __ #| |_) / _ \ \ /\ / / _ \ '__| | | | | | '_ ` _ \| '_ \ / _ \ '__| #| __/ (_) \ V V / __/ | | |__| |_| | | | | | | |_) | __/ | #|_| \___/ \_/\_/ \___|_| |_____\__,_|_| |_| |_|_.__/ \___|_| #============================================================================================= function New-Log { <# .SYNOPSIS Clears logs in a directory older than the specified number of days. .DESCRIPTION Clears logs in a directory older than the specified number of days. .PARAMETER Logfile Please Specify a valid path and file name. .EXAMPLE New-Log -Logfile c:\temp\new.log .NOTES No Additional information about the function or script. #> [CmdletBinding( SupportsShouldProcess = $true )] param( [Parameter(Mandatory = $true)] [string]$Logfile ) try { if ( !(Split-Path -Path $Logfile -ErrorAction SilentlyContinue)) { Write-Message -Message "Creating new Directory." -OutputStyle consoleOnly if ($PSCmdlet.ShouldProcess("Creating new Directory")) {New-Item (Split-Path -Path $Logfile) -ItemType Directory -Force} } Write-Message -Message "Creating new file." -OutputStyle consoleOnly if ($PSCmdlet.ShouldProcess("Creating new File")) {New-Item $logfile -type file -force -value "New file created."} } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.ItemName Throw "New-Log: $ErrorMessage $FailedItem" } } #============================================================================================= # ___ _ _ _ _ _ # |_ _|_ ____ _____ | | _____ / \ _ _| |_ ___ _ __ ___ __ _| |_(_) ___ _ __ # | || '_ \ \ / / _ \| |/ / _ \_____ / _ \| | | | __/ _ \| '_ ` _ \ / _` | __| |/ _ \| '_ \ # | || | | \ V / (_) | < __/_____/ ___ \ |_| | || (_) | | | | | | (_| | |_| | (_) | | | | # |___|_| |_|\_/ \___/|_|\_\___| /_/ \_\__,_|\__\___/|_| |_| |_|\__,_|\__|_|\___/|_| |_| #============================================================================================= # .\PowerLumber\public\Write-Log.ps1 #============================================================================================= # ____ _ _ #| _ \ _____ _____ _ __| | _ _ _ __ ___ | |__ ___ _ __ #| |_) / _ \ \ /\ / / _ \ '__| | | | | | '_ ` _ \| '_ \ / _ \ '__| #| __/ (_) \ V V / __/ | | |__| |_| | | | | | | |_) | __/ | #|_| \___/ \_/\_/ \___|_| |_____\__,_|_| |_| |_|_.__/ \___|_| #============================================================================================= function Write-Log { <# .SYNOPSIS Function to write information to log files, based on a set LogLevel. .DESCRIPTION Writes messages to log file based on a set LogLevel. -LogLevel is the System Wide setting. -MsgType is specific to a message. .PARAMETER Message Please Specify a message. .PARAMETER Logfile Please Specify a valid logfile. .PARAMETER LogLevel Please specify a Running Log Level. .PARAMETER MsgType Please specify a Message Log Level. .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel All -MsgType TRACE .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel TRACE -MsgType TRACE .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel DEBUG -MsgType DEBUG .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel INFO -MsgType INFO .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel WARN -MsgType WARN .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel ERROR -MsgType ERROR .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel FATAL -MsgType FATAL .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel CONSOLEONLY -MsgType CONSOLEONLY .EXAMPLE Write-Log -Message "I love lamp" -Logfile "C:\temp\mylog.log" -LogLevel OFF -MsgType OFF .NOTES No Additional information about the function or script. #> [CmdletBinding(DefaultParameterSetName = 'LogFileFalse')] param( [Parameter(Mandatory = $true, ParameterSetName = 'LogFileTrue')] [Parameter(Mandatory = $true, ParameterSetName = 'LogFileFalse')] [string]$Message, [Parameter(Mandatory = $true, ParameterSetName = 'LogFileTrue')] [string]$Logfile, [Parameter(Mandatory = $true, ParameterSetName = 'LogFileTrue')] [Parameter(Mandatory = $true, ParameterSetName = 'LogFileFalse')] [ValidateSet("ALL", "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "CONSOLEONLY", "OFF")] [string]$LogLevel, [Parameter(Mandatory = $true, ParameterSetName = 'LogFileTrue')] [Parameter(Mandatory = $true, ParameterSetName = 'LogFileFalse')] [ValidateSet("TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "CONSOLEONLY")] [string]$MsgType ) try { switch ($LogLevel) { ALL { $OutPutStyle = "Both" } TRACE { $OutPutStyle = "Both" } OFF { Break } CONSOLEONLY { $OutPutStyle = "ConsoleOnly" } default { if (($LogLevel -eq "DEBUG") -and ($MsgType -ne "TRACE") -and ($MsgType -ne "CONSOLEONLY")) { $OutPutStyle = "Both" } elseif (($LogLevel -eq "INFO") -and ($MsgType -ne "TRACE") -and ($MsgType -ne "DEBUG") -and ($MsgType -ne "CONSOLEONLY")) { $OutPutStyle = "Both" } elseif (($LogLevel -eq "WARN") -and ($MsgType -ne "TRACE") -and ($MsgType -ne "DEBUG") -and ($MsgType -ne "INFO") -and ($MsgType -ne "CONSOLEONLY")) { $OutPutStyle = "Both" } elseif (($LogLevel -eq "ERROR") -and ($MsgType -ne "TRACE") -and ($MsgType -ne "DEBUG") -and ($MsgType -ne "INFO") -and ($MsgType -ne "WARN") -and ($MsgType -ne "CONSOLEONLY")) { $OutPutStyle = "Both" } elseif (($LogLevel -eq "FATAL") -and ($MsgType -ne "TRACE") -and ($MsgType -ne "DEBUG") -and ($MsgType -ne "INFO") -and ($MsgType -ne "WARN") -and ($MsgType -ne "ERROR") -and ($MsgType -ne "CONSOLEONLY")) { $OutPutStyle = "Both" } else { $OutPutStyle = "ConsoleOnly" } } } $Message = $MsgType + ": " + $Message if (($Logfile -eq "") -or ($null -eq $logfile)) { Write-Message -Message $Message -OutputStyle $OutPutStyle } else { Write-Message -Message $Message -Logfile $Logfile -OutputStyle $OutPutStyle } } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.ItemName Throw "Write-Log: $ErrorMessage $FailedItem" } } #============================================================================================= # ___ _ _ _ _ _ # |_ _|_ ____ _____ | | _____ / \ _ _| |_ ___ _ __ ___ __ _| |_(_) ___ _ __ # | || '_ \ \ / / _ \| |/ / _ \_____ / _ \| | | | __/ _ \| '_ ` _ \ / _` | __| |/ _ \| '_ \ # | || | | \ V / (_) | < __/_____/ ___ \ |_| | || (_) | | | | | | (_| | |_| | (_) | | | | # |___|_| |_|\_/ \___/|_|\_\___| /_/ \_\__,_|\__\___/|_| |_| |_|\__,_|\__|_|\___/|_| |_| #============================================================================================= Write-Verbose 'Importing from [C:\projects\powerlumber\PowerLumber\classes]' |