2017-01-12 1 views
1

En Powershell Je suis en train de faire ce qui suit:powershell attente de commande pour terminer avant de poursuivre

$name = "computername" 
#get installed programs 
Write-Host "****APPLICATIONS" 
gwmi win32_Product -ComputerName $name | select name 

#gets services 
write-host "****SERVICES" 
Get-Service -ComputerName $name | ft 

le résultat attendu serait

****APPLICATIONS 
name 
of 
app 

****SERVICES 
running services here 
more services here 

le résultat réel est

****APPLICATIONS 
****SERVICES 
name 
of 
app 
running services here 
more services here 

J'ai essayé de faire start-job puis wait-job, mais exécuter gwmi comme un travail semble rien de sortie à la console et envoyer la sortie vers un fichier séparé défaites dans le but d'autres parties du script

J'ai aussi tenté d'utiliser start-sleep et il termine encore deux write-host commandes avant de poursuivre

+0

Bien que Win32_Product puisse fonctionner, il est généralement considéré comme un mauvais moyen de récupérer des informations sur les logiciels installés. Même les Hey Scripting Guys de Microsoft ont écrit des articles sur la gravité de cette situation. Je suggère de regarder [cette réponse] (http://stackoverflow.com/a/25268564) pour une alternative plus rapide. – StephenP

Répondre

0

Essayez ceci:

$name = "computername" 
Write-Host "`n****APPLICATIONS`n" 
gwmi win32_Product -ComputerName $name | % {$_.name} 
write-host "`n****SERVICES" 
Get-Service -ComputerName $name | ft 

Si vous voulez que les résultats par ordre alphabétique:

$name = "computername" 
Write-Host "`n****APPLICATIONS`n" 
$apps = gwmi win32_Product -ComputerName $name | % {$_.name} 
$apps | sort 
write-host "`n****SERVICES" 
Get-Service -ComputerName $name | ft 
+0

cela fonctionne parfaitement, pourriez-vous expliquer un peu ce que le 'n fait ici? Je n'ai jamais vu cette notation dans PowerShell – user19702

+0

@ user19702 - C'est pour newline. Il rend simplement la sortie plus facile à lire en mettant une ligne vide entre les ensembles de données. Sans ces caractères, il n'y aurait pas d'espace entre les lignes 'Write-Host' et les listes d'applications et de services. Si vous voulez voir la différence, vous pouvez les supprimer et l'exécuter. –

0
Param(
    $ComputerName = 'AT805061' 
) 

# Get installed programs 
Write-Host "`n****APPLICATIONS`n" 
Get-WmiObject win32_Product -ComputerName $ComputerName | Select-Object -ExpandProperty Name | Sort-Object 

# Get services 
Write-Host "`n****SERVICES`n" 
Get-Service -ComputerName $ComputerName | Where-Object -Property Status -eq -Value Running | Select-Object -ExpandProperty Name | Sort-Object 
+0

Vous devriez essayer un bloc de paramètres au lieu d'une variable. De cette façon, vous pourriez être comme "C: \ Scripts \ ComputerInfo.ps1 -ComputerName MyComputer1" et il exécuterait le script avec ce paramètre. –

+0

Aussi, je crois que vous avez juste besoin de modifier votre script pour étendre la propriété Name aux chaînes. Ils seraient actuellement du type: Selected.System.Management.ManagementObject –

+0

Ajout du tri et sélection seulement des services en cours d'exécution. –