使用 Powershell 进行远程多次调用
remote Multiple invocations using Powershell
感谢您抽出宝贵时间阅读本文。
我的问题如下:我正在尝试创建一个使用 powershell 执行以下操作的程序:
在 powershell 之外生成一个 table
使用 table
中的参数循环调用 powershell 脚本
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 }
}
感谢您抽出宝贵时间阅读本文。
我的问题如下:我正在尝试创建一个使用 powershell 执行以下操作的程序:
在 powershell 之外生成一个 table
使用 table
中的参数循环调用 powershell 脚本
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 }
}