invoke-command 在 powershell 中工作,在 cmd 窗口中调用 powershell 不起作用

问题描述

你好,新年快乐,

我正在尝试从 powershell 调用命令到服务器。为此,我可以在 PSS_invoke.ps1 脚本中编写以下代码行,并在 powershell 会话中使用 $ 'path/to/PSS_invoke1.ps1' 调用它。有用。 我还可以将脚本的每一行提交到 powershell 控制台,它也可以工作。

$session = New-PSSession mycomputer
Invoke-Command -Session $session -scriptBlock { start-job -scriptBlock { path\to\stata\stataMP-64.exe -e do path\to\mycommand.do } }

现在,假设我想打开一个 cmd 窗口,然后调用一个调用命令的 powershell。我这样做是因为我想从一个只能调用 cmd 但不能调用 powershell 的程序运行这个脚本。 在 cmd.exe 窗口中

powershell < "\\path\to\PSS_invoke.ps1"

它不运行命令! 我在 Python 中尝试了同样的方法,但也没有得到结果:

import subprocess
psInvoke = subprocess.Popen(['powershell','-ExecutionPolicy','unrestricted','path\to\PSS_invoke.ps1',],cwd=os.getcwd())
result = psInvoke.wait()

我没有得到任何回应,无论是 Python 还是 cmd。 当我不使用 Invoke-command(并在本地工作)时,它可以工作。

我没有错误消息。只是我的脚本没有运行。

这里有什么我遗漏的吗?

谢谢

解决方法

尝试使用 -File 参数:

powershell -File "\\path\to\PSS_invoke.ps1"

如果您想直接使用脚本块,还有一个 -Command 参数。

您可以阅读有关 PowerShell.exe 参数 here 但是这些适用于 PowerShell 5.1,我没有看到 7.1 的文档,但会四处看看。

,

感谢您的及时答复。正如您所建议的,我在 cmd 中尝试使用以下命令:

powershell -File "\\path\to\PSS_invoke.ps1"

它没有启动我的 stata 会话。但是,我也尝试更改启动一个简单函数的脚本......哪个有效......我想问题出在

$s = New-PSSession -ComputerName myserver
Invoke-Command -Session $s -scriptBlock { Set-Content -Path 'path*\to\test\test.txt' -Value 'Hello world'}

所以我想问题出在脚本的-scriptBlock { start-job -scriptBlock { path\to\stata\stataMP-64.exe -e do path\to\mycommand.do } }部分。