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”
get-wmiobject –namespace “root\ccm\scheduler” –list
...
__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!
{00000000-0000-0000-0000-000000000027} {00000000-0000-0000-0000-000000000061} {00000000-0000-0000-0000-000000000011} {00000000-0000-0000-0000-000000000022} CEN20018-CEN00027-DBBBC9D6 {00000000-0000-0000-0000-000000000023} {00000000-0000-0000-0000-000000000031} {00000000-0000-0000-0000-000000000021}
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
Perfect! I found Steve's post and was trying to make it work through VBS but Powershell is even better. Thanks!
ReplyDeleteawesome! :)
Delete