问题描述
我有一个大型脚本,可以在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]