我试图找到一种方法来找出谁在服务器上运行了一个应用程序(例如SQL),只是为了获得一些想法。
我尝试了Get-Process,但这并没有给我历史信息,我想获取历史信息
获取过程-IncludeUserName *
我希望返回的结果是“应用程序名称”,“运行它的用户”以及该用户运行它的最后日期”。
答案 0 :(得分:0)
至于...
我正在尝试找到一种方法来找出谁运行了应用程序(对于 服务器上的示例SQL),只是为了了解一些想法。
您要的是软件计量。 SQL是一种在安装后始终运行的服务,因此,永远不会有任何个人用户在运行它。因此,这是一个不好的例子。以MS Word为例将是一个更好的例子。
但是,PowerShell中没有任何本机可以执行此操作,即软件计数,但是当然PowerShell可以查看事件日志。但是,如果您的审核设置不正确,那么就没有意义了。这对于软件计量工具来说更好,并且有几种。所以,为什么要尝试重新发明轮子呢?
至于...
我尝试了Get-Process,但这并没有提供历史信息,我 想获取历史信息
这不是进程的意思,也不是Get-Process的目的。它的Get-Process只会检查并列出当前正在运行的任何进程,而不管启动它的是谁/什么人。
至于...
我希望返回的结果是“应用程序名称”,“运行用户 它”以及该用户上次运行的日期时间
只要进程正在运行,就可以使用该cmdlet来获得它。 但是,您要通过此方法完成什么?
同样,有专门构建的工具来衡量软件使用情况。 https://docs.microsoft.com/en-us/sccm/apps/deploy-use/monitor-app-usage-with-software-metering
如果您必须走下坡路,使用脚本编写来重新设计轮子,那么您需要在目标计算机上有一个任务观察程序,该任务监视程序监视WinWord进程的出现。
获取过程-IncludeUserName | 其中ProcessName -EQ'Winword'
...每次看到该过程后,您便将这些结果写入文件或数据库或自己的事件日志中。
Use PowerShell to Create and to Use a New Event Log
New-EventLog -LogName ScriptingGuys -Source scripts
该命令运行时,Windows PowerShell控制台不显示任何输出。为了确保命令实际上创建了新的事件日志,我使用 带有–List参数的Get-EventLog cmdlet。这是命令 以及相关的输出。
Write-EventLog -LogName ScriptingGuys -Source scripts -Message “Dude, it works … COOL!” -EventId 0 -EntryType information
或者只是文件
Get-Process -IncludeUserName |
Where ProcessName -EQ 'Winword' |
Select-Object -Property Name, StartTime, Username |
Export-Csv -Path 'F:\Temp\AppLaunchLog.csv' -Append
Import-Csv -Path 'F:\Temp\AppLaunchLog.csv'
# Results
Name StartTime UserName
---- --------- --------
WINWORD 5/23/2019 9:02:53 PM WS01\LabUser001