是否有办法找到使用Powershell在服务器上运行哪个应用程序的用户

时间:2019-05-24 00:24:38

标签: powershell powershell-v4.0

我试图找到一种方法来找出谁在服务器上运行了一个应用程序(例如SQL),只是为了获得一些想法。

我尝试了Get-Process,但这并没有给我历史信息,我想获取历史信息

获取过程-IncludeUserName *

我希望返回的结果是“应用程序名称”,“运行它的用户”以及该用户运行它的最后日期”。

1 个答案:

答案 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