使用wmi c#获取SCCM 2012任务序列的位置

时间:2017-04-18 12:53:16

标签: c# wmi wmi-query sccm

我正在尝试使用wmi识别任务序列所在的位置,以便我只能获取存储在特定子文件夹中的特定任务序列。

例如,在“软件库>概述>操作系统>任务序列”下的SCCM配置管理器中,我有一个名为“LIVE”的文件夹,这是我要查询的任务序列所在的位置。我遇到的问题是还有一些其他文件夹包含我想忽略的任务序列(在“任务序列”下)。

我可以使用

获取所有任务序列
select * from SMS_TaskSequencePackage

但任何属性下都没有位置。

1 个答案:

答案 0 :(得分:1)

我不擅长编写C#,但我们肯定可以使用PowerShell和WMI查询来获取特定文件夹中的对象。

在此之前,我们需要首先了解特定文件夹的 ContainerNodeID 。有很多方法可以实现它。例如,我们使用query:

$node = Get-WmiObject -Namespace ROOT\SMS\SITE_pri -class sms_objectcontainernode | Where-Object {$_.name -eq "folder1"}  
$nodeID = $node.containerNodeID

然后我们可以使用下面的行来获取此节点中的所有对象。 20 是任务序列文件夹类型。

$items = Get-WmiObject -Namespace root\sms\site_pri -Class sms_objectcontaineritem | Where-Object {$_.objectType -eq '20' -and $_.containerNodeID -eq $nodeID }  

这里我们获取Folder1中的所有对象。如果我们想要获取此文件夹中的所有任务序列属性,我们可以在下面添加:

$key = $items.instancekey
$tasksequences = Get-WmiObject -Namespace root\sms\site_pri -class sms_tasksequencepackage | Where-Object {$_.packageID -in $key}
$tasksequences

所以完整的脚本都是:(更改foldername和siteID)

$node = Get-WmiObject -Namespace ROOT\SMS\SITE_pri -class sms_objectcontainernode | Where-Object {$_.name -eq "folder1"} 
$nodeID = $node.containerNodeID
$items = Get-WmiObject -Namespace root\sms\site_pri -Class sms_objectcontaineritem | Where-Object {$_.objectType -eq '20' -and $_.containerNodeID -eq $nodeId }
$key = $items.instancekey
$tasksequences = Get-WmiObject -Namespace root\sms\site_pri -class sms_tasksequencepackage | Where-Object {$_.packageID -in $key}
$tasksequences