【发布时间】:2015-10-28 05:36:06
【问题描述】:
我正在尝试通过过滤掉在进程的CommandLine 属性中找到的字符串来单独监视具有多个自身实例的进程 (w3wp.exe) 的内存使用情况。
当我在本地运行此脚本时它可以工作:
$proc = (WmiObject Win32_Process -Filter "Name = 'w3wp.exe'" | Where-Object {$_.CommandLine -like "*SomeTextFromCl*"})
$id = $proc.ProcessId
$ws = [math]::round((Get-Process -Id $id).WS/1MB)
Write-Host $ws
但是,当我尝试通过Invoke-Command 远程运行它时,我收到一条错误消息,指出Id 属性的值为空:
Cannot bind argument to parameter 'Id' because it is null.
+ CategoryInfo : InvalidData: (:) [Get-Process], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetProcessCommand
+ PSComputerName : RemoteServerName
我的Invoke-Command 语法是:
Invoke-Command -ComputerName RemoteServerName -FilePath script.ps1 -Credential $mycredential
我确信这很简单,但我在离开了很久之后又回到了 PS,我环顾四周,但找不到任何真正有用的东西。
【问题讨论】:
-
您是否检查过远程计算机上的 WMI 调用实际上会导致返回任何内容?
-
是的,它实际上返回了正确 w3wp.exe 实例的工作集。
-
您是否正在运行 PowerShell v2 并且返回了多个进程? PowerShell v2 不支持使用语法
<array-var>.<property>访问数组成员的属性。如果你只回显$proc,检查你得到什么输出。 -
您连接的凭据与您在本地运行它时使用的用户相同吗?
-
普通用户只能查看自己进程的
CommandLine属性。此行为是设计使然。但是,作为远程主机上管理员组的成员,用户应该能够在远程主机上获取该信息。也许安全事件日志包含有关访问被拒绝/失败的原因的信息。
标签: powershell scripting monitoring invoke-command