当我从.ps1文件Write-Host
中看到时,
Parentfolder >> ChildFolder
当我输出到文件时,我看到:
ParentFolder
>>
ChildFolder
我正在使用简单的write-host ($childgroup.name), ">>", ($object.samaccountname)
当我尝试使用Return
,Out-File
,Export to CSV
等输出相同的信息时,我得到{em> 3 行}}打印为单行。
我只希望输出文件具有与Write-Host
输出相同的格式。
根据要求:
Write-Host
答案 0 :(得分:1)
注意事项:
Write-Host
用于显示输出,而不用于输出数据-它绕过 PowerShell的成功输出流(等同于PowerShell的stdout),因此无法将Write-Host
的输出(直接 [1] )捕获到变量中,也不能重定向到文件-请参阅this answer的下半部分以获取更多信息。
使用 Write-Output
或-最好-使用 PowerShell的隐式输出行为来输出数据 ,适合用于进一步的程序化处理。
除了这一基本区别外, Write-Host
和Write-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-File
或Set-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。