Month: September 2017


Here is the version #2 where the source of computer is retrieve from the AD by searching on specific OU defined on $SearchBase. The search will be recursive and include only Windows machine with a progress bar.

Once the search is completed, it will start checking the availablity of the machine with test-connection. It will then check the service status of the online PC.

Once done, the result will be saved to 3 files.

  1. ServiceStatus.csv = Machine that had successfully return the service status
  2. Offline.csv = Offline machine
  3. noService.csv = Machine that have issue with getting the service status


#The OU to search
$SearchBase = "OU=COMPUTER,DC=domain,DC=local"

$ServiceStatusFile = "ServiceStatus.csv"
$OfflineFile = "Offline.csv"
$noServiceFile = "noService.csv"

#Search result of computers (Windows only)
$Computers = Get-ADComputer -Filter {OperatingSystem -Like "Windows*"} -SearchBase $SearchBase -SearchScope Subtree -ErrorAction Stop -ErrorVariable NoComputers|sort Name
 Write-Warning -Message "Unable to get computer from AD"

#Service to check
$Service = "Quest KACE One Agent"

#Array for offline computers
$offlineComputers = @()

#Array for online computers
$onlineComputers = @()

##Array for computers without service
$noServiceComputers = @()

#Check if computers are online
foreach($computer in $computers) {
 $client = $computer.Name

if (Test-Connection -Computername $client -BufferSize 16 -Count 1 -Quiet){

Write-Progress -Activity "Checking computer availablilty....." -status "Ping computer $client" -percentComplete ($computers.IndexOf($computer) / $Computers.count*100)
 $onlineComputers= $onlineComputers+($computer)

 $offlineComputers= $offlineComputers+($computer)
 Write-Warning -Message "$client is offline"
 $client|Out-File -FilePath $OfflineFile -Append


#Check if service is available on online computers
foreach($onlineComputer in $onlineComputers){
 $client = $onlineComputer.Name
 Write-Progress -Activity "Checking service availablilty....." -status "Check service on computer $client" -percentComplete ($onlineComputers.IndexOf($onlineComputer) / $onlineComputers.count*100)
 $Servicestatus = get-service -DisplayName $Service -ComputerName $client -ErrorAction SilentlyContinue -ErrorVariable ServiceNotAvailable|select-object MachineName,DisplayName,Status|export-csv -Path $ServiceStatusFile -NoTypeInformation -Append
 Write-Warning -Message "$client : $ServiceNotAvailable"
 #Write-Warning -Message "$client does not have Quest Kace One Agent"
 $noServiceComputers = $noServiceComputers+($computer)
 $client|Out-File -FilePath $noServiceFile -Append

import-csv -Path ServiceStatus.csv


[PowerShell] Check Quest Kace One Agent Service for multiple computer (Version #1)

computers.txt being a list of computers, the script will check for the service status of the computers.

$Computers = get-content computers.txt
$Service = "Quest KACE One Agent"

foreach ($computer in $computers) {
 $Servicestatus = get-service -DisplayName $Service -ComputerName $computer
 $Servicestatus | select-object DisplayName,Status,MachineName



[PowerShell] Search for mailbox that are not hidden from the GAL on O365

Below is a script I use to search O365 for mailbox that are not hidden from GAL after the user had left the company.

This is done by getting a list of leavers from the AD OU and query O365 for their mailbox attribute of HiddenFromAddressListsEnabled

$UserCredential = Get-Credential yourusername
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session

$leavers = get-aduser -filter '*' -SearchBase "OU=User_Decommissioning"

foreach($leaver in $leavers){
 Get-Mailbox -Identity $leaver.UserPrincipalName|where{($_.HiddenFromAddressListsEnabled -eq $false)}|select Alias,HiddenFromAddressListsEnabled|export-csv -Path "NotHiddenFromGAL0365.csv" -Append -NoTypeInformation 


[PowerShell]Get all distribution list and members from AD with PowerShell

The following script will create a csv file for every distribution list with the members listed:

$allDL=get-adgroup -filter 'GroupCategory -eq "Distribution"' | sort name|select SamAccountName

foreach($dl in $allDL){

Get-ADGroupMember -identity $dl.SamAccountName|select-object name,SamAccountName,distinguishedName,objectClass|Export-Csv -Path $filename".csv" -NoTypeInformation