Powershell 将测试路径输出重定向到文本文件
txt文件只是一组UNC路径,我试图在验证测试路径后,从这个文本文件中获取一个UNC路径列表,并将其放入另一个文本文件中。它会在屏幕上显示已验证的路径,但不会填充文本文件Powershell 将测试路径输出重定向到文本文件,powershell,write-host,Powershell,Write Host,txt文件只是一组UNC路径,我试图在验证测试路径后,从这个文本文件中获取一个UNC路径列表,并将其放入另一个文本文件中。它会在屏幕上显示已验证的路径,但不会填充文本文件 $cfgs = Get-Content .\cfgpath.txt $cfgs | % { if (Test-Path $_) { write-host "$_" | Out-File -FilePath c:\temp\1.txt -Append } } 写入主机仅写入控制台。我相信你想要的是写输出 $cfgs = G
$cfgs = Get-Content .\cfgpath.txt
$cfgs | % {
if (Test-Path $_) { write-host "$_" | Out-File -FilePath c:\temp\1.txt -Append }
}
写入主机
仅写入控制台。我相信你想要的是写输出
$cfgs = Get-Content .\cfgpath.txt
$cfgs | % {
if (Test-Path $_) { write-output "$_" | Out-File -FilePath c:\temp\1.txt -Append }
}
此外,您可以省略写入输出
,这也可以
$cfgs = Get-Content .\cfgpath.txt
$cfgs | % {
if (Test-Path $_) { "$_" | Out-File -FilePath c:\temp\1.txt -Append }
}
要补充背景信息,请执行以下操作:
- 写入主机[1](通常为控制台aka终端),该主机绕过PowerShell,因此不会通过管道发送任何内容
- 当
合适时,请参见的底部部分;简而言之:您通常只应将其用于仅显示输出写入主机
- 当
- 是生成数据输出的适当cmdlet,但是几乎没有必要,因为您可以依赖PowerShell方便的隐式输出行为,如Steven的回答所示,并在中解释
另外,如果您简单地将
%
()命令的输出作为一个整体传输到单个输出文件调用,而不是为每个输入路径调用输出文件-追加
,那么您的命令将执行得更好
您可以使用cmdlet更优雅地实现命令,而不是将%
与条件显式输出一起使用:
还请注意,要将字符串保存到文件中,使用而不是
更有效
输出文件
,但请注意,在Windows PowerShell中,默认输出字符编码不同(PowerShell[Core]6+不再关注此问题,它始终默认为无BOM的UTF-8);有关何时选择哪个cmdlet的信息,请参见
相比之下,输出文件
和
(其有效别名)使用PowerShell的格式系统将任何非字符串输入对象的显示模式写入输出文件,与默认情况下输出呈现到显示的方式相同。
换句话说:要以适合以后编程处理的方式将对象保存到文件中,您需要使用结构化文件格式,例如CSV()或JSON(,与设置内容相结合)
[1] 在PowerShell 5.0及更高版本中,Write Host
现在写入一个新的流,即信息流(编号6
),默认情况下会打印到主机。看见
因此,从技术上讲,6>
重定向现在确实允许您通过管道发送写主机
输出(尽管这样做不是一个好主意)或捕获/重定向它;e、 g.,
Write Host hi 6>&1 |%{“[$\]”}
。请注意,此重定向输出的对象类型为
Get-Content .\cfgpath.txt |
Where-Object { Test-Path $_ } |
Out-File -FilePath c:\temp\1.txt