【问题标题】:Win32_Process.Create() can launch local files but not network filesWin32_Process.Create() 可以启动本地文件但不能启动网络文件
【发布时间】:2013-11-19 16:44:37
【问题描述】:

我正在尝试远程调用目标计算机上的可执行文件,该可执行文件位于 UNC 网络路径上。我正在使用Win32_Process.Create 方法来执行此操作。我可以使用此方法启动本地存储在 C: 驱动器上的文件,但是当我尝试从 UNC 路径启动文件时,我得到返回值 2 Access Denied。我确信路径是正确的,因为如果我将其更改为虚假路径,我会得到返回值 9,Path Not Found

在 Powershell 中,我使用 invoke-wmimethod 调用 Win32_Process 的 Create 方法并传递一个 credential 对象,该对象在目标系统上具有管理权限并在 UNC 路径上具有读取权限。在 C# 中,我使用具有相同凭据的 ConnectionOptions 进行模拟。两种情况下的结果都是一样的。

我也尝试过使用各种方法(CIM_DataFile,远程调用 XCopy)先将 EXE 文件复制到本地。这些方法都没有奏效。我想直接从文件服务器复制到目标系统,而不先将文件拉到应用程序服务器,因为应用程序服务器与大多数目标系统不在同一个数据中心,因此会拉下一个大文件WAN 两次,速度慢且不可靠。我发现的一个选择是使用 FTP,但我认为这是最后的手段。

我还可以使用 PSExec 和相同的凭据从 UNC 路径远程调用 EXE,但我想避免从我的 Web 应用程序中调用 PSExec。我知道如果这是我必须做的事情,它会起作用,而且我已经多次使用 PSExec 来解决这样的问题,但我真的想在应用程序中完成这一切,而不是使用外部程序来破解它。

当 EXE 位于 UNC 路径上时,有什么方法可以使用 Win32_Process 在远程计算机上启动 EXE?这可能是组策略问题,其中 WMI 启动的进程无权从网络位置调用 EXE?我没有想法,也没有搜索字词。

Powershell 代码示例。这有效:

$launchproc = Invoke-WmiMethod -ComputerName $compName -Class Win32_process -Name Create -ArgumentList "c:\temp\installer.exe /s /f1c:\temp\installer.iss" #-Credential $adminCreds

这不是:

$launchproc = Invoke-WmiMethod -ComputerName $compName -Class Win32_process -Name Create -ArgumentList "\\fileserver\share\installer.exe /s /f1\\fileserver\share\installer.iss" -Credential $adminCreds

请注意,如果我从命令窗口以交互方式在本地发出命令,则基于 UNC 的命令确实可以正常工作。有趣的语法是 InstallShield 的静默安装开关的产物。另请注意,如果我使用双反斜杠或反引号转义反斜杠,我会得到未找到路径,因此我认为这不是转义问题。

编辑:虽然不是完全相同的问题,但我确实检查了此处描述的 GP 权限:WMI Win32_Process.Create fails with Insufficient Privs 并且我确实正确设置了这些权限。

编辑#2:我发现其他人也有类似的问题: Win32_Process Create method. Trying to copy a file from a remote machine to a remote machine 同样,它是在远程系统上启动 Net Use 的批处理文件式 hack。这是我唯一真正的选择吗?

【问题讨论】:

    标签: c# powershell wmi win32-process


    【解决方案1】:

    最后,我只是在 C# 中使用 System.Diagnostics.Process() 调用了 PsExec。这不是我想要的解决方案,但我无法让其他任何东西工作,虽然我不喜欢使用外部 EXE,但它最终确实相对简单。

    【讨论】:

      【解决方案2】:

      我询问了一些更了解 WMI 的 PowerShell MVP,得到的答复是,除非远程计算机是域控制器,否则您将无法执行此操作。但是,如果您可以使用 PowerShell 远程处理以通过 -Authentication CredSSP 远程连接到计算机,那么您可以将 Invoke-WmiMethod 与网络路径一起使用。 Richard Siddaway 做了一个write up on this,可能对细读有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-13
        • 1970-01-01
        • 2010-10-02
        • 2020-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多