[英]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 /c
或cmd /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.