许多用PowerShell的人一定会发现在PowerShell中有Write-Outup和Write-Host这两个命令,但是很多人都不是很清楚两者的区别。
表明上看这两者都可以输出字符到Console上,但是他们到底有什么不同呢?下面让我们一起测试看看:
Write-Host的测试:
Function Test
{
Write-Host "Result A"
"Result B"
}
Test
Result A
Result B
$a = test
Result A
$a
Result B
当直接运行方法的时候,会得到所有的两个输出,但是write-host是直接输出到控制台的,所以这个值是无法通过变量获得的。
Write-Output的测试:
Function WriteTest($amount, $rate=0.8)
{
$amount * $rate
}
Function WriteOutputTest($amount, $rate=0.8)
{
Write-Output $amount * $rate
}
WriteTest 100
WriteOutputTest 100
得到的结果是:
80
100
*
0.8
当然两者还有个字不同的参数支持,比如Write-Host支持NewLine等参数,实际上两者的区别是Write-Host只是仅仅将字符串输出到屏幕,而Write-Output则是可以把对象传递输出,再来看看如下一个简单的例子对比便知:
PS C:\Users> $process = get-process
PS C:\Users> Write-Host $process
System.Diagnostics.Process (AcroRd32) System.Diagnostics.Process (AcroRd32) System.Dia
.Diagnostics.Process (AdobeARM) System.Diagnostics.Process (AlipaySecSvc) System.Diagn
gnostics.Process (atieclxx) System.Diagnostics.Process (atiesrxx) System.Diagnostics.P
s.Process (CcmExec) System.Diagnostics.Process (CISVC) System.Diagnostics.Process (com
ess (conhost) System.Diagnostics.Process (conhost) System.Diagnostics.Process (csrss)
PS C:\Users> $process = get-process
PS C:\Users> Write-Output $process
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
208 16 7776 9024 99 1.48 1416 AcroRd32
333 42 151452 113888 362 49.22 5104 AcroRd32
68 9 1880 664 70 0.37 5328 acrotray
304 19 4400 1476 107 2.96 4512 AdobeARM
224 15 3836 5020 59 5,413.81 1800 AlipaySecSvc
72 8 1352 1116 43 1.33 1696 armsvc
139 10 2204 872 73 0.33 3800 atieclxx
121 7 1640 1056 29 1.11 924 atiesrxx