问题描述
你好,新年快乐,
我正在尝试从 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 } }
部分。