Pasando variable con propiedades a la lista de argumentos, perdiendo propiedades
-
11-12-2019 - |
Pregunta
$Computers = Get-QADComputer -sizelimit 5
Devuelve una lista de cinco computadoras.I bucle con
foreach($computer in $computers) {
echo "and then I can do this $computer.name"
para obtener solo el nombre computador de $ computadoras. Pero cuando intento pasarlo al start-trabajo como este:
Start-Job -FilePath $ScriptFile -Name $Computer.Name -ArgumentList $Computer
No puedo hacer una computadora $. Nombre dentro de $ ScriptFile.Tengo que pasarlo como $ Computer.Name y llámalo como $ args [0].Pero luego pierdo todas las demás propiedades (estoy usando un grupo dentro de $ ScriptFile).
¿Qué no estoy llegando aquí?¿Cómo llamarías $ computadora?¿Y qué llamarías $ Computer.Name?
SUNE :)
Solución
Debe poder obtener la propiedad Nombre con $ Args [0] .Name.Si desea acceder al parámetro Nombre, así: $ Computer.Name, entonces necesita definir un parámetro en $ ScriptFile:
param(
$Computer
)
$Computer.name
Por cierto, no puedes hacer esto:
echo "and then I can do this $computer.name"
PowerShell expande solo el valor $ computadora.Póngalo en una sub-expresión:
echo "and then I can do this $($computer.name)"
Otros consejos
Exactamente así, así es como escribiría algo similar:
#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
}
Puede recuperar los trabajos como este:
#Retrieve Jobs
Get-Job | Receive-Job