Passage de la variable avec des propriétés à l'argumentation, de perdre des propriétés
-
11-12-2019 - |
Question
$Computers = Get-QADComputer -sizelimit 5
retourne une liste de cinq ordinateurs.Je boucle avec
foreach($computer in $computers) {
echo "and then I can do this $computer.name"
Pour obtenir uniquement le nom d'ordinateur de $ d'ordinateurs. Mais quand j'essaie de le transmettre au démarrage comme ceci:
Start-Job -FilePath $ScriptFile -Name $Computer.Name -ArgumentList $Computer
Je suis incapable de faire un ordinateur $ Computer.nom Insided $ ScriptFile.Je dois le transmettre comme $ ordinateur.nomez-le et appelez-le comme $ args [0].Mais ensuite, je perds toutes les autres propriétés (j'utilise un groupe Insided $ ScriptFile.)
Qu'est-ce que je ne passe pas ici?Que voudriez-vous appeler $ ordinateur?Et que voudriez-vous appeler $ ordinateur.nom?
SUNE :)
La solution
Vous devriez être capable d'obtenir la propriété Nom avec $ args [0] Nom. Nom. Nom.Si vous souhaitez accéder au paramètre Nom comme SO: $ ordinateur.name, vous devez définir un paramètre en $ scriptfile:
param(
$Computer
)
$Computer.name
Au fait 'Vous ne pouvez pas faire cela:
echo "and then I can do this $computer.name"
PowerShell élargit uniquement la valeur $ Ordinateur.Mettez-le dans une sous-expression:
echo "and then I can do this $($computer.name)"
Autres conseils
Exactement, voici comment j'écrirais quelque chose de similaire:
#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
}
Vous pouvez ensuite récupérer les travaux comme celui-ci:
#Retrieve Jobs
Get-Job | Receive-Job