远程使用Powershell进行多次调用

时间:2015-04-18 02:11:09

标签: powershell command-line-arguments remote-server

感谢您花时间阅读本文。

我的问题如下:我试图创建一个使用PowerShell执行以下操作的程序:

  1. 获取powershell外部生成的表格

  2. 使用表

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

  5. 现在问题在于第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 } 
    

    我还尝试使用硬编码的testcommands调用,而不是将它们放在文件中。

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

    然而,当我在机器上运行时

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

    工作正常。

    任何想法我做错了什么?

2 个答案:

答案 0 :(得分:0)

尝试,调用表达式“cmd.exe / c C:\ 7058 \ TOOLS \ Jason \ launchtool.cmd& \ sharedlocation \ testcommands.cmd”

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

答案 1 :(得分:0)

是否可以从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 } 
}