将.txt文件传递到Powershell命令

时间:2018-10-18 16:46:40

标签: powershell automation parameter-passing inno-setup

我正在尝试通过powershell将带有参数的.txt文件传递给.exe文件。目前,这就是我所拥有的。

Write-Host "starting upgrade at $(Get-Date -format 'U')"


C:\dev\temp.exe.exe /DIR="C:\TEST" /BTPServerHost="Test" /DBInstance="testDB" /Log=C:\path\to\test\testlog.txt

这正在InnoScript文件中调用一个接受命令行输入的函数。

我将如何格式化.txt文件,以及如何将其传递到.exe?任何帮助,将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:0)

此脚本从txt文件中获取参数,并将其传递到可执行文件中,并自动填充安装向导中的字段。这是我想要做的,但是我不想为输入txt文件中的每个参数启动新的过程。

Write-Host "starting upgrade at $(Get-Date -format 'U')" Get-Content -Path C:\TestInput.txt -Raw | foreach {Start-Process C:\dev\test.exe -ArgumentList $_}

传入的TestInput.txt文件如下:

 /DIR="C:\TEST" 
 /ServerHost="Test" 
 /DBInstance="testDB" 
 /Log=C:\testlog.txt

答案 1 :(得分:0)

如果您要说的是,在此文本文件中,单独的行上只有这些自变量行,您是在说您已经尝试了以下类似操作,但未成功?

消息行也不需要Write-Host,因为默认值输出到屏幕。通常,您只需要Write-Host来为屏幕文本着色,以及其他几种格式化情况,具体取决于您在做什么。全部避免,应该避免写主机。

"starting upgrade at $(Get-Date -format 'U')"
($ConsoleCommand = Get-Content -Path 'd:\temp\input.txt' -Raw)

# Results - showing the commands in the file before process them

whoami
get-date
'hello world'

不使用-Wait开关,这将产生3个单独的PowerShell控制台并显示结果

ForEach($CmdLine in $ConsoleCommand)
{ Start-Process -FilePath powershell -ArgumentList "-NoExit","-Command  &{ $CmdLine }" }

您当然可以指向您的.exe与我在这里所做的事情。

Start-Process

通过在指定.txt文件路径后添加-Raw,它将忽略换行符,并以保留换行符的一个字符串返回文件的全部内容。默认情况下,文件中的换行符用作分隔符,以将输入分成字符串数组。