Powershell 2.0 - 编译为 EXE 的 PS1 无法识别传递的参数



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"

以下是测试结果--调用执行--

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 版本无法识别传入的参数?

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

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

简而言之:

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

我用这个实用程序做了一个exe

调用: 测试.exe 参数1 参数2 参数3

输出 Arg0: param1 Arg1: param2 Arg2: param3

呼叫: PS C:\ .\测试.exe它让我烦恼

输出 Arg0: it Arg1: bugs Arg2: me

最新更新