如何在远程计算机上启动 .cmd 文件?

3
我需要能够启动远程计算机上的.cmd文件,并从该机器所在的目录中启动该文件。
我已经尝试在powershell中使用命令:invoke-command -ComputerName test123 -ScriptBlock { cmd /c c:/myfile.cmd } 启动.cmd文件,但失败了,因为它找不到此文件启动的所有相应.cmds(这些文件都位于同一个目录下)。
有没有一种方法可以启动这个.cmd文件,并使其执行持续存在? 也就是说,即使关闭powershell窗口,.cmd文件也会继续在远程计算机上运行。

您正在指定 c:\myfile.cmd(使用错误类型的斜杠 - 可能是 PowerShell 关心)。请尝试使用 wmic process call create c:\windows\system32\cmd.exe,c:\users。 - tony bd
c:\users 是您要启动的程序的默认目录。使用帮助 wmic process call create /?。因此,完整的命令- wmic /node:"@%userprofile%\desktop\ComputerName.txt" /output:"%userprofile%\desktop\NicSpeed.html" /failfast:on process call create %systemroot%\system32\cmd /k dir, %userprofile%。ComputerName.txt 包含计算机名称(不带 \\)或 IP 地址(或两者兼有 - 您可以混合使用)。 - tony bd
wmic /node:"@%userprofile%\desktop\ComputerName.txt" /output:"%userprofile%\desktop\NicSpeed.html" /failfast:on process call create "%systemroot%\system32\cmd /k dir", C:\users - tony bd
这似乎比我需要的要多得多。我只想在一台机器上执行特定的.cmd文件。 - MrDuk
你只需要使用你想要的部分。wmic /node:127.0.0.1 process call create "cmd c:\autoexec.bat", c:\users。指定目录并保持运行。 - tony bd
显示剩余7条评论
1个回答

5
你需要在脚本块中更改工作目录。在调用批处理脚本之前添加Set-Location
Invoke-Command -ComputerName test123 -ScriptBlock {
  Set-Location 'C:\'
  & cmd /c ".\myfile.cmd"
}

如果您需要创建一个独立的进程,可以通过WMI实现:
$hostname = 'test123'
$command  = 'C:\path\to\script.cmd'
$workdir  = 'C:\working\directory'

$p = [wmiclass]"\\$hostname\root\cimv2:Win32_Process"
$p.Create($command, $workdir)

请注意,您需要在远程主机上拥有管理员权限才能进行此操作。

@MrDuk & 是 PowerShell 的调用运算符,所以您不应该收到这条消息。请展示您如何运行代码。 - Ansgar Wiechers
@Cole9350 对于异步执行,他将不得不使用计划任务或通过WMI启动进程。有比“wmic”更优雅的后者方法。 - Ansgar Wiechers
@AnsgarWiechers 根据您上面的评论,我认为一旦我关闭 PowerShell 窗口,我试图启动的 .cmd 文件将会终止? - MrDuk
@MrDuk 是的,就像您坐在远程计算机上运行.cmd并在本地关闭窗口一样。 - Scott Chamberlain
1
@MrDuk 要么在 PowerShell 提示符中运行 Set-ExecutionPolicy = RemoteSigned 一次,要么像这样从命令提示符中运行您的脚本:powershell -ExecutionPolicy Bypass -File "C:\path\to\your.ps1" - Ansgar Wiechers
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接