无法弄清楚如何使用参数

时间:2016-08-25 22:12:34

标签: powershell arguments

所以我一直在尝试编写一个脚本,我在其中运行带参数的可执行文件,以返回监视所需的一些信息。不久前,我编写了一个成功设法完成此操作的脚本,使用以下命令:

$command = "-t vtl -p {1} -m {0} -s"
$check = Invoke-Expression -command ("$exemap\$exe $command" -f $server,$poort)

这完美无缺。但是,我正在编写一个新脚本,完全相同的东西似乎不再起作用了。这是我必须重现问题的脚本:

$omgeving = "A"
$exemap = "\\cfc01.corp\rpa-{0}\Scripts\Check_actualiteit_RPA" -f $omgeving
#$exe = "echoargs.exe"
$exe = "stmmon.exe"
$exepath = "$exemap\"+"$exe"
$commando = "-t {0} -p {1} -m {2} -s"
$poort = "5062"
$berichttype = "VTL"
$server = "rpa-a-ap001"
$command = ($commando -f $berichttype,$poort,$server) -split " "
#$command = "-t VTL -p 5062 -m rpa-a-ap001 -s" 

& $exepath $command

所以我已经否定了一些用于故障排除的行。我尝试使用上面的Invoke-Expression命令并使用&运算符。我用Google搜索并尝试了很多。我尝试过使用工作和Invoke-Command。但是所有这些都有相同的结果,exe的解释告诉我如何使用它:

Usage: \\cfc01.corp\rpa-A\Scripts\Check_actualiteit_RPA\stmmon.exe [-v] [-h] -t <type> -p <port> -m <machine> -k <key> [-s]

这让我相信可执行文件并不真正承认任何参数。我尝试使用echoargs,上面脚本的输出是:

Arg 0 is <-t>
Arg 1 is <VTL>
Arg 2 is <-p>
Arg 3 is <5062>
Arg 4 is <-m>
Arg 5 is <rpa-a-ap001>
Arg 6 is <-s>

或者,如果我在$ command变量中不使用-split“”,那么echoargs是这样的:

Arg 0 is <-t VTL -p 5062 -m rpa-a-ap001 -s>

上面的脚本可能不是很动态,但我试图制作的实际脚本将是。参数列表应该是可配置的和动态的,这就是我在不同场合使用-f命令的原因。

任何人都可以看到我在这里做错了,为什么可执行文件甚至不会承认参数的存在?

2 个答案:

答案 0 :(得分:0)

使用call operator&)运行外部命令。使用Join-Path构建路径。使用splatting将参数传递给程序或函数。

$omgeving = "A"
$exemap   = "\\cfc01.corp\rpa-$omgeving\Scripts\Check_actualiteit_RPA" -f 
$exe      = "stmmon.exe"

$exepath  = Join-Path $exemap $exe

$params = '-t', 'VTL',
          '-p', 5062,
          '-m', 'rpa-a-ap001',
          '-s'

& $exepath @params

另外,从帮助输出判断,您似乎缺少必需的参数:

Usage: \\...\stmmon.exe [-v] [-h] -t <type> -p <port> -m <machine> -k <key> [-s]

如果其他一切都失败了,请尝试将其作为解决方法:

$type   = 'VTL'
$port   = 5062
$server = 'rpa-a-ap001'

& cmd /c ('"{0}" -t {1} -p {2} -m {3} -s' -f $exepath, $type, $port, $server)

答案 1 :(得分:0)

我很遗憾浪费了人们在这里的时间。 我在这里发现了这个问题。显然,“类型”参数不允许使用大写字母。我还没有尝试改变这些,但它似乎解决了这个问题。