【问题标题】:Executing powershell.exe from powershell script (run in ISE but not in script)从 powershell 脚本执行 powershell.exe(在 ISE 中运行,但不在脚本中)
【发布时间】:2011-05-04 16:00:51
【问题描述】:

我是这些令人敬畏的 Power shell 世界的新手。我的脚本有问题,非常感谢您的帮助。

我有一个脚本“cmd4.ps1”需要运行另一个脚本“Transfer.ps1”,该脚本需要接收 3 个字符串参数,并且它需要作为不同于“cmd4.ps1”的其他进程运行。

cmd4.ps1:

$Script="-File """+$LocalDir+"\Remote\Transfer.ps1"" http://"+$ServerIP+"/Upload/"+$FileName+" "+$ServerIP+" "+$LocalIP 启动进程 powershell.exe -ArgumentList $Script

弹出后,$Script 包含一个类似于

的值 -文件“c:\temp re\Remote\Transfer.ps1”http://10.1.1.1/Upload/file.txt 10.1.1.1 10.1.1.10

包含使用-File参数运行Powershell.exe脚本的语法,以及Transfer.ps1需要的三个参数("http://10.1.1.1/Upload/file.txt", 10.1.1.1, 10.1.1.10)。

当我在 PowerShell ISE 中编写这些指令时,我可以看到每个值都是正确的,并且 PowerShell.exe 以正确的值执行,一切正常!但如果我将这些指令放在“cmd4.ps1”脚本中,它不会工作,我的意思是参数不正确,因为我可以看到它启动 powershell 但它永远不会结束。

【问题讨论】:

    标签: powershell powershell-1.0


    【解决方案1】:

    -ArgumentList 需要一个字符串参数数组,而不是单个字符串。试试这个:

    $ScriptArgs = @(
        '-File'
        "$LocalDir\Remote\Transfer.ps1"
        "http://$ServerIP/Upload/$FileName $ServerIP $LocalIP"
    )
    
    Start-Process powershell.exe -ArgumentList $ScriptArgs
    

    请注意,您可以如上所示简化 args 的字符串构造。

    【讨论】:

      【解决方案2】:

      为什么不把这个放在 cmd4.ps1 中呢?

      & "c:\temp re\Remote\Transfer.ps1" "http://10.1.1.1/Upload/file.txt" "10.1.1.1" "10.1.1.10"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多