O R G A N I C / F E R T I L I Z E R: forcing a task sequence to rerun … from powershell

Nov 11, 2009

forcing a task sequence to rerun … from powershell

well, kind of.  steve rachui wrote this genius little gem about how to manage the instances of the configmgr agent scheduler to manipulate a task sequence to rerun.  as you’ll note in the post, he didn’t indicate a method to automate it.  this is actually rather easy to accomplish from powershell.

first of all, our example … we’ll use steve’s screenshots as reference.  here’s the id that we want to get rid of: CEN20018-CEN00027-DBBBC9D6.

to be quite veracious and unerring, we should use the exact task sequence id in question.  we can set that to a variable just for kicks.

$tsid = “CEN20018”
alright, now that we have that, let’s examine the command we’re going to use.  to get information out of wmi, we have to use the get-wmiobject cmdlet.  ordinarily, you could just provide the class name you want to look at, but as steve noted in his post, you need to connect to a different namespace: root\ccm\scheduler.  let’s retrieve all the classes of this namespace using –list.
get-wmiobject –namespace “root\ccm\scheduler” –list
here’s a snippet of the expected output:
__Win32Provider {} __SystemSecurity {GetSD, GetSecuri.. CCM_Scheduler_History {} __NotifyStatus {} __ExtendedStatus {} __SecurityRelatedClass {}

ah, there we go.  the class we’re looking for is ccm_scheduler_history.  next thing we’ll do is pull the instances of this class.  if we just pull the class, it’ll be quite a nasty output, so let’s concentrate on what’s important for now: the schedule id.

Get-WmiObject -Namespace "root\ccm\scheduler" -Class ccm_scheduler_history | ft scheduleid

now we get a succinct output of just the schedule ids.  there’s the schedule id we’re looking for!


let’s pull it all together and see how it looks.

Get-WmiObject -Namespace "root\ccm\scheduler" -Class ccm_scheduler_history | where { $_.scheduleid -like "$tsid*" }

perfect.  now we got back the right instance of the class.  i’m going to set this to a new variable called $tsinstance because i’m just that creative.

$tsinstance = Get-WmiObject -Namespace "root\ccm\scheduler" -Class ccm_scheduler_history | where { $_.scheduleid -like "*$tsid*" }

now, finally, we’re to the point where we can get rid of the thing.  so … how?  well… as it turns out, there’s a cmdlet for that.  all we need to do is pass the object to remove-wmiobject.  that just rocks.  here’s the finished command.

$instance | Remove-WmiObject

and if you just want one long command, here’s that as well:

Get-WmiObject -Namespace "root\ccm\scheduler" -Class ccm_scheduler_history | where { $_.scheduleid -like '*CEN20018*' } | Remove-WmiObject