2014-02-20 31 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