【问题标题】:C# - WMI InvalidOperationException when trying to run a script on a remote machineC# - 尝试在远程计算机上运行脚本时出现 WMI InvalidOperationException
【发布时间】:2011-01-18 02:10:18
【问题描述】:

我正在尝试在同一域中的远程计算机上执行脚本,并使用相同的用户帐户登录到两台计算机。请注意,该脚本也存储在另一台机器上。

代码

string prop = propertyName
object[] cmd = { String.Format("cscript \\\\machine\\script.wsf", envId, application) };
ManagementClass mc = new ManagementClass("\\\\" + prop + "\\root\\cimv2\\Win32_Process");

mc.InvokeMethod("Create", cmd);

例外

[InvalidOperationException: Operation is not valid due to the current state of the object.]
   System.Management.ManagementObject.InvokeMethod(String methodName, Object[] args) +388806

结论

我是使用 WMI 的新手,所以我不确定我做错了什么是否显而易见,尽管在许多情况下都会使用这种异常类型,并且无法找出实际问题是什么,因此我们将不胜感激。

【问题讨论】:

  • 本地执行时是否有效?如果没有,那你就倒霉了。 WMI 中的很多东西都没有实现……Remoting 或 WCF 可能是更好的选择。
  • 您的意思是脚本在本地运行时是否有效,或者当我将目标机器设置为我自己时是否有效?我想我的意思是,你问我是 WMI 代码有效还是脚本有效?
  • 我从不使用“超酷短”语法,因为您可能无法正确控制流程属性。我知道,远程过程会起作用[尽管我的经验仅来自 w2k3]。正如“leppie”已经提到的那样,如果您尝试执行网络资源 [要执行的脚本的位置],它通常不起作用,因为这需要对您的“\\\\machine\\...”进行另一个身份验证步骤.此步骤的最低要求是使用 kerberos 身份验证!我从来没有那样做。您的身份验证和网络环境如何?

标签: c# .net .net-3.5 wmi remote-process


【解决方案1】:

你的 "\root\cimv2\Win32_Process" 应该是 "\root\cimv2:Win32_Process"

注意冒号,这是我使用的。祝你好运!

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    result.InvokeMethod("GetOwner", ownerArgs)

    问题是我试图在使用以下 WMI 查询检索到的对象上执行该操作。

    SELECT ProcessId, ExecutablePath, CommandLine FROM Win32_Process

    将其更改为 SELECT * FROM Win32_Process 已修复。

    我也可能特别要求用户名和域。

    【讨论】:

    • 您还需要选择句柄,例如SELECT Handle, ProcessId FROM Win32_Process
    【解决方案3】:

    事实证明,托管该进程的 Windows 服务未在有权在目标计算机上执行的帐户下运行。

    我的错!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多