I am using a script that gets installed software and I want it to get Visio and Project installs.
Here is what I have that works well, but is there another method I can use, perhaps regex, or something that doesn’t require so many lines of code?
# Step 1: Declare path variables $Path = "\MyDFSRoot\Share\Project_Visio_Installs" $FileName = "$env:COMPUTERNAME-Project_Visio_Installs.log" # Step 2: Create the filter to retrieve the desired installed applications Get-InstalledApp | Where-Object -FilterScript { ($_.AppID -match "{") -and ($_.AppName -match "Project") -or ($_.AppName -match "Visio") -and ($_.AppName -notmatch "MUI") -and ($_.AppName -notmatch "Service Pack") -and ($_.AppName -notmatch "Update") -and ($_.AppName -notmatch "Viewer") } | Select-Object -Property * -OutVariable OutPut | Out-Null # Step 3: Create the directory if the OutPut variable is not null If ($OutPut -ne $null) { If (!(Test-Path -Path $Path)) { New-Item -Path $Path -ItemType Directory | Out-Null } If (Test-Path -Path "$Path\$FileName") { Exit } } # Step 4: Create a variable to use to help limit output duplications that were not caught in the first filter in Step 3 $OutPut1 = @( If ($OutPut -eq $null) { Exit }) $OutPut2 = @( If ($OutPut.Count -eq '1') { $OutPut }) $OutPut3 = @( If ($OutPut.Count -ge '2') { $CheckProjDup = $OutPut | Where-Object -FilterScript { $_.AppName -match "Project" } $CheckVisDup = $OutPut | Where-Object -FilterScript { $_.AppName -match "Visio" } If ($CheckProjDup.Count -gt '1') { $CheckProjDup | Where-Object -FilterScript { ($_.AppID -match "{") } $CheckVisDup } ElseIf ($CheckVisDup.Count -gt '1') { $CheckProjDup $CheckVisDup | Where-Object -FilterScript { ($_.AppID -match "{") } } }) #Step 5: Create the logic to evaluate if the check duplicates variable has a null result, if so, exit, else output the results to the log file $OutPut1 $EmailRecipients = "AssetManagementDL@mydomain.com" If ($OutPut2) { $OutPut2 | Out-File -FilePath "$Path\$FileName" $MailBody = $OutPut2 | Out-String Send-MailMessage -To $EmailRecipients -From "Test Admin" -Subject "Microsoft Project and Visio Installs Alert" -Body $MailBody -SmtpServer 'test.domain.com' } If ($OutPut3) { $OutPut3 | Out-File -FilePath "$Path\$FileName" $MailBody = $OutPut3 | Out-String Send-MailMessage -To $EmailRecipients -From "ITDepartment@mydomain.com" -Subject "Microsoft Project and Visio Installs Alert" -Body $MailBody -SmtpServer 'smtp.mydomain.com' }{content}