powershell - 重定向命令行输出
问题描述
我正在使用 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 将所有脚本输出重定向到文本文件
解决方案
我通过使用 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 ***'
}
推荐阅读
- json - Kotlinx.Serializer - 创建一个快速的 JSON 发送
- symfony - Symfony 4 自定义约束 atPath 不起作用
- c# - MongoDb 使用过滤器匹配列表
- docker - 一台主机上有多个 GitLab Runner Docker 实例?
- android - react-native 中使用 AsyncStorage.setItem() 持久化的数据可以从本机代码中获取吗?
- cmake - 使用 Clion 编译 .o 文件
- java - MapStruct:BeanMapping 和 Mapping 的区别
- node.js - 如何使用 Angular 应用程序作为 Node.js 的视图引擎
- postgresql - PostgreSQL:更新大表
- sql - 如何从具有相似列名的不同不相关表中获取列?