【问题标题】:A PS1 compiled to EXE does not recognize the passed parameters编译为 EXE 的 PS1 无法识别传递的参数
【发布时间】:2015-05-12 02:40:18
【问题描述】:

Powershell 新手在这里。

使用 PowerGUI 脚本编辑器,我将 PS1 编译为 EXE。当我运行 EXE 时,它看不到传递的参数。我从 PowerGUI 脚本编辑器中的 PowerShell 控制台运行它们。

这是程序代码。

param([string]$foo , [string]$bar , [string]$who)
Write-Host "Arg0: $foo"
Write-Host "Arg1: $bar"
Write-Host "Arg2: $who"

这是测试结果 --调用EXE--

PS C:\test> .\blat2.exe it bugs me
Arg0: 
Arg1: 
Arg2:

--调用PS1--

PS C:\test> .\blat2.ps1 it bugs me
Arg0: it
Arg1: bugs
Arg2: me

问题的另一个转折点:

另一个事实是我无法更改调用 Blat2.exe 的程序或它如何将参数传递给 blat2.exe。

一个典型的命令行是

     blat2.exe -t something  anotherthing  

所以预期的参数是

-t
something 
anotherthing

我的问题是,如果它是 PS1 运行,我可以让 $args 显示出来,但是在编译后它们会退出显示。这就像编译阻止程序接受参数一样。

作为一个新手,我很确定我犯了一个新手错误。

为什么EXE版本不能识别传入的参数?

【问题讨论】:

    标签: powershell-2.0


    【解决方案1】:

    您查看事件查看器了吗?您是否尝试过运行可执行文件的完整路径? C:\path\to\executable.exe arg1 arg2 arg3

    【讨论】:

    • 我检查了事件日志。没有报告错误。在使用完整路径运行时,它的行为没有任何不同。
    • 我发现文档说,当您将 PS1 转换为 EXE 时,您必须包含 -arguments 。如果我执行 .\blat2.exe -arguments -t something anotherthing ,我可以让它工作。但是,无法修改调用 exe 的软件程序以将 - 参数添加到调用中。反正有没有让exe识别没有-arguments的参数?
    • 这是一个对我有用的解决方案。首先,事实证明,当您将 PS1 编译为 EXE 时,让 EXE 接受参数的唯一方法是使用 -arguments 选项。所以电话看起来像这样。 blat2.exe -aruguments -t something another 因为这在我的环境中不起作用(我无法控制调用 blat2.exe 的程序),所以这个解决方案不起作用。
    • 我将 Qlemo 归功于使用对环境变量的引用与此解决方案进行专家交流。 $ownarg = [Environment]::GetCommandLineArgs() & cmd.exe /C "C:\TEST\Blat2.exe" $ownarg[1..$ownarg.Count] 这会拉入已发送的命令行,即我想要的。它模仿 dos 中的 %* 。然后我调用程序传递 $ownarg 跳过第一个参数。这包含对正在调用的程序和熟悉 DOS 的程序的引用,它就像 PO - 第一个参数值。
    • 我不需要传递它。遵守时,效果很好。
    【解决方案2】:

    请参阅最后的帖子,了解对我有用的解决方案的完整说明。

    简而言之:

    $ownarg = [Environment]::GetCommandLineArgs()
    
    & cmd.exe /C "C:\TEST\Blat2.exe" $ownarg[1..$ownarg.Count] 
    

    【讨论】:

      【解决方案3】:

      我使用this 实用程序制作了一个exe

      调用:test.exe param1 param2 param3

      输出 Arg0: param1 Arg1: param2 Arg2: param3

      调用:PS C:\ .\test.exe 它让我很烦

      输出 Arg0: it Arg1: bugs Arg2: me

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        相关资源
        最近更新 更多