繁体   English   中英

如何使用powershell脚本中的参数调用可执行文件

[英]How to call an executable with parameters from powershell script

我正在寻求有关如何使用powershell脚本调用具有特定参数的cmd的帮助。 到目前为止,我所写的内容如下,但它给出了一条错误消息,说明$ _cmd无法识别。

我试图将日期和日期传递给一个exe ...从你可以看到的日期到今天需要 - 1和现在应该是现在。 可执行文件的路径是D:\\ DataService,这就是我在脚本中提前设置路径的原因。

    Write-Host "Get data from service"

$path ="D:\DataService"

Push-Location $path
$Date = Get-Date
$DateFrom = $Date.ToString("yyyy-MM-dd HH:mm:ss")
$DateTo = $Date.AddDays(-1).ToString("yyyy-MM-dd")
$_cmd = "ReportGen.exe -ReportType Data -DateFrom $DateFrom $DateTo"

%$_cmd%

有什么建议吗?

不要创建命令字符串。 只需使用呼叫运算符( & ):

Write-Host 'Get data from service'

$path = 'D:\DataService'

Push-Location $path

$Date     = Get-Date
$DateFrom = $Date.ToString('yyyy-MM-dd HH:mm:ss')
$DateTo   = $Date.AddDays(-1).ToString('yyyy-MM-dd')

& ReportGen.exe -ReportType Data -DateFrom $DateFrom $DateTo

您希望根据以下注释使用Invoke-Expression

Invoke-Expression $_cmd

原评论,这是错误的:

你有没有尝试在前面放一个&符号。 例如:

& $_cmd

不确定为什么使用%字符。

%$_cmd%看起来像是PowerShell和cmd语法的混合体。 %没有特别的意义。 PowerShell将其解释为命令的文字名称,当然这是不可识别的。 要执行字符串的内容,请使用

Invoke-Expression $_cmd

但是,只有当ReportGen.exe位于路径中时才会有效,并且cmd甚至不参与,因为您没有在任何地方调用它。 如果由于某种原因,正如您所说,您特别想要使用cmd执行该命令,则应在开头添加cmd /ccmd /k 但是,您甚至不需要分配字符串,只需直接调用cmd即可:

cmd /c ReportGen.exe -ReportType Data -DateFrom $DateFrom $DateTo

/c表示执行命令后cmd将退出。 /k表示执行命令后cmd提示符将保持打开状态。 您可能需要/c以便在执行脚本后返回PowerShell提示符。

几件事。 一,停止使用Write-Host。 老实说,让这是你最后一次使用它(除非你真的需要它 - 并且知道你为什么需要它)。 相反,使用Write-Output - 即使您知道您的脚本将在控制台中运行。 其次,您还可以考虑使用Start-Process cmdlet及其参数-ArgumentList。

你的$ DateFrom和$ DateTo似乎是倒退的,因为你将$ DateTo设置为昨天。 因此,除非你从今天到昨天,否则你可能想要调整它。 此外,您指定起始日期,但只是在最后添加日期,不确定是否需要指定它是什么,或者两个日期是否是同一参数的一部分。 至于运行带参数的命令,请使用带有参数逗号分隔的Invoke-Command:

Invoke-Command -FilePath "D:\DataService\ReportGen.exe" -ArgumentList '-ReportType Data','-DateFrom $DateFrom','$DateTo'

我会这样做的。

$CustomProcess = New-Object System.Diagnostics.ProcessStartInfo
$CustomProcess.FileName = "ReportGen.exe"
$CustomProcess.arguments = "-ReportType Data -DateFrom $DateFrom $DateTo"
[System.Diagnostics.Process]::Start($CustomProcess)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM