2017-01-12 4 views
1

In Powershell fortfahren Ich versuche, die folgendes zu tun:Power Warten auf Befehl zu beenden, bevor

$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 

die erwartete Ausgabe wäre

****APPLICATIONS 
name 
of 
app 

****SERVICES 
running services here 
more services here 

das tatsächliche Ergebnis ist

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

Ich habe versucht, start-job dann wait-job tun, aber gwmi als Job scheint zu laufen zur Ausgabe nichts an die Konsole und die Ausgabe in eine separate Datei zu senden Niederlagen der Zweck von anderen Teilen des Skripts

ich start-sleep auch zu nutzen versucht, und es endet immer noch beide write-host Befehle vor

+0

Während Win32_Product möglicherweise funktioniert, wird es allgemein als eine schlechte Möglichkeit angesehen, Informationen über installierte Software abzurufen. Selbst die Hey Scripting Guys von Microsoft haben Artikel darüber geschrieben, wie schlecht es ist. Ich würde empfehlen, [diese Antwort] (http://stackoverflow.com/a/25268564) für eine schnellere Alternative zu betrachten. – StephenP

Antwort

0

Versuchen fortfahren dies:

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

Wenn Sie die Ergebnisse alphabetisch wollen:

$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

das funktioniert perfekt, könntest du ein bisschen erklären, was das hier macht? Ich habe nie diese Notation in Powershell gesehen – user19702

+0

@ user19702 - Das ist für Newline. Die Ausgabe wird dadurch einfacher lesbar, indem zwischen den Datensätzen eine Leerzeile eingefügt wird. Ohne diese Zeichen würde zwischen den Zeilen "Write-Host" und den Listen der Anwendungen und Dienste kein Platz sein. Wenn Sie den Unterschied sehen möchten, können Sie sie entfernen und ausführen. –

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

Sie sollten einen Parameterblock anstelle einer Variablen versuchen. Auf diese Weise könnten Sie wie "C: \ Scripts \ ComputerInfo.ps1 - Computername MyComputer1" aussehen und das Skript mit diesem Parameter ausführen. –

+0

Ich glaube auch, dass Sie nur Ihr Skript ändern müssen, um die Eigenschaft Name in Zeichenfolgen zu erweitern. Sie würden derzeit der Typ sein: Selected.System.Management.ManagementObject –

+0

Auch Sortierung hinzugefügt und nur Dienste ausgewählt, die ausgeführt wurden. –

Verwandte Themen