如何获取使用PowerShell加载在远程计算机上运行的进程的模块。
我有些错误的处理模块,例如权限被拒绝并且无法枚举。我该如何解决这些错误。
无法枚举“服务”进程的模块。+CategoryInfo:PermissionDenied:(System.Diagnostics.Process(服务):进程)[Get-Process],ProcessCommandException +FullyQualifiedErrorId:无法枚举模块,Microsoft.PowerShell.Comands.GetProcessCommand+ PSComputerName
使用命令:
$Module = Invoke-Command -Session $session -ScriptBlock { Get-Process -Module }
问题不仅仅在于远程处理:有些进程由于缺乏权限而无法从根本上枚举模块[[[1],即使使用高程运行(以管理员身份运行)。
由于错误报告是非终止错误,因此您可以使用源代码-ErrorAction Ignore
完全忽略(所有)错误:
Invoke-Command -Session $session -ScriptBlock { Get-Process -Module -ErrorAction Ignore }
如果要捕获错误消息,因此可以确定枚举失败的进程,请使用-ErrorVariable errs -ErrorAction SilentlyContinue
,该命令将使错误静音,但将其收集在变量$errs
中以供以后检查:
Invoke-Command -Session $session -ScriptBlock { Get-Process -Module } -ErrorVariable errs -ErrorAction SilentlyContinue
具体地说,$errs.TargetObject
将列出其模块无法枚举的过程对象。
[1]至少默认情况下,仅高程是不够的;如果有人知道是否仍然可以枚举,请告诉我们。