Public/Find-UnregisterdVM.ps1
Function Find-UnregisterdVM { <# .Synopsis Find Unregisterd Citrix XenApp servers and e-mail report .Description Find Unregisterd Citrix XenApp servers and e-mail report .Parameter From Mail sender of report .Parameter To Mail destination of report .PARAMETER nomail A description of the nomail parameter. .Parameter UsePSEmailServer A description of the UsePSEmailServer parameter .Parameter SMTPServer A description of the SMTPServer parameter .Example Find-UnregisterdVMs Find UnregisterdVMs and e-mail report .LINK about_functions_advanced .LINK about_CommonParameters #> [CmdletBinding(DefaultParameterSetName = 'Mail', ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] [OutputType([System.IO.File], ParameterSetName = 'NoMail')] Param( [Parameter(ParameterSetName = 'Mail', Mandatory = $true, HelpMessage = 'The From address')] [Parameter(ParameterSetName = "PSEmailServer")] [Parameter(ParameterSetName = "SMTPServer")] [ValidatePattern('\w+([-+.'']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*')] [string]$from, [Parameter(ParameterSetName = 'Mail', Mandatory = $true, HelpMessage = 'The To address')] [Parameter(ParameterSetName = "PSEmailServer")] [Parameter(ParameterSetName = "SMTPServer")] [ValidatePattern('\w+([-+.'']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*')] [string]$to, [Parameter(ParameterSetName = 'Mail')] [Parameter(ParameterSetName = "PSEmailServer")] [switch]$UsePSEmailServer, [Parameter(ParameterSetName = 'Mail')] [Parameter(ParameterSetName = "SMTPServer")] [string]$SMTPServer, [Parameter(ParameterSetName = 'NoMail')] [switch]$nomail ) Try { $UnregisterdXAs = Get-BrokerSharedDesktop | Where-Object { $_.RegistrationState -eq "unregistered" # | select HostedMachineName, RegistrationState | ConvertTo-Html } } Catch { Write-Warning $_.Exception.Message } $klantnaam = $($(Get-ADDomain).NetBIOSName) $klantnaam = $klantnaam.ToUpper() $servertitle = "Hosted Machine Name" $statetitle = "Registration State" #region Reporting $report = "c:\beheer\UnregisterdXAs.html" $FileExists = Test-Path $report If ($FileExists -eq "True") { Write-Host "Remove old report..." -ForegroundColor Cyan -NoNewline Remove-Item $report Write-Host "Done!" -ForegroundColor Green } Write-Host "Generate new report..." -ForegroundColor Cyan -NoNewline #Clears the report in case there is data in it $FileExists = Test-Path $report If ($FileExists -eq "True") { Clear-Content $report } #region HTMLHeader #Builds the headers and formatting for the report Add-Content $report "<html>" Add-Content $report "<head>" Add-Content $report "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>" Add-Content $report "<Title>$klantnaam XA rapportage</Title>" Add-Content $report '<STYLE TYPE="text/css">' Add-Content $report "body {" Add-Content $report "padding:10px;" Add-Content $report "background-color:WhiteSmoke" Add-Content $report "}" Add-Content $report "td {" Add-Content $report "text-align: left;" Add-Content $report "}" Add-Content $report "th {" Add-Content $report "text-align: center;" Add-Content $report "background-color:#999999;" Add-Content $report "padding: 10px;" Add-Content $report "}" Add-Content $report "tr:nth-child(odd) {" Add-Content $report "background: #CFCFCF;" Add-Content $report "}" Add-Content $report ".Table td {" Add-Content $report "text-align: center;" Add-Content $report "}" Add-Content $report "a {" Add-Content $report "text-decoration:none;" Add-Content $report "}" Add-Content $report "</style>" Add-Content $report "</head>" Add-Content $report "<body>" Add-Content $report '<img src="https://www.ict-concept.nl/sites/all/themes/ictconcept/images/ict-concept.png" id="top"></img><br><br>' #endregion HTMLHeader #Table for XA information Add-Content $report "<b>XA Informatie</b>" Add-Content $report "<table width='100%'>" Add-Content $report "<tr>" Add-Content $report "<th width='10%' align='center'>$servertitle</th>" Add-Content $report "<th width='10%' align='center'>$statetitle</th>" Add-Content $report "</tr>" If ($null -ne $UnregisterdXAs) { foreach ($server in $UnregisterdXAs) { $servername = $server.name Add-Content $report "<tr>" Add-Content $report "<td>$servername</td>" Add-Content $report "</tr>" } } Else { Add-Content $report "<tr>" Add-Content $report "<td>Geen unregisterd XA's gevonden</td>" Add-Content $report "</tr>" } Add-Content $report "</table>" Add-Content $report "<br>" #endregion XA Information Write-Host "Done!" -ForegroundColor Green $Subject = ("Unregistered VMs on XenApp Farm " + (Get-Date -format R)) Write-Verbose "Mailing report to $smtp" $subject = "[$klantnaam] XA rapportage" $body = Get-Content $report | Out-String If (!($nomail)) { Switch ($PSCmdlet.ParameterSetName) { SMTPServer { $SMTPServer = "-SMTPServer" + $SMTPServer } } Send-MailMessage -To $to -From $from -Subject $subject -BodyAsHtml -Body $body $SMTPServer } Else { Invoke-Expression $report } } |