我需要得到所有者的一些procs。下面我的演示脚本将首先在本地查找所有者的 procs,然后它会做同样的事情,但它会在同一个盒子上调用命令:
cls
write-host 'LOCAL CALL: '
$procs = @(Get-WmiObject win32_process |? {($_.getowner().user -eq 'APP_ACCOUNT') })
write-host $procs.count
$func = {
$procs = @(Get-WmiObject win32_process |? {($_.getowner().user -eq 'APP_ACCOUNT') })
write-host $procs.count
}
write-host 'REMOTE CALL: '
$session = New-PSSession -ComputerName 'SERVER'
$job = Invoke-Command -Session $session -ScriptBlock $func -AsJob
Wait-Job -Job $job
$job | Receive-Job
$job | Remove-Job
Remove-PSSession -Session $session
大多数时候,当我运行我的脚本时,它会出现以下输出错误:
LOCAL CALL:
38
REMOTE CALL:
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
26 Job26 RemoteJob Completed True SERVER ...
Exception calling "GetOwner" : "Not found "
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WMIMethodException
+ PSComputerName : SERVER
38
所以前 38 是它为本地运行的所有者找到的 procs 数。它第二次也找到 38,但调用 getowner 时出错。我不明白为什么,因为它第一次工作。当我调用命令时,它是否在某种“气泡”中运行?在我较大的脚本中,这给我带来了更严重的问题,因为作业状态失败并且执行停止,即使它抛出相同的错误。不过一次一个问题。