none
PowerShell Pfad eines Dienstes RRS feed

  • Frage

  • Hallo,

    meine Frage ist, wie ich per PowerShell den Namen, den Status, die Versionsnummer(wenn möglich) und den Pfad verschiedener Dienste anzeigen lassen kann. Ist dies überhaupt möglich und wenn ja nur per PowerShell ISE oder auch über die PowerShell-Kommandozeile ?

    Vielen Dank schonmal für jede hilfreiche Antwort!

    MfG

    Szabi

    Montag, 19. September 2016 09:41

Antworten

  • $svcnames = @("AppInfo","EFS","MyCoolService")
    $svcs = Get-WMIObject Win32_Service | where { $svcnames -contains $_.Name} | Select-Object Name, PathName
    $services_out = @()
    foreach ($svc in $svcs) { 
        $path = $svc.PathName -replace '"',''
        $file = Get-Item ($path.Substring(0,$path.IndexOf(".exe")+4))
        $svc_out = New-Object PSObject
        $svc_out | Add-Member -MemberType NoteProperty -Name ServiceName -Value $svc.Name
        $svc_out | Add-Member -MemberType NoteProperty -Name ServicePath -Value $path
        $svc_out | Add-Member -MemberType NoteProperty -Name ServiceVersion -Value $file.VersionInfo.FileVersion
        $services_out += $svc_out
    }
    $services_out | Out-GridView

    Moin,

    so tabellarisch genug? ;-)


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert Szabi_123 Montag, 19. September 2016 10:50
    Montag, 19. September 2016 10:38

Alle Antworten

  • Moin,

    was ist für Dich die "Versionsnummer eines Dienstes"? Version der Datei?

    So auf die Schnelle:

    $svcs =Get-WMIObject Win32_Service | Select-Object Name, PathName
    foreach ($svc in $svcs) { 
        $path = $svc.PathName -replace '"',''
        $file = Get-Item ($path.Substring(0,$path.IndexOf(".exe")+4))
        Write-Host "$($svc.Name),$path,$($file.VersionInfo.FileVersion)"
    }
    


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Montag, 19. September 2016 10:06
  • Danke erstmal :-)

    Ja genau ich meine die Version der Datei. Jetzt habe ich noch die Frage, ob ich bei Ihrem Code nach einem bestimmten Dienst/bestimmte Dienste suchen kann, die ich vorher vielleicht Festlege. Falls ja, wo müsste ich dies machen bzw. hinzufügen und was müsste ich dafür ändern?

    MfG
    Szabi

    Montag, 19. September 2016 10:12
  • $svcnames = @("AppInfo","EFS","MyCoolService")
    $svcs = Get-WMIObject Win32_Service | where { $svcnames -contains $_.Name} | Select-Object Name, PathName
    foreach ($svc in $svcs) { 
        $path = $svc.PathName -replace '"',''
        $file = Get-Item ($path.Substring(0,$path.IndexOf(".exe")+4))
        Write-Host "$($svc.Name),$path,$($file.VersionInfo.FileVersion)"
    }


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Montag, 19. September 2016 10:15
  • Vielen Dank :-)
    Montag, 19. September 2016 10:21
  • Eine Frage hätte ich da noch.

    Ist es möglich, die Namen der Dienste + die Pfade mehr oder weniger tabellarisch anzeigen zu lassen ? Also ein wenig übersichtlicher ?

    MfG

    Szabi

    Montag, 19. September 2016 10:28
  • $svcnames = @("AppInfo","EFS","MyCoolService")
    $svcs = Get-WMIObject Win32_Service | where { $svcnames -contains $_.Name} | Select-Object Name, PathName
    $services_out = @()
    foreach ($svc in $svcs) { 
        $path = $svc.PathName -replace '"',''
        $file = Get-Item ($path.Substring(0,$path.IndexOf(".exe")+4))
        $svc_out = New-Object PSObject
        $svc_out | Add-Member -MemberType NoteProperty -Name ServiceName -Value $svc.Name
        $svc_out | Add-Member -MemberType NoteProperty -Name ServicePath -Value $path
        $svc_out | Add-Member -MemberType NoteProperty -Name ServiceVersion -Value $file.VersionInfo.FileVersion
        $services_out += $svc_out
    }
    $services_out | Out-GridView

    Moin,

    so tabellarisch genug? ;-)


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert Szabi_123 Montag, 19. September 2016 10:50
    Montag, 19. September 2016 10:38
  • Das ist perfekt!

    Vielen Dank! :-)

    Montag, 19. September 2016 10:50
  • Entschuldigung, dass ich noch mehr brauche.

    Jetzt ist meine Frage, ob es möglich ist auch das Datum der Installation der .exe-Datei mit den anderen Ausgaben ausgeben zu können ? Und kann man die ganze Ausgabe wie sie jetzt ist zusätzlich einer Textdatei ausgeben?

    MfG Szabi

    Montag, 19. September 2016 11:00
  • Moin,

    es gibt die Property "InstallDate", die ist aber bei meinen Maschinen immer leer, auch bei 3rd Party-Diensten. Hier aber trotzdem der Code:

    $svcnames = @("AppInfo","EFS","MyCoolService")
    $outfile = "c:\temp\services.csv"
    $svcs = Get-WMIObject Win32_Service | where { $svcnames -contains $_.Name} | Select-Object Name, PathName, InstallDate
    $services_out = @()
    foreach ($svc in $svcs) { 
        $path = $svc.PathName -replace '"',''
        $file = Get-Item ($path.Substring(0,$path.IndexOf(".exe")+4))
        $svc_out = New-Object PSObject
        $svc_out | Add-Member -MemberType NoteProperty -Name ServiceName -Value $svc.Name
        $svc_out | Add-Member -MemberType NoteProperty -Name ServicePath -Value $path
        $svc_out | Add-Member -MemberType NoteProperty -Name InstallDate -Value $svc.InstallDate
        $svc_out | Add-Member -MemberType NoteProperty -Name ServiceVersion -Value $file.VersionInfo.FileVersion
        $services_out += $svc_out
    }
    $services_out | Export-CSV $outfile
    $services_out | Out-GridView


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Montag, 19. September 2016 11:45
  • Danke,

    jedoch kommt bei mir immer der Fehler

    "Export-CSV : Ein Teil des Pfades "C:\temp\services.csv" konnte nicht gefunden werden.
    In Zeile:15 Zeichen:17
    + $services_out | Export-CSV $outfile
    +                 ~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OpenError: (:) [Export-Csv], DirectoryNotFoundException
        + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ExportCsvCommand"

    Montag, 19. September 2016 12:03
  • ja, weil vermutlich das Verzeichnis c:\temp nicht existiert ;-) Da darf man auch ruhig was eigenes reinschreiben.

    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Montag, 19. September 2016 12:17
  • Gibt es denn den Pfad "C:\temp" bei dir?
    Tipp: "... DirectoryNotFoundException..."
     
    Du hast keine Ahnung was der Code den Evgenij dir oben geschrieben hat, tut, oder? :)
    Falls ich Recht habe, rate ich dir dringend dich mal mit den Powershell Grundlagen zu befassen. Dann wirst du sehr schnell verstehen was solche einfachen Scripte machen und wie man eigene Änderungen machen und einfache Fehler lösen kann.
    Das tolle an PowerShell ist es es eine sehr flache Lernkurve hat und sehr schnell Erfolgserlebnisse bietet.
    Ich empfehle immer gern die Bücher von Tobias Weltner dafür, es gibt aber auch online massehaft Lernressourcen. Ein paar auf Deutsch findest du hier: hier, oder hier.
     
     Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.





    Montag, 19. September 2016 12:19
    Moderator
  • Ich habe den Pfad geändert.

    Jedoch zeigt er mir dann auch diesen Fehler.

    Ich habe nur sein Beispiel als Beispiel verwendet.

    Montag, 19. September 2016 12:48
  • Das war auch nicht böse gemeint, nur als Beobachtung.

    Wenn der Fehler der gleiche ist, ist auch das Problem noch das gleiche. Irgendwas stimmt mit dem Pfad nicht.


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Montag, 19. September 2016 13:44
    Moderator
  • Dann werde ich es falsch verstanden haben.

    Tut mir leid.

    Habe den Fehler mittlerweile auch behoben und kann die Datei in .csv sowie .txt schreiben.

    Vielen Dank nochmal für die Hilfe!

    Dienstag, 20. September 2016 06:21