SCCM Powershell非常详细的“部署状态”消息

时间:2018-09-08 03:00:40

标签: powershell sccm

这里是SCCM的新用户,请宽恕术语。

我正在尝试获取有关使用Powershell部署Task序列的Deployment的详细进度消息。下面的命令显示了部署的状态,但是我想显示任务序列中每个步骤的状态消息。

管理控制台在

下显示此数据

监视->部署->资产详细信息->双击设备->单击状态选项卡。状态选项卡包含以下列。执行时间,步骤,动作名称,组名称,姓氏名称,姓氏ID,退出代码,动作输出

{{1}}

版本:SCCM 1802

1 个答案:

答案 0 :(得分:1)

我认为没有方便的powershell cmdlet来获取此信息,但是,由于控制台中的所有信息基本上都是通过wmi来自站点服务器的,因此您可以使用与控制台完全相同的方式来进行操作。

要弄清楚有一个日志文件“ SMSProv.log”如何告诉您控制台对打开的每个对话框的作用,将是一件好事。它位于站点服务器上您在子文件夹“日志”中安装ConfigMgr的位置(因此默认值为%Program Files%\ Microsoft Configuration Manager \ Logs)。

如果按照说明打开状态标签后进行检查,则会显示两个命令行:

WMI:

SELECT * FROM SMS_TaskSequenceExecutionStatus WHERE AdvertisementID='<DeploymentID>' AND PackageID='<PackageID>' AND ResourceID='<ResourceID>' ORDER BY Step

SQL:

select  all __askSequenceExecutionStatus0.ActionName,__askSequenceExecutionStatus0.ActionOutput,__askSequenceExecutionStatus0.AdvertisementID,__askSequenceExecutionStatus0.ExecutionTime,__askSequenceExecutionStatus0.ExitCode,__askSequenceExecutionStatus0.GroupName,__askSequenceExecutionStatus0.LastStatusMsgID,__askSequenceExecutionStatus0.LastStatusMsgName,__askSequenceExecutionStatus0.PackageID,__askSequenceExecutionStatus0.ResourceID,__askSequenceExecutionStatus0.Step from vSMS_TaskSequenceExecutionStatus AS __askSequenceExecutionStatus0  where ((__askSequenceExecutionStatus0.AdvertisementID = '<DeploymentID>' AND __askSequenceExecutionStatus0.PackageID = '<PackageID>') AND __askSequenceExecutionStatus0.ResourceID = '<ResourceID>') order by __askSequenceExecutionStatus0.Step

您可以同时使用两者来获取信息。一般规则是WMI在权限管理方面更好,但是对于复杂的事情,sql可以快很多。如果您想使用更多数据进行复杂的联接,而不仅仅是控制台显示的联接,这也是唯一可行的方法。 (它还需要更多权限,因为您必须直接连接到sccmdb才能使用它)

因此,根据您的情况,使用WMI可能会更容易。所以你会用类似的东西:

gwmi -ComputerName <SiteServer>-Namespace 'Root\SMS\site_<SiteCode>' -Query "SELECT * FROM SMS_TaskSequenceExecutionStatus WHERE AdvertisementID='<DeploymentID>' AND PackageID='<PackageID>' AND ResourceID='<ResourceID>' ORDER BY Step"

,然后从那里开始。如果您喜欢SQL,它将稍微复杂一点(此代码会产生某种形式的csv输出,但您当然也可以产生自己的对象)

$connStr = "Server=<sccm db server>;Database=<sccm db>;Integrated Security=SSPI"
$SQLConnection = New-Object System.Data.SqlClient.SqlConnection
$SQLConnection.ConnectionString = $connStr
$SQLConnection.Open()

$SQLQuery = "select  all __askSequenceExecutionStatus0.ActionName,__askSequenceExecutionStatus0.ActionOutput,__askSequenceExecutionStatus0.AdvertisementID,__askSequenceExecutionStatus0.ExecutionTime,__askSequenceExecutionStatus0.ExitCode,__askSequenceExecutionStatus0.GroupName,__askSequenceExecutionStatus0.LastStatusMsgID,__askSequenceExecutionStatus0.LastStatusMsgName,__askSequenceExecutionStatus0.PackageID,__askSequenceExecutionStatus0.ResourceID,__askSequenceExecutionStatus0.Step from vSMS_TaskSequenceExecutionStatus AS __askSequenceExecutionStatus0  where ((__askSequenceExecutionStatus0.AdvertisementID = @DeploymentID AND __askSequenceExecutionStatus0.PackageID = @PackageID) AND __askSequenceExecutionStatus0.ResourceID = @ResourceID) order by __askSequenceExecutionStatus0.Step"

$SQLCommand = New-Object System.Data.SqlClient.SqlCommand($SQLQuery, $SQLConnection)
[Void]$SQLCommand.Parameters.AddWithValue("@DeploymentID", "<DeplyomentID>")
[Void]$SQLCommand.Parameters.AddWithValue("@PackageID", "<PackageID>")
[Void]$SQLCommand.Parameters.AddWithValue("@ResourceID", "<ResoruceID>")
$reader = $SQLCommand.ExecuteReader()

if ($reader.HasRows) {
    while($reader.Read()) {
        $line = ""
        for ($i=0; $i -lt $reader.FieldCount; $i++) {
            $line += $reader[$i].ToString() + ","
        }
        $line
    }
}
$SQLConnection.Close()