‘Twas the Night Before Scripting: Part 2
Summary: Dr. Scripto helps an Admin learn how to easily modify custom attributes in Active Directory.
Microsoft Scripting Guy, Ed Wilson, here. If you missed it yesterday, see Sean’s latest video: Just Script It! Also be sure to read yesterday’s post before you start on today’s: ‘Twas the Night of Before Scripting: Part 1.
Here’s Sean…
In yesterday’s episode, we encountered an Administrator who was near tears due to the time constraints of a massive project and the bad timing of it occurring during the holidays. Magically from a spark of ozone, our good friend Dr. Scripto appeared to aid him. Today, we continue as he gains some further insight into Windows PowerShell and the power of automation.
And so we continue,
Much deeper to the night,
The Admin who never scripted,
And suddenly took fright.
A project that would take
All of the hours
Of holiday time,
And also no showers.
But Dr. Scripto
Appeared in time,
In a sparking of ozone,
And badly done rhyme.
With PowerShell, they made
Users (so many),
And did it barely
In the cost of a penny.
But now, an email stirred
To our good Admin friend,
That made him just panic,
Nearly to the end.
“It’s from the Boss.
He insists that I quickly
Update the field,
With the raw Info account provided to me!”
Oh, the panic in his eyes,
and gasps of pure dread!
To manually update over 500 staff…
Fear crept to his head!
But the good Doctor,
With a twinkle in his eye,
Smiled and said,
“We can solve this without try.”
“Let us take the first script,
The one we used to make
The staff of 500,
We’ll change it easy as cake.”
So he copied it out,
And pasted it back,
The previous script,
His small coding snack:
$Users=IMPORT-CSV Users.csv
Foreach($User in $Users)
{
$First=$User.Firstname
$Last=$User.Lastname
$Acct=$User.UserAccount
$Addr=$User.Address
$City=$User.City
$State=$User.St
$TempPassword=(CONVERTTO-SecureString –asplaintext –force –string ‘TempPassword1’)
$DomainUPN=$Acct+’@Contoso.local’
NEW-ADUSER $Acct –GivenName $First –Surname $Last –StreetAddress $Addr –City $City –State $State –UserPrincipalName $DomainUPN –AccountPassword $TempPassword
}
“One more cmdlet
For this task we’ll need,
A simple cmdlet
To aid in our deed.
We do not need UPN
Or a password this time,
So we’ll comment out
All of those lines:”
#$TempPassword=(CONVERTTO-SecureString –asplaintext –force –string ‘TempPassword1’)
#$DomainUPN=$Acct+’@Contoso.local’
Our Admin blinked,
And looked at the screen,
Using the hash mark
Would skip like a sheen.
“We must now take info
Provided us from file
USER.CSV and
Combine to a pile:”
$First=$User.Firstname
$Last=$User.Lastname
$Acct=$User.UserAccount
$Addr=$User.Address
$City=$User.City
$State=$User.St
$info=$First+”,”+$Last+”,”+$Acct+”,”+$Addr+”,”+$City+”,”+$State
Our good friend, Scripto,
Did then type to the screen,
The cmdlet to use
To aid in their mean:
SET-ADUSER $Acct –replace @{info=$info}
“Ooops! I almost forgot
To do one more thing!
Comment out New-ADUser,
And our script, it can sing!”
And so he looked at
The script he would run,
And saved it as the new
UPDATE.PS1:
$Users=IMPORT-CSV Users.csv
Foreach($User in $Users)
{
$First=$User.Firstname
$Last=$User.Lastname
$Acct=$User.UserAccount
$Addr=$User.Address
$City=$User.City
$State=$User.St
#$TempPassword=(CONVERTTO-SecureString –asplaintext –force –string ‘TempPassword1’)
#$DomainUPN=$Acct+’@Contoso.local’
#NEW-ADUSER $Acct –GivenName $First –Surname $Last –StreetAddress $Addr –City $City –State $State –UserPrincipalName $DomainUPN –AccountPassword $TempPassword
$info=$First+”,”+$Last+”,”+$Acct+”,”+$Addr+”,”+$City+”,”+$State
SET-ADUSER $Acct –replace @{info=$info}
}
Running the script
And checking AD
Showed their User;
They had done it correctly!
Dr. Scripto looked up
At his friend in the chair,
“Amazing what you can do
With some PowerShell flair!”
The strain seemed to
Pass from his face,
Perhaps he might win
In this mad deployment race?
Pop in tomorrow as we watch further. Will our good Admin friend manage to find some way to complete all of his work in a reasonable time? Will he be home for the holidays? Only further reading will tell!
~Sean
I invite you to follow the Scripting Guys on Twitter and Facebook. If you have any questions, send email to scripter@microsoft.com, or post your questions on the Official Scripting Guys Forum. See you tomorrow. Until then, peace.
Sean Kearney,
Honorary Scripting Guy and Windows PowerShell MVP