2016-11-23 86 views
0

我有此腳本輸出文件發出

ForEach ($u in $usersFromFile) 
{ 
try{ 
    $nomailbox = if (-not (get-mailbox $u.alias)){ 
    $notfound = $notfound + $nomailbox 
     Write-host "No mailbox for "$u.alias -F blue|out-file "d:\scripts\nomailbox.txt"} 
    } 

Catch{} 

沒有被寫入到outfile中

我缺少什麼?

TIA

安迪

+3

'Write-Host'寫入** host **(或信息流)不輸出。 – PetSerAl

+0

['寫主機被認爲是有害的](http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful/) – JosefZ

回答

0

如果你正在使用PowerShell的版本低於5,出主機寫入到主機,就像PetSerAl說,你應該用寫輸出,來代替。通過PS 5,您可以使用Out-Host實現以前使用Out-Host無法實現的功能。

0

只需使用:

ForEach ($u in $usersFromFile) { try{ 
    $nomailbox = if (-not (get-mailbox $u.alias)){ 
    $notfound = $notfound + $nomailbox 
     Write-Output "No mailbox for "$u.alias -F blue|out-file "d:\scripts\nomailbox.txt"} 
    } 

Catch{} 

這應該工作。但是我想,你不是要去顏色這條線沒有原因的。你可以用一個函數太使用:

function writehosttofile { 
Param(
[switch]$para 
) 
Write-Host "No mailbox for "$u.alias -F blue 

if($para){ 
"No mailbox for " + $u.alias 
} 

} 

writehosttofile -para | out-file "d:\scripts\nomailbox.txt" 

寫主機

說明

寫主機發送對象到主機。它不返回任何對象。

您也可以瀏覽到您的腳本,並在文件重定向所有輸出:

PS C:\temp> cd c:\bin 
PS C:\bin> .\script.ps1 > C:\bin\script_output.txt 

有一個愉快的一天。