首页 > 解决方案 > 重定向命令行输出

问题描述

我正在使用 PowerShell 函数调用外部应用程序NetworkAPITest.exe ,如下所示:

Function Exec-NetworkAPITest {
    [CmdletBinding()]  
    param
    (
       [parameter(Mandatory=$true)]
       [String]$Option,
       [String]$Server,
       [String]$Value      
    )

    $Command = ".\NetworkApiTest.exe"
 
    try {
       write-host '>>> NetworkAPITest.exe' $Option $Server $Value
       write-host ''
       & "$Command" $Option $Server $Value      
    } catch {
       write-host '*** ERROR: executing NetworkAPITest.exe'
       write-host '***' $PSItem.ToString()
    }
    write-host ''
    write-host '*** DONE ***'
}

我将脚本的输出重定向到这样的文本文件:

PS C:\temp> .\myscript.ps1 *> log.txt

但是,然后我得到了错误:

NetworkTest.exe : 
At C:\temp\myscript.ps1:789 char:8
+        & "$Command" $Option $Server $Value
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

我应该如何编写 Exec-NetworkAPITest() 函数,以便我可以使用 *> log.txt 将所有脚本输出重定向到文本文件

标签: powershell

解决方案


我通过使用 Invoke-Expression 使其工作并将输出重定向到文本文件。然后显示该文本文件的内容。

Function Exec-NetworkAPITest_2 {
    [CmdletBinding()]  
    param
    (
       [parameter(Mandatory=$true)]
       [String]$Option,
       [String]$Server,
       [String]$Value      
    )
 
    try {
       write-host '>>> NetworkAPITest.exe' $Option $Server $Value
       write-host ''
       $c = "& .\NetworkApiTest.exe "+$Option+' '+$Server+' '+$Value 
       Invoke-Expression $c 2>&1 > psscript.tmp
       Get-Content psscript.tmp
    } catch {
       write-host '*** ERROR: executing NetworkAPITest.exe'
       write-host '***' $PSItem.ToString()
    }
    write-host ''
    write-host '*** DONE ***'
}

推荐阅读