Public/Send-CMHealthCheckData.ps1

<#
.SYNOPSIS
    Send-CmSiteServerLogs collects SCCM site server logs, compresses
    them into a tasty little chocolate-covered ZIP file, and sends it out
    through the vast and spacious Internet, using Gmail as the courier
    pidgeon.
.DESCRIPTION
    The Synopsis should be enough. Or maybe I'm doing this wrong?
.PARAMETER SendFrom
    [string] (required) sender's Gmail address
.PARAMETER SendTo
    [string] (required) recipient's email address
.PARAMETER SmtpServer
    [string] (required) FQDN or IP address of SMTP server
.PARAMETER LogFilter
    [string] (optional) wildcard pattern for collecting only a subset
    of log files to send. Example "w*"
#>

function Send-CmSiteServerLogs {
    [CmdletBinding(SupportsShouldProcess=$True)]
    param (
        [parameter(Mandatory=$True, HelpMessage="Sender email address")] 
            [ValidateNotNullOrEmpty()]
            [string] $SendFrom,
        [parameter(Mandatory=$True, HelpMessage="Recipient email address")] 
            [ValidateNotNullOrEmpty()]
            [string] $SendTo, 
        [parameter(Mandatory=$False, HelpMessage="Message Subject line")]
            [ValidateNotNullOrEmpty()]
            [string] $Subject = "SCCM Log Sender`: $($env:COMPUTERNAME)", 
        [parameter(Mandatory=$True, HelpMessage="SMTP Server name or address")]
            [ValidateNotNullOrEmpty()]
            [string] $SmtpServer,
        [parameter(Mandatory=$True, HelpMessage="Port number")]
            [ValidateNotNullOrEmpty()]
            [int] $SmtpPortNumber,
        [parameter(Mandatory=$False, HelpMessage="Log filter value")] 
            [string] $LogFilter = "",
        [parameter(Mandatory=$False, HelpMessage="ZIP filename")]
            [string] $ZipFilename = "cmhealthcheck_cmlogs.zip"
    )
    $temp = $env:TEMP
    if ($SendMail) {
        $cred = Get-Credential -Message "Provide credentials to use SMTP service" -UserName $SendFrom
    }
    $cminst = Get-CmSiteInstallPath
    if ($cminst -ne $null) {
        $cmlogpath = "$cminst\logs"
        if (Test-Path $cmlogpath) {
            Write-Verbose "Backing up site server log files..."
            $src = "$temp\logtemp"
            if (Test-Path $src) {
                Write-Verbose "Removing previous temp folder..."
                Remove-Item $src -Recurse -Force
            }
            mkdir $src
            if ($LogFilter -ne "") {
                Write-Verbose "Filtering logs: $LogFilter.log"
                Copy-Item "$cmlogpath\$LogFilter.log" "$src"
                $cmlogs = Get-ChildItem -Path $src -Filter "$LogFilter.log"
            }
            else {
                Copy-Item "$cmlogpath\*.log" "$src"
                $cmlogs = Get-ChildItem -Path $src -Filter "*.log"
            }
            $lc = $cmlogs.Length
            $dest = "$temp\$ZipFilename"
            if (Test-Path $dest) {
                Write-Verbose "Removing previous archive file..."
                Remove-Item $dest -Force
            }
            Write-Verbose "Compressing backup log files..."
            Add-Type -AssemblyName "system.io.compression.filesystem"
            [io.compression.zipfile]::CreateFromDirectory($src,$dest)
            if (Test-Path "$dest") {
                $size = $(Get-Item -Path "$dest").Length
                $size = [math]::Round($size / 1MB,2)
                Write-Verbose "Archive created: $dest ($size MB)"
                $Message = "Sending $lc SCCM Log files"
                Write-Output "Sending email with zip attachment..."
                Send-MailMessage -Subject "$Subject" -Body "$Message" -From $SendFrom -To $SendTo -SmtpServer $SmtpServer -Attachments "$dest" -Port $SmtpPortNumber -UseSsl -Credential $cred
                Write-Verbose "finished!"
            }
            else {
                Write-Error "error: unable to create archive"
            }
        }
        else {
            Write-Error "error: unable to locate logs folder"
        }
    }
    else {
        Write-Error "error: SCCM installation path not found."
    }
}

function Send-CMHealthCheckData {
    [CmdletBinding(SupportsShouldProcess=$True)]
    param (
        [parameter(Mandatory=$True, HelpMessage="Folder to compress and send")] 
            [string] $Path = "",
        [parameter(Mandatory=$True, HelpMessage="Sender email address")] 
            [ValidateNotNullOrEmpty()]
            [string] $SendFrom,
        [parameter(Mandatory=$True, HelpMessage="Recipient email address")] 
            [ValidateNotNullOrEmpty()]
            [string] $SendTo, 
        [parameter(Mandatory=$False, HelpMessage="Message Subject line")]
            [ValidateNotNullOrEmpty()]
            [string] $Subject = "CMHealthCheck Data`: $($env:COMPUTERNAME)", 
        [parameter(Mandatory=$True, HelpMessage="SMTP Server name or address")]
            [ValidateNotNullOrEmpty()]
            [string] $SmtpServer,
        [parameter(Mandatory=$True, HelpMessage="Port number")]
            [ValidateNotNullOrEmpty()]
            [int] $SmtpPortNumber,
        [parameter(Mandatory=$False, HelpMessage="ZIP filename")]
            [string] $ZipFilename = "cmhealthcheck_data.zip"
    )
    $temp = $env:TEMP
    if ($SendMail) {
        $cred = Get-Credential -Message "Provide credentials to use SMTP service" -UserName $SendFrom
    }
    if (Test-Path $Path) {
        $datafiles = Get-ChildItem -Path $Path
        $lc   = $datafiles.Length
        $dest = "$temp\$ZipFilename"
        if (Test-Path $dest) {
            Write-Verbose "Removing previous archive file..."
            Remove-Item $dest -Force
        }
        Write-Verbose "Compressing backup log files..."
        Add-Type -AssemblyName "system.io.compression.filesystem"
        [io.compression.zipfile]::CreateFromDirectory($Path,$dest)
        if (Test-Path "$dest") {
            $size = $(Get-Item -Path "$dest").Length
            $size = [math]::Round($size / 1MB,2)
            Write-Verbose "Archive created: $dest ($size MB)"
            $Message = "Sending $lc SCCM Log files"
            Write-Verbose "Sending email with zip attachment..."
            Send-MailMessage -Subject "$Subject" -Body "$Message" -From $SendFrom -To $SendTo -SmtpServer $SmtpServer -Attachments "$dest" -Port $SmtpPortNumber -UseSsl -Credential $cred
            Write-Host "finished!"
        }
        else {
            Write-Error "error: unable to create archive"
        }
        else {
            Write-Error "error: unable to locate logs folder"
        }
    }
    else {
        Write-Error "error: SCCM installation path not found."
    }
}
Export-ModuleMember -Function Send-CMHealthCheckData
Export-ModuleMember -Function Send-CmSiteServerLogs