Pergunta

$Computers = Get-QADComputer -sizelimit 5

retorna uma lista de cinco computadores.eu faço loop com

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

para obter apenas o nome do computador de $computers.Mas quando tento passar para start-job assim:

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

Não consigo fazer um $computer.name dentro de $scriptfile.Eu tenho que passar como $computer.name e chamá-lo como $args[0].Mas então perco todas as outras propriedades (estou usando várias dentro de $ scriptfile).

O que não estou entendendo aqui?Como você chamaria $computador?E como você chamaria $computer.name ?

Sun :)

Foi útil?

Solução

Você deve conseguir obter a propriedade Name com $args[0].Name.Se você quiser acessar o parâmetro name assim:$computer.name, então você precisa definir um parâmetro em $ScriptFile:

param(
   $Computer
)

$Computer.name

A propósito, você não pode fazer isso:

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

O PowerShell expande apenas o valor $computador.Coloque-o em uma subexpressão:

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

Outras dicas

Exatamente assim, é assim que eu escreveria algo semelhante:

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

Você pode então recuperar os trabalhos assim:

#Retrieve Jobs
Get-Job | Receive-Job
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top