The 10 Types of IT Vendors / Customers in a Meeting


The Douche Drinker

  • smug
  • over-groomed
  • spends 4 hrs every morning in front of a mirror
  • stares at his/her own fingernails most of the meeting


  • Adderol addict or simply over-caffeinated (usually carries energy drinks around)
  • defensive and reactive
  • untrusting
  • might lose grip on pencil swatting at a fly

Beach Bum

  • relaxed at all times, almost to the point of snoring
  • dresses sloppy, maybe even crocks or flip-flops
  • acts as if bank account is overflowing
  • doesn’t care about what others think, even managers

Mine Furher

  • serious at all times, rarely smiles
  • assumes everyone else in the room is a spy
  • adds 7 days to every step in a project “just to be sure”
  • may glare at times as if whoever is speaking might need to be exterminated

Mr. Insecure

  • may also be flinchy or SS
  • wears vendor shirts to meetings
  • flaunts certs in public (shirts, ball caps, coffee mugs, pens, etc.)
  • feels need to mention his/her certs in every conversation
  • responds with “but what if…?!” even before the question is asked


  • extremely fit, may even kiss their own biceps repeatedly at times
  • wears overly tight clothing
  • talks loud, steps on others when talking
  • uses UFC analogies for for explanations (example: “the option is like an arm bar that makes the other services tap out and cry for mercy!”)

Jaw Jacker

  • never shuts up, never, ever, never, never, ever
  • over-explains everything to the point of making Wikipedia cry for mercy
  • talks and talks and talks and talks, and then…. talks some more
  • master of using 500 words to explain what a mouse is

Puppy Dog

  • plays with phone while ignoring meeting discussions
  • never takes notes
  • plays with things while others are talking
  • drops phone repeatedly
  • often blurts out when losing a game on their phone, and may or may not apologize for interrupting the meeting

Inspector Gadget

  • usually shows up with latest trendy gadgets
  • can’t wait to tell you how great the new gadgets are
  • only takes 10 minutes to tell you they’re already bored with new gadget and are waiting for the next prototype to be available and why it’s going to be super-awesomely incredistatical and phenomenal and all that

The Genius

  • stays quiet until asked a direct question
  • speaks only to the point of the question
  • responses are short, and to-the-point. can somehow, magically, answer a question with a “yes” or “no” and not give into the temptation to continue beyond that.
  • watches the other freaks dance around and consume oxygen
  • often sits in the back or off to the side

Enable Federated Authentication for an Azure AD tenant with PowerShell | System Center ConfigMgr

Comment: This happened to be perfect timing for something I’m working on actually, and the PowerShell aspect is icing on the cake. Enjoy!


Nickolaj Andersen – For organizations that have deployed Azure AD Connect and are synchronizing their on-premise identities to Azure AD, you may start of with setting up Password Synchronization and letting Azure AD handle your authentications instead of using Active Directory Federation Services…

Source: Enable Federated Authentication for an Azure AD tenant with PowerShell | System Center ConfigMgr

CSV Column Extraction with PowerShell

I originally titled this “Kicking CSV in the Balls with PowerShell boots” but that was too violent, and too dramatic.  Then I thought about “Giving CSV a Happy Rub-Down with PowerShell Lotion” but that felt creepy.  So I went for the boring technically-apropos title.


This was one of those “little things that drives someone (me) to stick their head in a sink filled with ice water and sing ‘God bless America’ until oxygen runs out”.  Go ahead, make fun of me, that’s okay. I do.  My dog does.  The confused people in the adjacent hotel room probably would. Anyhow…

I ran into a challenge that involved reading CSV files to extract specific column data by column name.  I ran across a bunch of articles, some with good advice and some with bad advice (note: those who say use Get-Content to parse column names by leveraging .Split(“,”) are ignoring CSV that contains quoted/nested commas).  So, this article kicked one of my functional brain cells right in the nuts, and got me on the right path (thank you!)

Example CSV data:

ID,Department,"Last,First Name",City
002,Sales,"Phisting,Anita","New York"
003,Engineering,"McCracken,Phill","San Francisco"

You get the idea.  So, I wanted to be able to pull all of the values that are associated with the “Last,First Name” column.  The problem is this…

  • Import-CSV returns a custom object type, not a Hash table or Array
  • Without a native hash table, it’s difficult to “easily” extract row elements by name (i.e. Javascript getElementById, or PowerShell $hash.Item(), or the implicit alias thereof)
  • Parsing CSV by fetching the first row (column names) using Get-Content and parsing via Split() method is unreliable when column names contain nested commas.

The Code:

param (
  [parameter(Mandatory=$True)] [string] $CsvFile,
  [parameter(Mandatory=$True)] [string] $Column

# returns an array of logical column names using first "row"

function Get-CsvColumns {
  param ($csvData)
  Get-Member -InputObject $csvdata[0] |
    Where-Object {$_.MemberType -eq "NoteProperty"} |
      Select-Object -ExpandProperty Name

# returns the integer index for the element position
# among the logical array of column names

function Get-CsvColumnIndex {
  param ($column, $array)
  $cols = Get-CsvColumns $array
  $cindex = [array]::IndexOf($cols,"$column")
  return $cindex

if (Test-Path $CsvFile) {
  $fdata  = Import-Csv $CsvFile
  $colums = Get-CsvColumns -csvData $fdata
  $index  = Get-CsvColumnIndex -column "$column" -array $fdata
  foreach ($row in $fdata) {
    $v = $row.psobject.Properties.value[$index]
    # replace write-output with whatever you want, I dont care right now...
    Write-Output $v
else {
  Write-Output "error: $CsvFile not found"

So, there you have it.  To run it…

.\Get-CsvData.ps1 -CsvFile ".\csvtest.csv" -Column "Last,First Name"

Jorgan, Hugh
Phisting, Anita
McCracken, Phill

And it will spit out the values for that logical “column” in the CSV file.

No more than 30 seconds after I stood up, and stretched my arms out to the sides and yelled “yes!!!  I have kicked this in the nuts!!” did it dawn on me that I could’ve simply invoked ADO and run it all via a T-SQL horse and buggy.  Damn it.  Victories fade quick.

Now, if you’ll excuse me, I need to pass out.


Microsoft Ignite


Knock on wood, I’m going.  The reason I’m going is not awesome, but I’m going.  The person who was supposed to go, was laid off, and even though he was technically on another team, we really needed him on our team.  Alas, he moved on and the ticket, air fare, and hotel were already paid for.  So, they looked around and decided to pin it on my forehead.  “Congrats!”  Bittersweet, is the word that comes to mind.

In any case, I can’t say “no” anyway, so I make plans and get my things ready for travel.

I attended Microsoft TechEd in 2011 (Atlanta), and 2012 (Orlando). Both were compliments of the customer for whom I was consulting with at the time.  Years before that, in my previous professional life, I attended more Autodesk University conferences than I can count.  I still recall some of the locations, like Los Angeles, Boston, Las Vegas (more than once), and I think there were others.

They’re usually fun, and packed with all sorts of expected and unexpected information downloads.  I’m looking forward to this one because I will actually get to meet some of my colleagues in person, which is rare at my company.  I work from home, as do most of the others, so we “meet” via Skype, Webex and cell phone most of the time.  The last time we met in person was October 2015.

I have to warn people who’ve only met me online, that in person, I’m boring as shit.  I observe things mostly.  Then I tweet about them, text or Instagram them, and occasionally blog about them.  I may do some crazy things once in a while, but for the most part I’m boring and crack stupid, dry jokes at a rate commensurate with my caffeine intake multiplied by the square root of how much sleep I’ve had.  If I’ve had plenty of sleep, a stomach full of food, and some sort of alcoholic beverage in hand, I can recite the entire King James Bible backwards and without any vowels.  At least, that’s what it’ll sound like.

Anyhow, I should be easy to spot at the conference.  I’ll be dressed just like everyone else, and probably have the same hair cut and blank expression.  One sure way to find me, is to look for the guy who’s staring at his phone all the time.  Not like anyone else does that.

Aside from that, I will be observing people and events. I’ll also probably tweet some silly mindless drivel as usual, depending upon my surroundings.  If get detached from my brethren and become disillusioned I’ll wander around the expo area and, wait a minute, I’m heading there first!  I need to grab all the good swag before it’s gone.  But do so tastefully, so as not to offend or draw attention.

If you really want to run into me and chat, here’s a picture to help identify me.  Good luck!

By the way, the image at the top is symbolic.  It’s how I picture what we’ll look back at 2016 from 2026, assuming I live that long.  If you think that’s too short in the future, keep in mind that ten years ago, Facebook was just announced and MySpace was king of the world.🙂

Understanding Group Policy


Have you wasted your time and money purchasing books, classroom training or visiting support groups?  Tired of searching online for more information about Group Policy?  Look no further.  Everything you need to know about them is right here, on one web page!  And best of all: It’s free!

So let’s get started…

What is Group Policy?

Group Policy is a feature in Windows which is rarely used correctly, if used at all.  When they are used, they are formed as logical objects called “Group Policy Objects” or GPOs.  They’re intended to make as many changes to a computer as possible.  The more, the better.

What is Group Policy used for?

In most cases, they’re used for combining way too many conflicting settings into a single GPO, which is then linked to the wrong OUs, and often contains a whole bunch of WMI filtering, just to keep them from running too fast.

Also, many experts prefer to create multiple instances with the same settings enabled, but with different values, and then experiment with priorities, blocking, enforcement, and WMI filtering, all in a safe, and isolated production environment.

When Should I Use Group Policy?

If you are reading this article because you really don’t know what Group Policy is about, then you should start by asking someone else, who is familiar with them, to do what you need.  They’re easy to identify, as they often have a natural glow about them, along with a serious facial expression.

If you are reading this because you ran out of interesting articles to skim through on your phone while sitting on the toilet in the office restroom, then you should just be sure there’s enough toilet tissue on the roll next to you.

Oh yeah, what should you use Group Policy for?  The real question should be “When should you NOT use them?”  Keep reading!

When Should I NOT Use Group Policy?

If you’re not sure, don’t use them yet.  Wait, what am I saying?!  You should always use them, no matter what the occasion.  The best time to use them is on a day of the week with a name that ends with a “y”.  So, if you’re wondering about when to not not use them, you should actually think of it as when to not not not not not not never not ever not use them.

What are the Basic Ways to Apply Group Policy?

There are two (2) basic ways:  Break computers or break users.  But if you really know what you’re doing, you can also break network links.  The “expert” way to use them is to create several dozen of them, and link them randomly to OU’s throughout your AD forest.

How to Tell a GPO Expert from a GPO Novice?

That’s easy.  A GPO Expert is one who creates a new GPO for every setting, or puts them all into the Default Domain Policy.  They are also sure to NEVER create documentation for their GPO’s, nor do they used the internal commenting features.  And finally, a GPO Expert will often tell you (and anyone else nearby) that they are a GPO Expert.

A GPO Novice asks questions and does research, and boring stuff like that.

What is a Central Store?

A Group Policy Central Store is a small brick building in the poorest part of town where you can wait out back around 2:00 AM for a guy to drive up and sell you small bags of Group Policy.  Hold on, that was the wrong index card, just a sec…

Oh!  Yes, I’m sorry, a GP Central Store is a folder you create on one of your AD domain controllers, and then copy every .ADMX and .ADML file you can find throughout your entire organization into that one folder.  It doesn’t even matter where you create the folder, or what you name it.

Where Do I Get Group Policy Training?

If you’re a GPO Expert, you are the trainer.  You advise everyone within 50 feet of you about the importance of GPO’s, the proper ways to use GPO’s, and why they’re the most important invention mankind has ever conceived, whether they touch GPO’s or not.  Everyone from custodial staff to receptionists just loves to hear more about GPO’s and how they make the world a brighter place.

If you’re new to Group Policy, just hang around the coffee break room, or walk around until you find the loudest-talking IT expert in your building.  Chances are you’ll find the GPO Expert in your organization within minutes.  Once you find them, don’t shake their hands, because you might offend their sense of superiority.  So do a Japanese-style bow, introduce yourself, and humbly beg for a few minutes of their intergalactic knowledge to be drizzled onto your dried-up brain for just a few minutes.

Making Your First GPO

The first step in creating a new GPO is to just create one and link it immediately to the OU with the most objects inside of it.  The more settings you “configure” the better.

Your next step is to create more GPOs with the same settings “configured” but with different values assigned, and then link those to the same OU’s as your first GPO.  Repeat this process until your fingers are tired of creating and linking GPO’s for the day.  You can resume making more of them tomorrow.

Finally, review your GPO’s and make sure you don’t have any comments or notes included anywhere.  Also, any documentation you might have created should be deleted.  The mark of a true GPO Expert is to never document anything.  Why would they?  All possible knowledge is contained in their cranium, nicknamed “the death star”, and nobody else will ever be qualified to step in for them, so documentation is a waste of time.  Lesser skilled minions will never understand the uber-complicated matter of GPO notes anyway.


Everything you read above is complete bullshit and should be ignored – if you wish to remain employed.

My Semi-Typical Week



  • Wake up: 8:35 AM EDT
  • Customer A asks for me to be “on site” in Richmond, VA at 8:30 AM on 9/12/16. Duration = 5 days
  • Customer B asks for me to be “on site” in Raleigh, NC at 8:00 AM on 9/19/16. Duration  = 5 days
  • Still at home, storm approaches and dumps a ton of rain.  Causes lawn and shrubs to grow beyond control.  Foxes come out at night and fight with the raccoons and opossum. Dog #2 cries to go out at 11:30 PM and 3:30 AM. Not a restful night.
  • Text landlord about power outage frying the oven range (pun intended).
  • Lab work
  • Bed time: 3:15 AM EDT


  • Wake up: 8:00 AM EDT
  • Customer A changes mind, as soon as I’ve submitted request to travel desk.  Withdraw request and mark as “pending”
  • Customer B notifies me that it’s not Raleigh, NC, but Charlotte, NC.  Change of travel plans.
  • DC1 in my Hyper-V shits the bed.  No recovery possible from backups.  Scratches head, talks with dog about options, cat agrees.  Start over.
  • Spend all night rebuilding Hyper-V lab environment.  Keeping in mind that it also bridges my home devices (DNS, DHCP, etc.).
  • Shit Router hangs and has to be rebooted, causing Crap Router to hang.  Reboot both and all is good.
  • Rebuild Hyper-V lab all night.  Finall finish at 3:45 AM EDT.  AD = Windows Server 2016 TP5, new DNS, DHCP, SCCM site, Orchestrator, shebang, kapow, sha-wing!
  • Bed time: 4:00 AM EDT


  • Not sure what day it is.  Start pondering the concept of time zones and the IDL.  Mind = blown.  What will happen when we colonize Mars and they have different day hours, weeks, months, years?  Imagine scheduling meetings?  “How about Tuesday at 4:30 PM PST, which will be Friday at 8:45 AM Zone 33 for you?”  A whole new crop of software will emerge just to deal with that, I’m sure.
  • Wak up 8:15 AM EDT
  • 8:30 AM EDT – first customer call
  • More calls, internal and external
  • Ex-boss calls to inquire about scheduling a lunch with another ex-coworker.  Irony that both became an “ex-” by way of being laid off from two separate employers.  Social stuff is bizarre.
  • Crawl under my son’s broken Mercury Grand Marquis to try to remove the solenoid with a cheap torx wrench.  EVERYTHING is in the way, including exhaust pipe, catalytic converter, and chassis cross member.  Mosquitoes are biting the absolute shit out of every part of my exposed body that I cannot reach in my position under the car.  I swear loudly.  Neighbor is walking dog along street out front and pauses to hear me cursing under the car things like “you little motherfuckers! I will tear your little fucking heads off and shit down your little fucking necks! You will die!”
  • Neighbors speeds up walking pace, dragging dog behind him.
  • Finally up to 50 push-ups again, and now up to 8 pull-ups.  Still only 10 sit-ups.
  • Bed time: 2:30 AM EDT


  • Finalize MS Ignite conference travel plans and session sign-ups.
  • Customer B informs me that I need to be “on site” in Charlotte the week of 9/19, 10/3, and 10/10, with the week of 9/26 at Ignite in Atlanta.
  • Mention to wife and kids.  No reaction.  Mention to dog #2 and get a tail wag.  I’m batting .500!
  • I watch a little bit of the Apple event.  Start wondering how things would be if Steve was still alive and goose-stepping all over the Cupertino campus.  iPhone 7 would probably not be anything like this.  Nor the watch.
  • Customer C calls with request to deploy 1,000 upgrades from Office 2013 to 2016 in 3 days.  Machines are spread over 7 locations around the US.  No SCCM or similar product available.  No access to GPOs (different team, internal politics/fighting), and unwilling to consider PowerShell.  They insist on making a separate install share at each office and use a .BAT script to deploy by adding users to a domain security group.  Using a .BAT script to check AD group membership. I inhale, turn to my trusted dog and ask “are these people on some sort of methadone withdrawal thing or what?”  Dog stares back. I get her.
  • Customer B informs us that the “unknowns” will remain “unknown” until they’re “known” but the point at which the “unknowns” become “knowns” is still “unknown”.  What did he say?  I don’t know.
  • Take puppy #2 for late night walk around neighborhood.  She stops to eat wet clay from a truck tire.  Not good.
  • Bed time: 1:30 AM EDT


  • Landlord shows up at noon with new oven range.
  • Puppy #2 barks and cries without a break
  • I drop a cordless drill on my foot (wearing flip-flops).  Screwdriver bit penetrates top of left foot just between the metatarsals and ligaments (good thing I paid attention in biology class, huh?)
  • Puppy #2 cleans wound while I move heavy furniture back in place after oven range is moved in.
  • I call chiropractor to schedule a 1-1/2 hour adjustment + full body massage.  Hoping I get Olga, the stern Russian masseuse.
  • Sit down, have a glass of wine, and blog.

Have a nice weekend!🙂

Another SCCM SQL Query: SQL Server Hosts

Find Windows Server computers which have some version of SQL Server installed…

  dbo.v_R_System.Name0 AS [Name], 
  dbo.v_R_System.ResourceID AS ResourceID,
  dbo.v_R_System.SMS_Unique_Identifier0 AS [GUID],
  dbo.v_R_System.Resource_Domain_OR_Workgr0 AS Domain,
  dbo.v_R_System.AD_Site_Name0 AS ADSiteName,
  dbo.v_R_System.Client0 AS Client 
FROM dbo.v_R_System 
  ON dbo.v_GS_ADD_REMOVE_PROGRAMS.ResourceID = dbo.v_R_System.ResourceId 
  INNER JOIN dbo.v_GS_System
  ON dbo.v_GS_SYSTEM.ResourceId = dbo.v_R_System.ResourceId 
  (dbo.v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 LIKE 'Microsoft SQL Server%')
  (dbo.v_GS_SYSTEM.SystemRole0 = 'Server')