如何在命令文件的-file中使用“。\”

时间:2019-03-07 06:44:42

标签: powershell remote-access

我需要从计算机A上的Powershell脚本(A.ps1)在计算机B上执行命令文件(B.cmd)。我不想静态地指定路径

B.cmd应该执行与B.cmd相同文件夹中的C.ps1

机器A:A.ps1
机器B:B.cmd,C.ps1(都在同一文件夹中)

所以我的命令文件看起来像这样B.cmd

@echo off
powershell.exe -file ".\C.ps1" -Iterations 10
echo
echo
pause

我正在从中调用B.cmd文件的A.ps1文件中引发了错误

A.ps1

Invoke-Command -ComputerName $systemName -credential $credentials -ScriptBlock {Invoke-Expression -Command: "cmd.exe /c C:\Temp\Batch\Test\B.cmd"}

A.ps1引发错误:

**The argument '.\C.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.**
+ CategoryInfo          : NotSpecified: (The argument '....File parameter.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName        : XXX

我如何使。\工作,或者有替代方法,还是将。\用于远程执行是错误的?

请原谅我的无知,因为我对PS非常陌生,谢谢!

2 个答案:

答案 0 :(得分:1)

如果您能够更改ABC.cmd,则可以使用以下内容

powershell.exe -file "%~dp0\XYZ.ps1"

这将获得运行ABC.cmd脚本的文件夹。请注意,%~dp0在cmd中无法进行测试,您需要从脚本中对其进行测试。

答案 1 :(得分:0)

因此,请勿在其周围包装批处理文件。浪费时间并使问题困惑。

invoke-command -comp $computername -filepath C:\Temp\Batch\Test\XYZ.ps1 

如果您需要运行10次,请在您的PS脚本中循环运行。