无法获得Get-CMDeploymentType对象/数组的第一个值

问题描述

我有一个大型脚本,可以在SCCM中创建应用程序。该脚本的一部分是添加应用程序的权限

由于搜索可能的替代程序要花很长时间,因此我在后台作业中运行该程序

Script-Block for Background Job $Super_func1

#$SSeed has a Part of an App Name String that is optained from the Start-job Argument

$appoldname = Get-CMApplication | where-object {$_.LocalizeddisplayName -like "*$SSeed*" } | select-object-first 1 -Property LocalizeddisplayName
Get-CMDeploymentType -ApplicationName $appoldname.LocalizeddisplayName

我按照以下步骤开始


$job = @()
$job += Start-Job -ArgumentList @($AppSupersedence) -ScriptBlock $Super_func1

等待任务完成后,我收到了任务,并想访问AppModelName的第一个条目 并与该信息,我想运行Get-CMApplication -ModelName $ Modelname 应用程序可能有一个以上的结果(两个Deploymenttype),因此AppModelName可能有一个以上的值。

Wait-Job -job $job  | Out-Null

$deployment23 = receive-job -job $job -keep

但是我只能通过foreach循环访问第一个值。 这对我来说似乎很奇怪...所以我想我在做一些愚蠢的错误

#this does not work
 $result23 = Get-CMApplication -ModelName $deployment23.AppModelName(0) --> Error
#This does not work
 $arrayresultme = $deployment23.AppModelName(0) --> Error
#This does work
 foreach ($Modelname in $deployment23.AppModelName){
    $result23 = ""
    $result23 = Get-CMApplication -ModelName $Modelname
    break
 }

我得到的错误是:

因为[Deserialized.IResultObject#SMS_DeploymentType]不包含名为“ AppModelName”的方法,所以方法调用失败。

关于为什么我必须使用foreach的任何提示将不胜感激

解决方法

在PowerShell中,使用标准括号通常会尝试调用方法/函数。

要从数组中检索值,您需要使用方括号,如下所示:

Get-CMApplication -ModelName $deployment23.AppModelName[0]