使用 Powershell 进行远程多次调用

remote Multiple invocations using Powershell

感谢您抽出宝贵时间阅读本文。

我的问题如下:我正在尝试创建一个使用 powershell 执行以下操作的程序:

  1. 在 powershell 之外生成一个 table

  2. 使用 table

  3. 中的参数循环调用 powershell 脚本
  4. powershell 脚本调用一种特殊类型的 .cmd 文件,然后在其上调用位于不同共享位置的 运行s 命令。

现在我的问题是第 3 点。

我目前正在使用以下代码来调用我的脚本(参数只是硬编码以使其正常工作,它们将由稍后步骤 2 中的调用生成):

powershell.exe -ExecutionPolicy Bypass -Command {invoke-command -file \sharedlocation\test5.ps1 -computername server1121 -argumentlist 7058,Jason}

test5.ps1内部目前是:

param(
[Parameter(Mandatory=$true)]
[string] $Var1, 
[Parameter(Mandatory=$true)]
[string] $Var2
)

$CommandsPath = "\sharedlocation\testcommands.cmd"
$path = "C:\"+$Var1+"\TOOLS\"+$Var2+"launchtool.cmd"
$scriptPath = [scriptblock]::Create($path)
$out | invoke-command {PARAM($MyArg) $scriptPath } -ArgumentList $CommandsPath

我也试过使用

$CommandsPath = "\sharedlocation\testcommands.cmd"
$path = "C:\"+$Var1+"\TOOLS\"+$Var2+"\launchtool.cmd & " + $CommandsPath
$scriptPath = [scriptblock]::Create($path)
$out | invoke-command {$scriptPath } 

我也试过用硬编码的测试命令而不是在文件中调用。

现在我的问题在这两种情况下都是 运行 launchtool.cmd,但没有通过 testcommands.cmd 文件。

但是当我在机器上时 运行

 C:58\TOOLS\Jason\launchtool.cmd & \sharedlocation\testcommands.cmd 

它工作正常。

知道我做错了什么吗?

试试,调用表达式"cmd.exe /c C:58\TOOLS\Jason\launchtool.cmd & \sharedlocation\testcommands.cmd"

cmd.exe /c 是我确保 cmd 和 powershell 之间一致性的最佳方法

是否可以从 powershell 访问 UNC 路径?将 testcommands.cmd 复制到本地路径并尝试它是否有效!

$CommandsPath = "\sharedlocation\testcommands.cmd"
if(Test-Path $CommandsPath)
{
   $path = "C:\"+$Var1+"\TOOLS\"+$Var2+"\launchtool.cmd & " + $CommandsPath
   $scriptPath = [scriptblock]::Create($path)
   $out | invoke-command {$scriptPath } 
}