【发布时间】:2020-07-02 21:18:42
【问题描述】:
当使用 Write-Host 写入控制台时,此 PowerShell 函数完全符合我的要求,我知道它会执行一些默认格式设置。但是,我找不到任何方法将完全相同的输出保存到文本文件中。
这是我的功能:
function Get-FileHashInfo
{
Param($mydir)
foreach ($item in Get-ChildItem -recurse -file $mydir -force)
{
$mypath = [string]$item.directory + "\" + [string]$item.name
$myhash = Get-FileHash -Path $mypath
Write-Host $myhash.hash $item.name $item.directory
}
}
这是我的控制台输出:
F887266A20CAA2E44E63F1B4E26218FFD4D3541C7A7100ED9FBF3A45F03066A7 a.txt C:\data\tmp
6D21DED17244347CE2C02A96D5F81CED1CAB82343E26D7E3C57A00F0971B58C2 b.txt C:\data\tmp
2732A420088BBACD56DEB0E19D4EF5A28FA20F11B403ED3134EFDC0CC1EA0EC6 c.txt C:\data\tmp\subdir
我只需要将这些行写入与控制台上显示的完全相同的文本文件。然而,无论我尝试什么,我最终都会在输出文件中得到很多额外的数据,格式混乱,或者文本文件中什么都没有。
【问题讨论】:
-
简而言之:
Write-Hostis typically the wrong tool to use,除非意图是仅写入显示器,绕过成功输出流,并且能够将输出发送到其他命令,将其捕获在变量中,将其重定向到文件。要输出一个值,请单独使用它;例如,$value而不是Write-Host $value(或使用Write-Output $value,尽管很少需要)。另见:stackoverflow.com/a/50416448/45375的底部
标签: powershell text file-io