在参数协助下运行命令

问题描述

我有一个命令,该命令以静方式运行程序,它使用XML文件存储数据,并使用Word模板基于过滤器xml文件创建多个Word文档。

我使用的命令是:

"P:\ath to\executable" -Username:Admin -Password:Pa55w0rd -DatadeFinition:"C:\Data.xml" -Datafilter:"C:\Filter.xml" -wordtemplate:"C:\Batch\Paul1.dotx" -Targetdocument:="C:\Batch\Paul1.pdf" -filetype:PDF -Log:"C:\Logs\error.log"  -Usage:DocgENSILENT

我需要将其作为我主要管理的PowerShell脚本运行:

set-executionpolicy unrestricted  

$datadeFinition = Get-Content "C:\Data file.xml"
$datafilter = Get-Content "C:\Filter for data file.xml"
$wordTemplate = Get-Content "C:\"C:\Template\Paul1.dotx"
$targetFolder = Get-Content "C:\"C:\Paul\Paul.pdf"

Stop-Job = "Executable path" -Username:Admin -Password:Pa55w0rd -DatadeFinition:%dataDeFinition% -Datafilter:%dataFilter% -wordtemplate:%wordTemplate% -Targetdocument:%targetFolder% -filetype:docx -Log:%logPath%  -Usage:DocgENSILENT 

Stop-Job 1

set-executionpolicy restricted  

Write-Host -NoNewLine "Press any key to continue..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 

我的问题是脚本启动了可执行文件,但没有传递变量,有人可以指导我正确的方向来解决此问题吗?

解决方法

要使此工作正常,取决于可执行文件的行为。我注意到了一些事情:

  1. 不是吗?

    $wordTemplate = Get-Content "C:\"C:\Template\Paul1.dotx"
    

    是这样:

    $wordTemplate = "C:\Template\Paul1.dotx"
    

    确定要使用Get-Content吗? (除此之外,示例中的路径和引用不正确。)

  2. 不是吗?

    $targetFolder = Get-Content "C:\"C:\Paul\Paul.pdf"
    

    是这样:

    $targetDocument = "C:\Paul\Paul.pdf"
    

    我怀疑Get-Content是否正确,因为大概您的输出文件还不存在?我还重命名了变量,以便在您的命令中更有意义。

  3. 实际上,您确定其中的任何一个都需要Get-Content吗?您不是在指定文件名,而不是文件的内容

  4. 在PowerShell中,变量的前缀是$,而不是被%包围。

  5. 在脚本中使用Set-ExecutionPolicy 来使脚本能够运行是没有意义的,因为该脚本已在运行。 (也就是说,如果执行策略阻止脚本执行,PowerShell将不允许您首先运行脚本。)

如果我对您的变量的猜测是正确的,我认为您的脚本应该看起来像这样(还要注意,我指定了一个$logFile变量,但在您的脚本中没有看到):

$datadefinition = "C:\Users\Administrator\data\Sample Model_146_object type(s).xml"
$datafilter = "C:\Users\Administrator\data\Sample Model_146_object type(s).xml"
$wordtemplate = "C:\Users\Administrator\Templates\Base object.docx"
$targetdocument = "C:\Users\Administrator\Result\sample test15"
$logfile = "C:\Users\Administrator\Logs\C4W Error.log"

& "C:\Program Files (x86)\Communicator4Word.exe" -Username:Admin -Password: -Datadefinition:$datadefinition -Datafilter:$datafilter -wordtemplate:$wordtemplate -Targetdocument:$targetdocument -filetype:docx -Log:$logfile -Usage:DOCGENSILENT

当您使用Communicator4Word.exe并且没有密码时,我不知道-Password:的行为。 (这是语法错误,还是您应该完全省略-Password:?)