将带有属性的变量传递给argumentlist,丢失属性

时间:2012-03-11 15:18:57

标签: powershell arguments start-job

$Computers = Get-QADComputer -sizelimit 5

返回五台计算机的列表。我循环

foreach($computer in $computers) {
echo "and then I can do this $computer.name"

只从$计算机中获取计算机名称。 但是,当我试图将它传递给这样的开始工作时:

    Start-Job -FilePath $ScriptFile -Name $Computer.Name -ArgumentList $Computer

我无法在$ scriptfile中执行$ computer.name。我必须像$ computer.name一样传递它并将其称为$ args [0]。但后来我放弃了所有其他属性(我在$ scriptfile中使用了一堆。)

我没有到这里来的?你会叫什么电脑?那你叫什么叫$ computer.name?

淑娜:)

2 个答案:

答案 0 :(得分:5)

您应该能够使用$ args [0] .Name获取Name属性。如果你想访问name参数,如下所示:$ computer.name,那么你需要在$ ScriptFile中定义一个参数:

param(
   $Computer
)

$Computer.name

顺便说一下'你不能这样做:

echo "and then I can do this $computer.name"

PowerShell仅扩展$ computer的值。把它放在一个子表达式中:

echo "and then I can do this $($computer.name)"

答案 1 :(得分:0)

确切地说,这就是我写一些类似的东西:

#Get Services
$Services = Get-Service
#Limit results to the first 5 entries
$Services = $Services[0..4]
#Loop through services
foreach ($Service in $Services)
{
    #For each Service run a basic echo to host to prove that the Service was passed in successfully
    Start-Job -ScriptBlock { param ($Service) Write-Host "Service Name is $($Service.Name)" } -ArgumentList $Service
}

然后您可以像这样检索作业:

#Retrieve Jobs
Get-Job | Receive-Job