I am using Import-Csv to read lines from an input file, but I also want to remove lines where the analyst is too lazy to format the date correctly. So for each line in this “watchlist” (looking for account lockouts) that the script reads in, I want to inspect for manadatory fields and a properly formatted date. We don’t want analysts leaving stale entries in this list.
-Here are my headers in the CSV
sAMAccountName,Incident,Analyst,Removal_Date,
-Here’s my code:
$regex = "^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$" $watchlist = Import-Csv -Path xxxxxxxxxxxxxxxxx\watchlist.csv foreach ($item in $watchlist){ #Default is that record is spoiled i.e. missing a mandatory field #or has improperly formatted date $RecordError=$true #Check to see that line has sAMAccountName, Analyst, Removal Date #If so redeem record If ($item.sAMAccountName -and $item.Analyst -and $item.removal_date -and ($item.removal_date -match $regex)) { $RecordError=$false $watchlist = $item.sAMAccountName + "," + $item.Incident + "," + $item.Analyst + "," + $item.Removal_Date } else { $recycleList =+ $Item } } $recyclelist
Essentially I want to build a watchlist variable and this populates what was there, and a recycle list where the entries are removed and the analyst is emailed (I can write all the code for this).
My problem comes when I go to add the “lines” together to make the new csv. I’m sorry that most of this comes out like caveman language.
I have to give a shout out to Don Jones whose TechNet article that I read yesterday got me going on how to evaluate the date using regular expressions.