2014-02-20 64 views
1

下面是代碼:的StreamWriter在PowerShell中輸出的空白文件

$outputPath = "c:\Output" 
$scopePath = "$($outputpath)\scopes.csv" 
$clientsPath = "$($outputpath)\clients.csv" 
$scopeStream = New-Object System.IO.StreamWriter($scopePath) 
$clientStream = New-Object System.IO.StreamWriter($clientsPath) 
$scopeStream.WriteLine("Scope,ScopeName") 
$clientStream.WriteLine("IP,MAC,Lease,Reservation,Hostname") 
$scopeStream.Flush() 
$clientStream.Flush() 
... 
$scopeStream.WriteLine("$($scope.Name),$($scope.Address)") 
... 
$clientStream.WriteLine("$($client.IP),$($client.MAC),$($client.Lease),$($client.Reservation)$($client.Hostname)") 
... 
$scopeStream.close() 
$scopeStream.dispose() 
$clientStream.close() 
$clientStream.dispose() 

如果它們不存在的文件被創建,但沒有什麼是以往任何時候都寫信給他們。完全空白的文件,我無法弄清楚爲什麼,爲了我的生活。

回答

1

我以前見過這個 - 通常是因爲StreamWriter拋出一個異常。你會認爲這會在你的腳本中造成一個異常,但是我已經看到了拋出非終止異常的情況,所以你的腳本永遠不會收到它。

運行的代碼塊之後,嘗試獲得的最後一個異常的詳細信息:

$Error[0].Exception | Format-List * -Force 

如果有一個例外,它應該幫助你弄清楚到底是什麼原因造成的問題。我的猜測是這是一個權限問題。

+0

我不能檢查這個到週一,但它肯定不能傷害。 – sapph

+0

事實證明,腳本的先前運行在句柄可以關閉和處置之前已經終止,因此文件被鎖定。所以我用try/catch包裝了New-Object。 catch關閉並處理,然後對新對象執行第二次(嵌套)try/catch。如果失敗了,我只是拋出一個錯誤。 – sapph

+0

非常好!我很高興你能夠得到它的工作。 – KevinD