我有一個PowerShell腳本根據文件的各種條件設置標誌。爲簡潔起見,我將縮寫。爲什麼Powershell會寫入控制檯,但不寫入文件?
$path = "c:\path"
$srcfiles = Get-ChildItem $path -filter *.htm*
ForEach ($doc in $srcfiles) {
$s = $doc.Fullname
Write-Host "Processing :" $doc.FullName
if (stuff) {flag 1 = 1} else {flag 1 = 0}
if (stuff) {flag 1 = 1} else {flag 1 = 0}
if (stuff) {flag 1 = 1} else {flag 1 = 0}
$t = "$s;$flag1;$flag2;$flag2"
Write-Host "Output: " $t
這一切都很好。我的文件進程,標誌設置正確,以$ t生成一個整齊的分號分隔線。但是,如果我在該函數的末尾敲擊這兩行,則
$stream = [System.IO.StreamWriter] "flags.txt"
$stream.WriteLine $t
我收到此錯誤。
Unexpected token 't' in expression or statement.
At C:\CGC003a.ps1:53 char:25
+ $stream.WriteLine $t <<<<
+ CategoryInfo : ParserError: (t:String) [], ParseException
+ FullyQualifiedErrorId : UnexpectedToken
如果我讀這個寫,似乎write-host
刷新我的變量$t
纔到了WriteLine
。然而,在我嘗試out-file
之前,我想了解在Write-Host阻止Write Line
將其視爲有效之後$t
發生了什麼。還是有什麼我失蹤?
真棒!至少我得到了一個不同的錯誤...我的第一條記錄寫入文件,然後我得到運行時錯誤,它被另一個進程使用......這是有道理的。是否存在將覆蓋該文件鎖定的streamwriter方法的強制切換?它不喜歡'-append'。 – dwwilson66
Um ... streamwriter對象在用於解鎖文件後需要被.closed()和最終.disposed()。如果您已經覆蓋$ stream變量,您需要關閉powershell並重新打開以解鎖文件。而不是在循環中運行你的stramwriter,在循環之前,並關閉它在你的腳本中 –
是的,我瞭解'.closing'這個文件......但是它通過'foreach($ doc) ',我需要在每次迭代結束時關閉它嗎?我想我只需要在所有迭代結束時關閉文件......我錯過了什麼? – dwwilson66