On to the script!
################ BEGIN SCRIPT ################
#Purpose: To scan computers for Windows Install Date
#Choose whether this is an initial scan or a rescan
$InitialChoice = Read-Host "Enter 'I' for initial scan, or 'R' for rescan"
#Output file variables
$MissedComputersFile = "C:\Temp\Script - InstallDatesMissed.txt"
$OutputFile = "C:\Temp\Script - InstallDates.csv"
#Get the computer list, depending on initial choice
If ($InitialChoice -like "I"){
$Computers = get-adcomputer -filter * | select name | sort name
} #End If
If ($InitialChoice -like "R"){
$Computers = Get-Content $MissedComputersFile
Remove-Item $MissedComputersFile -Force
} #End If
#Build an empty array for the data
$Results = @()
#Foreach computer in the list
Foreach ($Computer in $Computers){
#Here I need to pick a naming method but it's dependent on where the data came from (the initial choice and subsequent computer name import)
#For the initial scan, where data comes from AD:
If ($InitialChoice -like "I"){$TestSystem = ($Computer.Name)}
#For the rescan, where data comes from the text file:
If ($InitialChoice -like "R"){$TestSystem = $Computer}
#Test the connection
If (Test-Connection -ComputerName $TestSystem -count 1 -quiet){
#Create a new object to populate
$ResultsEntry = New-Object System.Object
#Get the computer's install date from WMI
$InstallDate = (Get-WmiObject -ComputerName $TestSystem win32_operatingsystem | select @{Name="InstallDate"; Expression={$_.ConvertToDateTime($_.InstallDate)}}).InstallDate
#Reformat the install date
$InstallDateRefined = ($InstallDate.Year).ToString() + "-" + ($InstallDate.Month).ToString() + "-" + ($InstallDate.Day).ToString()
#Add the name of the computer to the object
$ResultsEntry | Add-Member -type NoteProperty -name Name -value $TestSystem
#Add the install date to the object
$ResultsEntry | Add-Member -type NoteProperty -name OSInstallDate -value $InstallDateRefined
#Add the object to the array
$Results += $ResultsEntry
#Print a status message to the screen
Write-Host -ForegroundColor Green "$TestSystem - Windows Install Date is $InstallDateRefined"
} #End If
#This runs if the test-connection is no good
Else {
#Adds the name of the system to the "Missed" file
$TestSystem | Add-Content $MissedComputersFile
#Print a status message to the screen
Write-Host -ForegroundColor Red "$TestSystem - Not Online"
} #End If
} #End Foreach
#Export the array to CSV
$Results | sort name | export-csv $OutputFile -NoTypeInformation
################ END SCRIPT ################
So after the initial script, you just feed it the "Missed" file over and over until you get everything.
No comments:
Post a Comment