代码之家  ›  专栏  ›  技术社区  ›  Rakha

SCCM Powershell-检索“lazy”属性

  •  0
  • Rakha  · 技术社区  · 7 年前

    假设我跑步:

    Get CMDeployment-CollectionName“gar25*”|选择CollectionName、ApplicationName、PackageID、DeploymentTime、EnforcementDeadline | out gridview

    enter image description here

    这为我提供了与一个用户关联的多个部署所需的所有信息,但“EnforcementDeadline”的值为空,我猜这是一个惰性属性。 我该如何取回它?我发现这篇文章:

    https://trevorsullivan.net/2010/09/28/powershell-configmgr-wmi-provider-feat-lazy-properties/#comment-3628074206

    但我真的很难适应代码。

    非常感谢您抽出时间。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Frode F.    7 年前

    EnforcementDeadline 是应用程序部署的属性。您试图从不存在的包部署中读取它,因为它们可以有多个分配的时间表,这些时间表可以是一次性的,也可以是重复的(例如每天)。如果您使用 Get-CMApplicationDeployment Get-CMPackageDeployment 您将获得正确类型的对象,以便访问这些值。

    我包含了一个示例,该示例将检测部署是否用于包并检索 StartTime -它的时间表的值(我假设它们是不可恢复的)。

    $DeadlineColumn = @{
        Name="EnforcementDeadline"
        Expression={
            if($_.FeatureType -eq 2 -or $_.FeatureType -eq 7) {
                #Package or task sequence
                #Get assignment-starttime (ignoring daily/hourly etc.)
                (Get-CMPackageDeployment -DeploymentId $_.DeploymentID).AssignedSchedule | Select-Object -ExpandProperty StartTime
            } else {
                #Application
                $_.EnforcementDeadline
            }
        }
    }
    
    Get-CMDeployment -CollectionName "abc" | select CollectionName, ApplicationName, PackageID, DeploymentTime, $DeadlineColumn | out-gridview
    
        2
  •  0
  •   Rakha    7 年前

    @弗罗德·F。我真是太感谢你了,这太完美了,也节省了时间。这是我的最终解决方案:

    $DeadlineColumn = @{
        Name="EnforcementDeadline"
        Expression={
            if($_.FeatureType -eq "2" -or $_.FeatureType -eq "TaskSequence") {
    
                (Get-CMPackageDeployment -DeploymentId $_.DeploymentID).AssignedSchedule | Select-Object -ExpandProperty StartTime
            } else {
                (Get-CMTaskSequenceDeployment -DeploymentId $_.DeploymentID).AssignedSchedule | Select-Object -ExpandProperty StartTime
            }
        }
    }
    
    
    $ExpirationColumn = @{
        Name="ExpirationTime"
        Expression={
            if($_.FeatureType -eq "2" -or $_.FeatureType -eq "TaskSequence") {
    
                (Get-CMPackageDeployment -DeploymentId $_.DeploymentID).ExpirationTime 
            } else {
                 (Get-CMTaskSequenceDeployment -DeploymentId $_.DeploymentID).ExpirationTime 
            }
        }
    }
    
    Get-CMDeployment -CollectionName "gar25*" | select CollectionName, ApplicationName, PackageID, DeploymentTime, $DeadlineColumn, $ExpirationColumn | out-gridview
    

    它始终返回包和部署!

    enter image description here