Передача переменной со свойствами в список аргументов, потеря свойств - PullRequest
0 голосов
/ 11 марта 2012
$Computers = Get-QADComputer -sizelimit 5

возвращает список из пяти компьютеров. Я зацикливаюсь на

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

чтобы получить только имя компьютера из $ computers. Но когда я пытаюсь передать его на работу, как это:

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

Я не могу сделать $ computer.name внутри $ scriptfile. Я должен передать его как $ computer.name и назвать его как $ args [0]. Но затем я теряю все остальные свойства (я использую кучу внутри $ scriptfile.)

Что я не получаю здесь? Как бы вы назвали компьютер? И что бы вы назвали $ computer.name?

Суни:)

Ответы [ 2 ]

5 голосов
/ 11 марта 2012

Вы должны иметь возможность получить свойство Name с помощью $ args [0] .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)"
0 голосов
/ 11 марта 2012

Точно так, вот как я бы написал что-то похожее:

#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
...