输出文件与Write-Host

时间:2019-10-04 16:21:59

标签: powershell output-formatting write-host

当我从.ps1文件Write-Host中看到时,

Parentfolder >> ChildFolder

当我输出到文件时,我看到:

ParentFolder
>>
ChildFolder

我正在使用简单的write-host ($childgroup.name), ">>", ($object.samaccountname)

当我尝试使用ReturnOut-FileExport to CSV等输出相同的信息时,我得到{em> 3 行}}打印为单行

我只希望输出文件具有与Write-Host输出相同的格式。

根据要求:

Write-Host

1 个答案:

答案 0 :(得分:1)

注意事项

  • Write-Host用于显示输出,而不用于输出数据-它绕过 PowerShell的成功输出流(等同于PowerShell的stdout),因此无法将Write-Host的输出(直接 [1] )捕获到变量中,也不能重定向到文件-请参阅this answer的下半部分以获取更多信息。

  • 使用 Write-Output 或-最好-使用 PowerShell的隐式输出行为来输出数据 ,适合用于进一步的程序化处理

除了这一基本区别外, Write-HostWrite-Output在处理参数 的方式上也有所不同:

# What Write-Host prints to the display is a *single string* that is 
# the space-separated list of the (stringification of) its arguments.
PS> Write-Host file1, '>>', file2
file1 >> file2  # printed to *display* only

# Write-Output outputs each argument - whatever its data type - *separately*
# to the success output stream.
# In the case of *string* arguments, each string renders *on its own line*.
PS> Write-Output file1, '>>', file2
file1
>>
file2

使用隐式输出,与上述Write-Output命令等效:

# Send an array of 3 strings to the success stream.
PS> 'file1', '>>', 'file2'
file1
>>
file2

如果将Write-Output命令或其隐式等效项重定向到文件(使用> / Out-FileSet-Content [ 2] ),您将获得相同的3行表示形式。


如果您要输出单行作为数据 ,请使用带引号的字符串;要引用变量并将子表达式嵌入字符串中,请使用可扩展字符串(字符串插值),"...“(请参阅{{ 3}}),或使用字符串串联+

$arg1 = 'file1'; $arg2 = 'file2'

# Expandable string
PS> "$arg1 >> $arg2"
file1 >> file2

# String concatenation
PS> $arg1 + ' >> ' + $arg2
file1 >> file2

[1]在PowerShell v5或更高版本中,您可以 通过信息输出流捕获/重定向Write-Host,编号为{{ 1}};例如:6。但是,请注意,信息输出流的主要目的是与PSv5 + $writeHostOutput = & { Write-Host hi } 6>&1 cmdlet和公用的Write-Information参数一起使用。

[2]仅使用字符串,{<1}} / -InformationAction的行为与>相同,只是在 Windows PowerShell < / em>适用其他默认字符(PowerShell Core 中不存在)。有关差异的更多信息,请参见about_Quoting_Rules