Sunday, August 31, 2014

It's Time for a Change...

My first post on this blog was back in December 2007.  It's been my release, my therapy, and my toy ever since.   It's been there when my life when very bad, and very good.  But, after seven (7) years of waiting for Google to add some much-needed tools to Blogger, I've finally had to accept the fact that they're not listening.

Blogging just isn't on the Google radar anymore it seems, at least not for little independent blabber-mouths like myself.  Therefore, finally giving in to what many other bloggers have suggested I do long ago: I'm moving my blog to Wordpress.  Wordpress seems to be interested in keeping the blog idea alive and evolving.  I hope this doesn't upset or inconvenience anyone, but hopefully you'll continue reading my stuff.  Thank you!


Wednesday, August 27, 2014

About My Other Blog: Scriptzilla

I've been so "head-down" into multiple projects, work life, home life, no life, that I haven't really put any effort into my other techie-centric blog: "Scriptzilla".  It's worth noting that there are other web sites and products using that name, but I am only affiliated with the one mentioned/linked herein.

I will be putting more work into the Scriptzilla blog as a means for offloading tons and tons of script code I've amassed over the past 30 years in I've spent in IT.  Some of it will be mundane, common stuff, which is very similar to what could be found in a Google search.  Some of it will be very unique and uncommon.  And some will just be somewhere in the middle.  But it will be.

Tuesday, August 26, 2014

The Missing SCCM Database View

For most interfaces I've worked on over the past ten years, which involve poking a stick at System Center Configuration Manager 2007 or 2012, this is one database view (or stored proc) that I'm usually building for myself.  It basically tosses about eight built-in Views and Tables into a blender, with a dash or two of stupid sauce and provides a fairly good picture of each computer in your site database.

It spews out the computer name, client info, site code, manufacturer, model, memory, Windows flavor, chassis type (I didn't cross-join that to produce names, but you can do that, I'm too lazy right now), BIOS info and serial number, CPU, AD stuff, install date, and of course, my personal favorite: the SCCM distribution point reference.  Note that I've provided a fall-back DP name for those which are not explicitly mapped via a site boundary, so they come back home to an MP usually (not always).  I used "DP0001" but you should stuff your own name in place of that.


v_R_System.Client0 AS ClientInstalled,
v_R_System.Client_Version0 AS ClientVersion,
v_R_System.Creation_Date0 AS ClientDate,
v_RA_System_SMSAssignedSites.SMS_Assigned_Sites0 AS SiteCode,
v_GS_COMPUTER_SYSTEM.Manufacturer0 AS Manufacturer,
v_GS_COMPUTER_SYSTEM.SystemType0 AS SystemType,
v_GS_X86_PC_MEMORY.TotalPhysicalMemory0 AS Memory,
v_GS_SYSTEM_ENCLOSURE.ChassisTypes0 AS ChassisType,
v_GS_SYSTEM_ENCLOSURE.SerialNumber0 AS SerialNumber,
v_GS_PC_BIOS.Manufacturer0 AS BIOSvendor,
v_GS_PC_BIOS.ReleaseDate0 AS BIOSdate,
v_R_System.AD_Site_Name0 AS ADSiteName,
v_GS_OPERATING_SYSTEM.InstallDate0 AS OSInstallDate,
COALESCE (ProtectedSiteSystem_ARR.ServerName, 'DP0001') AS DPServer
FROM dbo.ProtectedSiteSystem_ARR AS ProtectedSiteSystem_ARR
dbo.v_BoundaryInfo AS v_BoundaryInfo
ON ProtectedSiteSystem_ARR.BoundaryID = v_BoundaryInfo.BoundaryID
dbo.v_R_System AS v_R_System INNER JOIN
ON v_R_System.ResourceID = v_GS_PROCESSOR.ResourceID
ON v_R_System.ResourceID = v_GS_COMPUTER_SYSTEM.ResourceID
ON v_R_System.ResourceID = v_GS_SYSTEM_ENCLOSURE.ResourceID
ON v_R_System.ResourceID = v_GS_X86_PC_MEMORY.ResourceID
ON v_R_System.ResourceID = v_GS_OPERATING_SYSTEM.ResourceID
dbo.v_GS_PC_BIOS AS v_GS_PC_BIOS ON v_R_System.ResourceID = v_GS_PC_BIOS.ResourceID
dbo.v_RA_System_SMSAssignedSites AS v_RA_System_SMSAssignedSites
ON v_R_System.ResourceID = v_RA_System_SMSAssignedSites.ResourceID
ON v_BoundaryInfo.Value = v_R_System.AD_Site_Name0
ORDER BY v_R_System.Name0

To test this out, open your SQL Management Studio.  Connect to your site database server and site database instance.  Then click "New Query" and paste the code in and press F5 to run it.  Add a splash of your favorite alcoholic beverage, some Barry White music, dim the lights, and enjoy the vibe.  Peace.

Wednesday, August 20, 2014

The Most Destructive Force in the IT Operations World

What's more important:  Your job and income, or your personal right to get what you want?  Back up a second.  Do you even have a right to get what you want?  I'm talking about within the employer/employee relationship realm of course.  Legally speaking however, even in your personal life, you have no such guarantee of that "right" whatsoever.  You barely have a right to "pursue happiness", but even that has conditions taped all over it.  But, back to the question at-hand...

Which is more important:  The success of your employer, or your job?

If you said your job is more important, than you are like most Americans after a few beers or Xanax pills.  When they open up and give up on resisting their honest opinions.

This is aimed squarely at you folks who work in IT shops which are part of larger companies and organizations.  Big enough to have a "CIO" or maybe even a "CTO".

Based on discussions, emails, and social media indications, all anecdotal of course, but tempered with 30-plus years of working in the IT world (I'm allowed to add some seasoning to this meal), here's 5 examples of what most IT professionals seem feel about their jobs:

  1. They don't feel their opinions are given much value.
  2. They don't have confidence in their upper management as it pertains to decisions revolving around technology.
  3. They feel too much focus is on a dollar, rather than a solution, and that in most cases, the proper solution would yield more profit.
  4. They feel upper management is too easily swayed by articles and vendor marketing pressure.
  5. They don't feel that their skills are being used properly or effectively.

Adding to item 3 above:  If your business doesn't match every cost-cutting move with a revenue-generating move at the SAME time, the business is doomed. You can only control revenue bleeding for so long, but unless you start work immediately on the healing part, the patient is going to die.

It seems that in the great American race to satisfy shareholders, win awards for revenue goals, and securing that big contract announcement, we lost sight of the really cool part of American business:  Innovation.  I'm not talking about tweaking and optimizing.  ANYONE can do that.  Innovation however is different.  In 2014 when it comes to setting our sights on innovation, we might as well be Stevie Wonder in a dark forest with an unloaded gun.

In fact, we're not even sitting on the right mountain anymore.  We sold that off to foreign interests.  America has ripened like a fat grape, and how we practically begging the rest of the world to come and pick away.  $5.99 a pound.  America, it seems, has outdone itself in the area of empowering every individual with the unwavering belief that they themselves are most important, and all other things are less important.

But getting back to the soul of this rant:  what is the "most destructive force" in the IT operational world?


If you can't put ego aside to focus on the good of your business, well, you're fucked.  Sorry if my language offends, but that's the honest truth.

Some exercises that may help mitigate the effects of ego on your business:  Line your staff up and have them repeat the following phrases aloud:

1. I am not a master of anything, but I'm trying my best every day.
2. I will put aside my personal emotions to do my job the best that I can.
3. I will research everything before claiming I have the best answer to a problem.
4. I will listen to all inputs before making a decision.
5. I am not indispensable.  Graveyards are filled with indispensable people.

If you can't manage to get your team to buy into this, then try it yourself.

And then, ask yourself this:  Am I doing this task right now for the sake of being truly innovative, or to meet some deadline or cost-control initiative?

My New Book is Out! The AutoCAD 2015 Network Administrator's Bible

"The AutoCAD 2015 Network Administrator's Bible" covers everything from new features and requirements, to building Network Deployment Shares, to deploying with Scripts, Microsoft Deployment Toolkit 2013, and System Center Configuration Manager 2012. 

There are also tips for working with VMware Workstation as a test environment,  handling .NET dependencies on Windows 7 and Windows 8, and slip-streaming updates and service packs during deployments.

I hope you like it. Please post feedback on the Amazon site to share your thoughts after checking it out? I'd really like to hear from you.


Tuesday, August 19, 2014

From the Book: .NET Framework 3.5, Windows 8 and AutoCAD 2015 Deployments

That title is not long enough.  If I want to provide product titles to Microsoft as a possible side business, I need to make the titles longer.  Like that will ever happen.  Anyhow, this post is based on a part of my recent ebook "The AutoCAD 2015 Network Administrator's Bible", and focuses on dealing with one particular road bump in deploying AutoCAD 2015 to Windows 8.x clients.

Windows 8 and .NET Framework 3.5

If you read through the documentation, one of the requirements for installing on Windows 8.x is to have the .NET Framework 3.5 feature enabled.  This feature is *not* enabled by default.  You can enable it via the Control Panel route, or from a command-line, via a script, or as part of your imaging process using MDT or SCCM as well.  Choices, choices, choices.

Why is this a big deal?  Maybe for you and your environment ,it's not a big deal at all.  But what if you want to deploy AutoCAD 2015 to 500, 1,000 or 10,000 computers, all of which are running Windows 8.1, but not all of them have .NET Framework 3.5 enabled?  Still feel excited about running around to touch each machine?  Even remoting into each one?  How about the time to concoct (or steal) a script to batch enable all of them?  Yes, you can do any or all of these.  The short story is:  There is no "one-size-fits-all" solution.

Option 1 - Scripting and Command-Line

If you don't have the luxury of using MDT or SCCM to do some of your heavy-lifting, you can still make-do with free features provided within Windows itself.  

But before I jump into this I would like to mention that unlike some other .NET Framework versions, 3.5 is a "feature" within Windows 8, rather than a downloaded update or service pack.  The binaries which are required to enable it are already embedded in the "\sources\sxs" folder beneath the Windows home directory.  The challenge tends to be that the contents of that folder within the original installation media, and the final result do not often match.  That's because Microsoft has opted to follow an admirable "reduced attack surface area" approach, which translates into putting the least amount of bits on the client as are needed.  The less code laying around, the fewer potential targets exist to be exploited.

So, how do you enable it?  DISM is one good day.

DISM, or Deployment Image Servicing Management command, is part of Windows 7 and 8.  It actually began life earlier, but has been fine-tuned with each new Windows release.  Among it's many features, are options to enable and disable Windows features. The most-basic form of the command for this topic is:

dism /OnLine /Enable-Feature /FeatureName:NetFx35 /All

However, you may want to tack on a few extra optional parameters (or "switches" as some prefer to say) to provide more control over how it behaves.

/LimitAccess - this option tells DISM *not* to try to reach out to an internal WSUS server to find the source binarines, but instead to look somewhere locally.

/Source - this option tells DISM that you are going to provide a specific path from which to load the source binaries.  Actually, it should read "/Source:" where "" is something that actually contains the correct files, like "c:\temp\sxs" or "\\SERVER1\sharename\files\sxs", etc.

If you're not really familiar with how the "side-by-side" (i.e. "sxs") folder works, and what it means, be careful!  If you are, then ignore the next sentence, but I know you'll read it anyway just to make sure I'm not incorrect and you can't wait to pounce all over me for screwing up.  The "sxs" folder uses special file links to avoid duplicating a lot of redundant bits. This is somewhat like how a .ZIP or .7Z or .TAR file works, in that it tries to reduce the overall amount of disk space used for storing the data.

Anyhow, beyond that, the "sxs" folder contents MUST match the same Windows version and skew that you intend to use them on.  So if you make a "sources\sxs" copy from a Windows 8.1 Professional disk or ISO image, and try to reference it for a Windows 8.1 Enterprise client, it's probably not going to work.  In most cases, it will chug away until around 60-65% and then crash with the error message:

"The source files could not be found."

Bummer. If the folder path is wrong and there are no files at all, that's one thing, but it usually bombs out sooner than 60% of the way through.

Option 2 - Imaging

Other options include bundling the feature (okay, "enabling" the feature) during the Windows installation process.  This is fine for provisioning new computers, or reimaging, but not so ideal for updating computers which are already part of the production environment.  You can however employ parts of MDT or SCCM to deploy to those computers, but that's technically not imaging then, is it?

Even within just one option such as MDT 2013, you have several routes you could take, from using a Custom Command-Line task, to employing a script, to setting a Task Sequence Variable to identify the sources folder path, and then use the Add Roles and Features task to handle the feature.  Who says the IT world is boring, huh?

Option 3 - Deployment Tools

This encompasses things like Packages or Applications within System Center Configuration Manager, as well as other tools like Altiris or what-have-you.  In short, you create a named instruction set that performs the desired tasks, and then target that to a group of computers to execute locally.  In SCCM, that could mean an Application with one or more Program entries, and a Deployment linked to a Collection.  You get the idea.  

It's not rocket science and it's not difficult to do, IF you have the environment up and running already.  The toughest part of these kinds of tools is standing them up.  Once they're operational (if designed and installed correctly), the rest is a matter of "using" the features.


I cover each one of these in far more detail within my book, and provide screen capture images of each step along the way.  I hope you will consider reading it and thank you for taking the time to read this!

Sunday, August 17, 2014

Random Thoughts: Evolutionary Obsolescence and Overlords

Sometimes when I've had enough coffee and/or beer, I drift off into thinking some concept "ahead" is it might likely evolve.  After reading a few articles about the arcane laws in the U.S. regarding personal use of solar energy, and others on 3D printing, it dawned on me that what we're seeing is the first inch of what will inevitably become a world in which we grow less dependent on the providings of others.

3D printing, for example, will enable us (in time) to create many of the things we have to purchase today.  Sure, we'll need to obtain the media from which the printer can generate objects.  But that's just for now.

The issue of solar energy for personal use, and the threat it poses to current energy companies like Dominion and Con-Ed sheds light on the concern they have that we (citizens) may not need their services in the future.  They are understandably worried, and are therefore busy lobbying our government folks to slow things down until they can figure a way to put a rope around it all, and remain relevant, and more importantly: remain in control of things.

But for now, we buy things made by others.  Imported from other places.  But someday, we will be able to make a lot of things ourselves, without leaving our homes.  As that situation evolves over decades and centuries, imagine where that might lead.  Imagine when we can truly make "anything" from some sort of device of our own control.  The power balances around the planet of "haves" and "have-nots" will surely shift in other directions.  In which directions we can't know at this point, but it will change for sure.

And when we can generate our own power, make our own contraptions, and not have to barter and trade for most things, what then?  What do humans do when they don't need other humans by necessity?  We will obviously still remain connected for social and personal reasons, but how about the impact that could have on incidental connections, such as getting to know the grocery store clerk, the bartender, the hair cutter, or the school teacher?  Even schools, and other places of collective presence may become obsolete, as we are increasingly able to get things like education at home.

Maybe some day, we will have developed the means to literally organize molecules to create anything we desire.  Alchemy realized.  We are already playing around with moving molecules without touching them (sort of), and moving beyond status quo measures of speed and velocity (link).  That means that it could be possible that even travel becomes advanced enough for us not to depend on airlines and passenger trains.  Who knows?

The more we evolve technologies, and the more they become increasingly affordable, the more scale this adds to the existing progressive curves of each.  The pace is getting faster with each turn.  What we once predicted to arrive in ten years, now arrives in five or six.  As another decade passes, that window shrinks even more, since the supporting technologies for generating new technologies are also improving. It's like a fire that feeds itself by feeding itself even faster.

Imagine a world where you won't *need* to leave your home to get food, water, or pay anyone else to get electricity, Internet connectivity (or whatever replaces the Internet by then), or to repair things that break around you?  Will we let that evolve on its own? Or will we see that coming and collectively work to install guardrails into this evolution so that we remain in "need" of each other to some extent?  Who knows.

Right now, you can build your own aircraft, but you must obtain a license and authorization to fly it, with some restrictions and allowances based on who you are, where you are, where you want to fly it, and what kind of aircraft you build.  Imagine the positive and negative implications if those restrictions and constraints were removed.

Time for a break.  Enjoy your weekend!


Coming Soon: The AutoCAD 2015 Network Administrator's Bible

It's long overdue.  I'm long overdue as well.  It's been a long time since I've devoted myself to writing anything about AutoCAD or network deployments.  I'm almost done with editing this book and it should be available for purchase on Amazon Kindle very soon.  Remember that you do not need a Kindle device to read Kindle books.  There are free Kindle reader apps for iOS, Android, Windows, Mac, and more.

Here's a summary of topics included:

  • Deploying with Scripts: Batch, VBScript, and PowerShell
  • Deploying with System Center Configuration Manager 2012
  • Deploying with MDT 2013
  • Using Task Sequences
  • Dealing with Requirements: .NET 3.5, using Global Conditions, etc.
  • ADNM
  • Deployment Shares
  • Network and Client Logs
  • Building a Virtual Test Environment with VMware Workstation
  • Stupid jokes.  Dumb comments.  Awkward silences.
  • And more!

Friday, August 15, 2014

5 Creative Ways to Settle Office Disputes

We've all been in the situation where two people strongly disagree on which direction to take with regards to a business or technical strategy.  One vendor or another.  One process or another.  One policy or another.  It can become very emotional at times, and often leads to lost productivity and bad feelings that can linger on for days, months or even years.  In many cases, the lingering emotional scarring can impact productivity and quality of services for everyone involved.  Well, there are some semi-proven ways to deal with these situations in professional, productive and positive ways.  And who doesn't like a gosh-darn 3-P solution to a problem?  Huh?  Golly.

Here's a short list of five (5) suggestions that might help improve the situation and make everyone feel better enough to give each other a big sloppy kiss, without any hidden sharp objects.

Tip 1- Jello Wrestling with a New Twist

This one works great regardless of the gender bias that may exist in the room.  Everyone has to consume 1 gallon of Jello powder mix, then drink a 1 liter bottle of soda, and then get in a ring and beat the living crap out of each other.  First one to puke all over their opponent, wins.

Tip 2 - Paperwork Shuffle

Everyone in office environments likes to brag about how they suffer with the most paperwork, email, IM calls, voicemails, and so on.  Perfect examples of "first world problems" if ever there were any.  Imagine trying to elicit tears from a starving mother and her starving group of babies, too famished to swat away the incessant swarm of flies and mosquitoes.  They will pity you for sure.  So how about putting your money where your mouth is, and challenge the opponent to produce enough evidence to back it up?  The one who shows up with the most weight (use an approved scale obviously), wins.

Tip 3 - Marching Band

When the other person won't shut up, start humming the tune to something familiar like "Glory Glory Hallelujah".  Start quiet at first, then gradually bring up the volume until you can barely catch your breath in between gasps to belt out that next glorius bar.  Bonus points can be earned by pretending to march in formation, by yourself of course, around the conference room.

Tip 4 - Zen

When the other person continues to argue their point, refusing to hear your side at all, just stare at them without blinking as long as you can possibly manage.  Never, and I repeat NEVER, blink or look at anything else in the room besides their eyes.  They are like source of energy.  Feed off of them.  If you can stare at them long enough, one of two things are most likely to happen next: (1) they will call security for help, or (2) they will scream like a wounded baby and run down the hall as if zombies are trying to eat them.  Either way, the original problem should now become moot.

Tip 5 - Levity

When violence fails to solve a problem, humor often stands a small chance of working.  That's what most of the infamous world fascist dictators would say, or so I've heard.  Try this instead of a gun or knife:  When the opponent begins to raise their voice and shake their head in disagreement over some aspect of the topic at hand, start stripping off clothing until you're only in your underwear.  Not all at once, but remove one piece of clothing after each time they speak a phrase in disagreement.  When they finally realize what's happening, look at them and wait.  If they remain silent, offer this, "if you stop now, I win.  If you continue on, I will have to add whipped cream to this and keep moving."

If you try any of these out, be sure to post a comment below to let us all know how it worked out?  We'd love to hear your thoughts on this.  Have a swell weekend!

Friday, August 8, 2014

Identify IE Version Installs using SCCM, SQL, Chewing Gum and Coffee

You could hunt down the Add or Remove Programs list, or tunnel your way through v_GS_INSTALLED_SOFTWARE_CATEGORIZED, or walk around with a clipboard and a baseball bat, or you could do it the easy way:  a SQL query against v_GS_SoftwareFile.  Be sure to change the database name tag to whatever your site code is.

[begin code]

USE your_site_database_name


  a.netbios_name0 COMPUTER_NAME, 
    WHEN PATINDEX('%.%',b.fileversion) = 3 THEN 
    WHEN PATINDEX('%.%',b.fileversion) = 2 THEN 
    ELSE SUBSTRING(b.fileversion,1,1) 
  dbo.v_R_System a LEFT OUTER JOIN 
  dbo.v_GS_SoftwareFile b ON a.ResourceID=b.ResourceID 
  filename LIKE 'iexplore.exe' AND Active0=1
  LTRIM(fileversion) <> ''

[end code]