Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Получение списка всех процессов (http://forum.oszone.net/showthread.php?t=343522)

NLOLegion 03-01-2020 05:56 2903308

Получение списка всех процессов
 
Подскажите как получить список ВСЕХ процессов с "временем запуска"?
Получить дату и время запуска всех процессов в текстовый файл.
По возможности не на PowerShell. cmd,bat.

DJ Mogarych 03-01-2020 09:49 2903319

CMD:
Код:

powershell -command "Get-Process |select name,starttime |Out-File c:\temp\processlist.txt"

Iska 03-01-2020 10:21 2903326

Код:

>"c:\temp\processlist.txt" wmic.exe Process get Name, CreationDate

DJ Mogarych 03-01-2020 10:27 2903329

Iska, а формат даты можно как-нибудь подкрутить?

Busla 03-01-2020 10:55 2903334

DJ Mogarych, я догадываюсь, что топикстартеру, всё едино: что водка, что пулемёт - лишь бы с ног валило
и самому мне нравится PowerShell, но давайте всё же придерживаться заданной тематики
PoSh - не панацея:
1. Он не всегда есть - в том же PE, контейнерах
2. Он тяжело запускается - "примитивный" healthcheck, реализованный подобным образом, выжирает нереально много ресурсов

Iska 03-01-2020 11:03 2903336

DJ Mogarych, напрямую — боюсь, что нет. Возможно, этого можно добиться, поковырявшись во внутренностях C:\Windows\System32\wbem, но я не жажду ;). Wbem-то рассчитано в первую очередь на работу с приложениями посредством Automation, а wmic.exe — это такой паллиатив, появившийся в Windows XP — для тех, кто не сумел в тот же WSH.

Кроме того, можно разобрать вывод wmic.exe посредством for /f, и там слепить, что потребно. Наподобие:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

>"c:\temp\processlist.txt" (
        echo Creation Date/Time        Name
       
        for /f "usebackq skip=2 tokens=1,2" %%i in (`wmic.exe Process get Name^, CreationDate ^| findstr.exe /i /r /c:"^[0-9]"`) do (
                set sDateTime=%%i
                echo !sDateTime:~6,2!.!sDateTime:~4,2!.!sDateTime:~0,4! !sDateTime:~8,2!:!sDateTime:~10,2!:!sDateTime:~12,2!        %%~j
        )
)

endlocal
exit /b 0


megaloman 03-01-2020 15:15 2903370

VBS. Добавил еще полный путь к исполняемому файлу процесса
Код:

With CreateObject("Scripting.FileSystemObject").CreateTextFile("Z:\Box_Out\process.txt", True)
    Out = "Creation Date        Caption and ExecutablePath"
    For Each iProc In GetObject("winmgmts:").ExecQuery("Select * From Win32_Process")
        With iProc
            DT = CStr(.CreationDate)
            Out = Out + vbCrLf + Mid(DT, 1, 4) + "." + Mid(DT, 5, 2) + "." + Mid(DT, 7, 2) + " " + Mid(DT, 9, 2) + ":" + Mid(DT, 11, 2) + ":" + Mid(DT, 13, 2) + "  " + .Caption
            If Not IsNull(.ExecutablePath) Then Out = Out + "  " + .ExecutablePath
        End With
    Next
    .Write Out
    .Close
End With


NLOLegion 03-01-2020 15:28 2903372

Круто! Спасибо большое! всё работает!

Конечный результат выглядит так: (???)
Код:

powershell -command "Get-Process |select name,starttime |Out-File c:\temp\processlist.txt"

@echo off
setlocal enableextensions enabledelayedexpansion

>"c:\temp\processlist.txt" (
        echo Creation Date/Time        Name
       
        for /f "usebackq skip=2 tokens=1,2" %%i in (`wmic.exe Process get Name^, CreationDate ^| findstr.exe /i /r /c:"^[0-9]"`) do (
                set sDateTime=%%i
                echo !sDateTime:~6,2!.!sDateTime:~4,2!.!sDateTime:~0,4! !sDateTime:~8,2!:!sDateTime:~10,2!:!sDateTime:~12,2!        %%~j
        )
)

endlocal
exit /b 0

Или как-то изящней надо сделать?(допускаю что фигню пишу)

Iska 03-01-2020 15:58 2903378

Цитата:

Цитата NLOLegion
допускаю что фигню пишу »

Ага. Файл c:\temp\processlist.txt у Вас создаётся дважды: сначала посредством PowerShell, а затем переписывается поверх непосредственно из кода пакетного файла.

Цитата:

Цитата megaloman
Mid(DT, 1, 4) + "." + Mid(DT, 5, 2) + "." + Mid(DT, 7, 2) + " " + Mid(DT, 9, 2) + ":" + Mid(DT, 11, 2) + ":" + Mid(DT, 13, 2) »

Правильнее будет так:

Скрытый текст
Код:

Option Explicit

Dim objSWbemServicesEx
Dim objSWbemDateTime
Dim objSWbemObjectEx


Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Set objSWbemDateTime  = WScript.CreateObject("WbemScripting.SWbemDateTime")

WScript.Echo "Creation Date/Time" & vbTab & "Name"

For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT Name, CreationDate FROM Win32_Process")
        objSWbemDateTime.Value = objSWbemObjectEx.CreationDate
        WScript.Echo objSWbemDateTime.GetVarDate() & vbTab & objSWbemObjectEx.Name
Next

Set objSWbemDateTime  = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0


DJ Mogarych 03-01-2020 16:15 2903385

Ещё вариант:

Код:

powershell -command "gcim win32_process |select name,creationdate |Out-File c:\temp\processlist.txt"
gcim сразу даёт нормальный формат времени, в отличие от gwmi, который даёт DTMF datetime. Однако, это можно сконвертировать:

Код:

powershell -command "gwmi win32_process |select name,@{n='starttime';e={$_.converttodatetime($_.creationdate)}} |Out-File c:\temp\processlist.txt"
Цитата:

Цитата Busla
я догадываюсь, что топикстартеру, всё едино: что водка, что пулемёт - лишь бы с ног валило »

Из этого я и исходил. Полагаю, что если бы задача требовала каких-то спецусловий, это было бы упомянуто.


Время: 15:06.

Время: 15:06.
© OSzone.net 2001-