|
<#
.NOTES
#=============================================
# Script : Certificate-Report.ps1
# Created
: ISE 3.0
# Author(s) : Casey.Dedeal
# Date : 07/14/2020 16:22:58
# Org : ETC Solutions
# File Name : Certificate-Report.
# Comments :
# Assumptions :
#==============================================
SYNOPSIS : Certificate-Report.
DESCRIPTION : Getting certificate report
Acknowledgements : Open license
Limitations : None
Known issues : None
Credits : None
.EXAMPLE
.\Certificate-Report.ps1
MAP:
-----------
#(1)_.Add Log Vars
#(2)_.Start transcript
#(3)_.Function-create-ReportFolder
#(4)_.Function write to logs
#(5)_.Function time stamp
#(6)_.Prepare list of computers array here , TXT file has
computernames
#(7)_.Check import file, stop if not found
#(8)_.Function Get Cert Report
#(9)_.Get Content now
#(10)_.Run Array
#(11)_.Start Looping
#(12)_.Stop transcript
#(13)_.Open Report Folder
#>
#(1)_.Add Log Vars
$repname = 'CERTIFICATE-REPORT'
$logout = $repname+'-Log.TXT'
$csvout = $repname+'-Log.CSV'
$repout = $repname+'-DETAILED.CSV'
$traout = $repname+'-Transcript.LOG'
$errout = $repname+'-ERROR.LOG'
$now = (Get-Date -format 'dd-MMM-yyyy-HH-mm-ss-')
$luser = $env:USERNAME
$desFol = "C:\Users\$luser\Desktop\Reports_\$repname\"
$logTXT = $desFol+$now+$logout
$logCSV = $desFol+$now+$csvout
$repCSV = $desFol+$now+$repout
$scrTXT = $desFol+$now+$traout
$serrTXT = $desFol+$now+$errout
#(2)_.Start transcript
Start-Transcript -Path $scrTXT
#(3)_.Function-create-ReportFolder
function Function-create-ReportFolder{
[CmdletBinding()]
param(
[parameter(
Mandatory =
$true,
ValueFromPipeline = $true)]
[string]$ReportPath)
Try{
if (!(Test-Path -Path $ReportPath))
{
New-Item -Type Directory -Path
$ReportPath -ErrorAction
Stop |
Out-Null
}
}catch{
$errormessage =
$($PSItem.ToString())
Write-Warning 'Error
has occoured'
Write-host 'Problem
FOUND:' $errormessage -ForegroundColor Red
-BackgroundColor Black
}
}
Function-create-ReportFolder -ReportPath $desFol
#(4)_.Function write to logs
function Write-Log
{
[CmdletBinding()]
param(
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$Message,
[Parameter()]
[ValidateNotNullOrEmpty()]
[ValidateSet('Information','Warning','Error')]
[string]$Severity = 'Information'
)
[pscustomobject]@{
Time = (Get-Date -f g)
Message = $Message
Severity = $Severity
} | Export-Csv -Path $logCSV -Append -NoTypeInformation
}
#(5)_.Function time stamp
function Function-Get-TimeStamp
{
return '[{0:MM/dd/yy}
{0:HH:mm:ss}]' -f (Get-Date)
}
#(6)_.Prepare list of computers array here
, TXT file has computernames
$ServerList = 'C:\Temp\Reports\ServerList.TXT'
#(7)_.Check import file, stop if not found
function Function-Check-CSV-Input{
[CmdletBinding()]
param(
[parameter(
Mandatory =
$true,
ValueFromPipeline = $true)]
[string]$ReportPath)
Try{
if (!(Test-Path -Path $ReportPath))
{
Write-host 'Import file
CANNOT be located' -ForegroundColor Yellow
Write-Host 'Script will
STOP'
Start-Sleep -Seconds
5
break;
}
}catch{
$errormessage =
$($PSItem.ToString())
Write-Warning 'Error
has occoured'
Write-host 'Problem
FOUND:' $errormessage -ForegroundColor Red
-BackgroundColor Black
}
}
Function-Check-CSV-Input -ReportPath $ServerList
#(8)_.Function Get Cert Report
function Function-Cert-Report {
[cmdletbinding()]
param(
[parameter(Position=0,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[string]$ServerName
)
Begin {
}
Process {
$Certs = Invoke-Command -Computername
$ServerName -Scriptblock
{Get-ChildItem "Cert:\LocalMachine\My"}
$Certs | select PSComputerName,Subject,Issuer,Thumbprint,FriendlyName,NotBefore,NotAfter
}
End {
}
}
#(9)_.Get Content now
$array = Get-Content -Path $ServerList
$totalServers = ($array).count
$i = 1
#(10)_.Run Array
Clear-Host
write-host $null
Write-host 'REPORT'
Write-host '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
-ForegroundColor DarkYellow
Write-host ' (1)_.Located total servers' $totalServers
Write-host ' (3)_.Script run by :' $luser
Write-host '++++++++++++++++++++++++++++++++++++++++++++++++++++++'
-ForegroundColor DarkYellow
Write-host 'Report time:' -NoNewline; Function-Get-TimeStamp
Read-Host 'Press <ENTER> to continue creating Cert report'
#(11)_.Start Looping
$Report = foreach ($Server in $array)
{
Try{
$message1 = "($i)_.Processing
sever:($Server)"
$message2 = 'Completed'
Write-Progress -activity "Processing:$Server "
-status "$i out of $totalServers
completed"
Write-host $message1 -ForegroundColor
Yellow
Write-Log -Message $message1
-Severity Information
Function-Cert-Report -ServerName $Server | Export-CSV -Path $repCSV -Append -NoTypeInformation
Write-Log -Message $message2
-Severity Information
}Catch{
$errofile =
$($PSItem.ToString())
Write-Warning 'ERROR
has occoured'
Write-host 'PROBLEM
FOUND' $errofile -ForegroundColor red
-BackgroundColor Black
Write-Log -Message $message2 -Severity
Error
}
$i++
}
#(12)_.Stop transcript
Stop-Transcript | out-null
#(13)_.Open Report Folder
Read-host 'Press <ENTER> to open reports folder'
start $desFol
|