If you haven’t heard that extended support for Windows XP ended earlier this year you’ve clearly been in a coma. There are a number of well-publicised methods for finding out whether you still have XP machines in your environment. Here is my own humble (and spectacularly over engineered) Powershell offering.
######################################################### # # Name: Find-XPStillActive.ps1 # Author: Tony Murray # Version: 1.0 # Date: 23/09/2014 # Comment: PowerShell 2.0 script to find active # Windows XP computer accounts # ######################################################### ## Define global variables # Export file for storing results $expfile = "c:\xp_still_active.csv" # Define the header row for the CSV (we will create our own) $header = "`"name`",`"os`",`"sp`",`"lastlogondate`"" # Consider any account logged on in the last x days to be active $days = 60 $Today = Get-date $SubtractDays = New-Object System.TimeSpan $days, 0, 0, 0, 0 $StartDate = $Today.Subtract($SubtractDays) $startdate = $startdate.ToFiletime() # LDAP filter settings $filter = "(&(lastlogontimestamp>=$startDate)(operatingsystem=Windows XP*))" ## Functions Function Format-ShortDate ($fdate) { if ($fdate) { $day = $fdate.day $month = $fdate.month $year = $fdate.year "$day/$month/$year" } # end if } # end function ## Start doing things # Import the AD module ipmo ActiveDirectory # Tidy up any previous copies of the export file if (test-path $expfile) {Remove-Item $expfile} # Add the header row to the export file Add-Content -Value $header -Path $expfile # Create an array of computer objects $active = Get-ADComputer -LDAPFilter $filter -pr * # loop through the array foreach ($xp in $active) { # Grab the attribute values we need from the AD object $nm = $xp.name $os = $xp.operatingsystem $sp = $xp.operatingsystemservicepack $lt = Format-ShortDate $($xp.lastlogondate) $row = "`"$nm`",`"$os`",`"$sp`",`"$lt`"" # Commit the row to the export file Add-Content -Value $row -Path $expfile } # end foreach ## End script
Enjoy!