#v1.0 - March 27, 2021
#
$server = $env:COMPUTERNAME
#Define date values
$simpleDate = Get-Date -Format "M/d/yy"
$dateTime = Get-Date -Format "M/d/yy HH:mm"
$fileDateTime = Get-Date -Format "yyyy-MM-dd HHmm"
#Define the module name
$moduleName = 'BcContainerHelper'
$body = ""
$message = ""
$updated = $false
#Specify file location for activity transcript log file
$transcriptFile = "D:\BCPowerShell\Logs\" + $fileDateTime + " " + $server + " " + $moduleName + " Update Log.txt"
#Start recording transcript
Start-Transcript -Path $transcriptFile
#Record the start time
$StartTime = $(get-date)
#Define email configuration
$emailFrom = "myemail@gmail.com"
$emailTo = "myemail@gmail.com"
$smtpServer = "smtp.gmail.com"
$port = "587"
#Email password file created using: Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File -FilePath D:\BCPowerShell\Gmail_password.securestring
$passwordFile = "D:\BCPowerShell\Gmail_password.securestring"
$securePassword = ConvertTo-SecureString (Get-Content -Path $passwordFile)
$smtpCred = New-Object -TypeName PSCredential ($emailFrom, $securePassword)
$subject = $server + ": " + $simpleDate + " " + $moduleName + " Update Log";
$started = "Start time: " + $StartTime
$body += $started + "`n`n"
Try
{
#Get currently installed version
$currentVersion = (Get-InstalledModule $moduleName -ErrorAction SilentlyContinue).Version.ToString()
}
Catch
{
$currentVersion = "(not installed)"
}
#Get the latest version available
$latestVersion = (Find-Module $moduleName).Version.ToString()
#If we don't have the latest version installed
If ($currentVersion -ne $latestVersion)
{
$message = "Current version: " + $currentVersion + "`nLatest version: " + $latestVersion;
$message += "`n`nUpdating to version " + $latestVersion;
#Remove existing version(s)
Uninstall-Module $moduleName -Force -AllVersions -ErrorAction SilentlyContinue
#Install latest version
Install-Module $moduleName -Force
$updated = $true;
#Verify version number
$currentVersion = (Get-InstalledModule $moduleName).Version.ToString()
$message += "`nUpdate complete";
$message += "`nCurrent version is now " + $currentVersion;
$body += "`n" + $message;
Write-Output $message
}
Else
{
#If we are on the latest version, log that info
$message = "You are on the latest version of " + $moduleName + ": " + $currentVersion;
Write-Output $message
}
#Record end time
$EndTime = $(get-date)
$output = "`nEnd time: " + $EndTime
$body += "`n" + $output
Write-Output $output
#Calculate elapsed time
$elapsedTime = $EndTime - $StartTime
$totalTime = "{0:HH:mm:ss}" -f ([datetime]$elapsedTime.Ticks)
$output = "Elapsed time: " + $totalTime
$body += "`n" + $output
Write-Output $output
$body += "`n`nFull log file is attached"
#Finish the transcript recording
#The Transcript must be stopped before trying to send the email,
#otherwise the log file will be locked, causing the email to fail
Stop-Transcript
if ($updated)
{
#Send the email
Send-MailMessage -From $emailFrom -To $emailTo `
-Subject $subject `
-Body $body `
-Attachments $transcriptFile `
-SmtpServer $smtpServer `
-Credential $smtpCred `
-Port $port `
-UseSsl
}
No comments:
Post a Comment