【问题标题】:Get Location of SCCM 2012 Task Sequence using wmi c#使用 wmi c# 获取 SCCM 2012 任务序列的位置
【发布时间】:2017-04-18 12:53:15
【问题描述】:

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

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

我可以使用

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

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

【问题讨论】:

    标签: c# wmi wmi-query sccm


    【解决方案1】:

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

    在此之前,我们需要先知道具体文件夹的ContainerNodeID。有很多方法可以得到它。例如,我们使用查询:

    $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
    

    所以所有完整的脚本是:(更改文件夹名称和站点ID)

    $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
    

    【讨论】:

    • 感谢这有助于加载,我设法仅针对我需要的任务序列。通过查询 sms_objectcontainernode 和 sms_objectcontaineritem 获取 ID,我就能够获取 PackageIds。
    最近更新 更多