Internal/Write-Log.ps1
function Write-Log { <# .DESCRIPTION Write text to a logfile with the current time. .PARAMETER Message Specifies the message to log. .PARAMETER Type Type of Message ("Info","Debug","Warn","Error"). .PARAMETER OutputMode Specifies where the log should be written. Possible values are "Console","LogFile" and "Both". .PARAMETER Exception You can write an exception object to the log file if there was an exception. .EXAMPLE Write-Log -Message "Start process XY" .NOTES This function should be used to log information to console or log file. #> param( [Parameter(Mandatory=$true,Position=1)] [String] $Message , [Parameter(Mandatory=$false)] [ValidateSet("Info","Debug","Warn","Error")] [String] $Type = "Debug" , [Parameter(Mandatory=$false)] [Exception] $Exception ) $LogFilePathFolder = Join-Path -Path $Env:TEMP -ChildPath $ScriptName $OutputMode = "Console" # "Console-LogFile","Console-WindowsEvent","LogFile-WindowsEvent","Console","LogFile","WindowsEvent","All" $DefaultLogWindowsEventSource = "WPNinjas.AADDeviceAuthentication" $DefaultLogWindowsEventLog = "CustomPS" $LogFilePath = "$LogFilePathFolder\WPNinjas.AADDeviceAuthentication_$(Get-Date -uformat %Y%m%d%H%M).log" $DateTimeString = Get-Date -Format "yyyy-MM-dd HH:mm:sszz" $Output = ($DateTimeString + "`t" + $Type.ToUpper() + "`t" + $Message) if($Exception){ $ExceptionString = ("[" + $Exception.GetType().FullName + "] " + $Exception.Message) $Output = "$Output - $ExceptionString" } if ($OutputMode -eq "Console" -OR $OutputMode -eq "Console-LogFile" -OR $OutputMode -eq "Console-WindowsEvent" -OR $OutputMode -eq "All") { if($Type -eq "Error"){ Write-Error $output } elseif($Type -eq "Warn"){ Write-Warning $output } elseif($Type -eq "Debug"){ Write-Debug $output } else{ Write-Verbose $output -Verbose } } if ($OutputMode -eq "LogFile" -OR $OutputMode -eq "Console-LogFile" -OR $OutputMode -eq "LogFile-WindowsEvent" -OR $OutputMode -eq "All") { try { Add-Content $LogFilePath -Value $Output -ErrorAction Stop } catch { exit 99001 } } if ($OutputMode -eq "Console-WindowsEvent" -OR $OutputMode -eq "WindowsEvent" -OR $OutputMode -eq "LogFile-WindowsEvent" -OR $OutputMode -eq "All") { try { New-EventLog -LogName $DefaultLogWindowsEventLog -Source $DefaultLogWindowsEventSource -ErrorAction SilentlyContinue switch ($Type) { "Warn" { $EventType = "Warning" break } "Error" { $EventType = "Error" break } default { $EventType = "Information" } } Write-EventLog -LogName $DefaultLogWindowsEventLog -Source $DefaultLogWindowsEventSource -EntryType $EventType -EventId 1 -Message $Output -ErrorAction Stop } catch { exit 99002 } } } # SIG # Begin signature block # MIINHQYJKoZIhvcNAQcCoIINDjCCDQoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU+EbwG7+6+de2UQvMvRKN5Mtr # kWagggpfMIIFJzCCBA+gAwIBAgIQAe7h7vbEgioKlYCaFuZimDANBgkqhkiG9w0B # AQsFADByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD # VQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFz # c3VyZWQgSUQgQ29kZSBTaWduaW5nIENBMB4XDTE5MDMxNDAwMDAwMFoXDTIyMDYx # MTEyMDAwMFowZDELMAkGA1UEBhMCQ0gxEjAQBgNVBAgTCVNvbG90aHVybjERMA8G # A1UEBwwIRMOkbmlrZW4xFjAUBgNVBAoTDWJhc2VWSVNJT04gQUcxFjAUBgNVBAMT # DWJhc2VWSVNJT04gQUcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDH # zNWZdg+JlRI+8PawG6KlQ9xOiR39xlDsNHDzz/eKHHOHQnqiE3FTBOrNp4VXJ33/ # uvBT7SQdoASliAfMy+Gw9UmQYC8sEXtxfyr5m1C8PYKeUJPJy3lTi7V7MihCHzTM # zFnjMUzLMZra/ddBtJJ6QZ7h0ICVTaSheAYEqSCWfBUCZb2Ly5tMu9x14/2ElCbe # 27LapyfUOrPp4Kf3p9acpF4c4I++rusjynP5HWUMH87C49hUN8u0nFrez7NX3r5I # fCQZiXPrYuqClQzAKzhI+yHV5/a4z5Hk0mpBaKm9XHjUZzGMjDhGn5TBcMcpU9jU # 5uHGExeuZh7WRJv/yu0BAgMBAAGjggHFMIIBwTAfBgNVHSMEGDAWgBRaxLl7Kgqj # pepxA8Bg+S32ZXUOWDAdBgNVHQ4EFgQUz/8DWF7jz5jEsVTH+84/xw+E0G0wDgYD # VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGA1UdHwRwMG4wNaAz # oDGGL2h0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEu # Y3JsMDWgM6Axhi9odHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVk # LWNzLWcxLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG/WwDATAqMCgGCCsGAQUFBwIB # FhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAgGBmeBDAEEATCBhAYIKwYB # BQUHAQEEeDB2MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20w # TgYIKwYBBQUHMAKGQmh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2Vy # dFNIQTJBc3N1cmVkSURDb2RlU2lnbmluZ0NBLmNydDAMBgNVHRMBAf8EAjAAMA0G # CSqGSIb3DQEBCwUAA4IBAQCVfUwoaGF5nO/90HPKfRIHBeCPunJy0gaUDn2Bot39 # 2wXAE0z5XnCYq7rnuAMSKTcLRsGZ6p3hsQFk+AvfMowUGwqu57dJNxxdS43kzXRM # TcenFRheEvR73ErKKhTZ0LjKc45xa3nSD9Cz7y0KLmLRCnL2CQ5sdAW/+9mp6QJV # ImNFswRerXGFP/3TQ6osP9LkKhTLis1EykoBpX/my7Hm8/FzSHCT667ot3XbooNt # KDkdletGKj5mYSw0twlzbyl2W6P4m9Ns3p3VQBWAyKCmTrZjTmpQaFsJUEWFpsEF # rkiUW0BZda4ncrlUa05QoFiY+OeO46q+P3MZhS1foa2XMIIFMDCCBBigAwIBAgIQ # BAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJVUzEV # MBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29t # MSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMTMxMDIy # MTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMM # RGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQD # EyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29kZSBTaWduaW5nIENBMIIBIjAN # BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+NOzHH8OEa9ndwfTCzFJGc/Q+0WZ # sTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ1DcZ17aq8JyGpdglrA55KDp+6dFn # 08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0sSgmuyRpwsJS8hRniolF1C2ho+mI # LCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6scKKrzn/pfMuSoeU7MRzP6vIK5Fe7 # SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4TzrGdOtcT3jNEgJSPrCGQ+UpbB8g8S # 9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg0A9kczyen6Yzqf0Z3yWT0QIDAQAB # o4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwEwYD # VR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhho # dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNl # cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwgYEG # A1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2Vy # dEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0 # LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwTwYDVR0gBEgwRjA4Bgpg # hkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNv # bS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYEFFrEuXsqCqOl6nEDwGD5LfZldQ5Y # MB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgPMA0GCSqGSIb3DQEBCwUA # A4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06GsTvMGHXfgtg/cM9D8Svi/3vKt8g # VTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5jDhNLrddfRHnzNhQGivecRk5c/5Cx # GwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgCPC6Ro8AlEeKcFEehemhor5unXCBc # 2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIysjaKJAL+L3J+HNdJRZboWR3p+nRk # a7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4GbT8aTEAb8B4H6i9r5gkn3Ym6hU/oS # lBiFLpKR6mhsRDKyZqHnGKSaZFHvMYICKDCCAiQCAQEwgYYwcjELMAkGA1UEBhMC # VVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0 # LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIENvZGUgU2ln # bmluZyBDQQIQAe7h7vbEgioKlYCaFuZimDAJBgUrDgMCGgUAoHgwGAYKKwYBBAGC # NwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUZnoVA9ot # 3sGu9w590LIwSURRT68wDQYJKoZIhvcNAQEBBQAEggEATvpFBDzZcpyJQRiCpkTJ # Ui9d1k8ymy+Wz0iiyHRfhAM96qa1M8qkNI86F3MjKxkGBq2wYrxOMkrPDVo1ItmL # OgQPS8MfzoKE40v21hmreffDL5AFHlooG6gmQEpku3+rcYh/A1iHeYwSA57q2qmT # ahnbP3z7VQPFHvIg2JVqfecg9om/szaB2Qx9rrc0tQctic7yyhkm+su4OmR+L1O3 # dllbrQF6LFmwTqQp1p7r3NVnGbtADxYTEQfmLswVCpUCVEi5BzLvOrYUriRTaxVA # t9rLBbLyT95OXwuPdj3GxnG3GxYo04Zn/VwuiE+dOZ7crDlf3/66wVHvzc8GnhOJ # IA== # SIG # End signature block |