2013-11-22 74 views
3

我一直在尋找一段時間,似乎無法理解爲什麼會發生這種情況。嘗試覆蓋隱藏文件時拒絕的權限

我有一個維護文件的腳本。我想保留該文件隱藏,但更改文件屬性導致權限問題,當試圖覆蓋它。

設置是這樣的:

"Test Text" | Out-file 'C:\Test\Test.txt' -Force 
Set-ItemProperty 'C:\Test\Test.txt' -name Attributes -Value "Hidden" 

現在,如果我嘗試覆蓋它,像這樣我得到以下錯誤:

"New Text" | Out-file 'C:\Test\Test.txt' -Force 

Out-file : Access to the path 'C:\Test\Test.txt' is denied. At line:1 char:15 + "Test Text" | Out-file 'C:\Test\Test.txt' -Force + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (:) [Out-File], UnauthorizedAccessException + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand

不過權限似乎並不成爲問題因爲我可以獲取內容,而且我可以很好地刪除文件。

Get-Content 'C:\Test\Test.txt' 

rm 'C:\Test\Test.txt' -force 

解決方法是刪除文件,然後寫我的新的,但我寧願維持現有的文件,如果可能,只是添加到它。

回答

2

Keith提供了一個解釋權限問題的鏈接。以下是我對當前問題的解決方案

由於需要維護原始文件的創建日期,因此我採取的解決方法是取消隱藏文件,寫入文件,然後將其重新設置爲隱藏狀態。

Set-ItemProperty 'C:\Test\Test.xml' -name Attributes -Value "Normal" 

$myobject | Export-CliXml 'C:\Test\Test.xml' -Force 

Set-ItemProperty 'C:\Test\Test.xml' -name Attributes -Value "Hidden" 
2

我不知道爲什麼Out-File出現這個錯誤 - 它也適用於我。然而,集內容和我的系統上正確地添加內容都工作與強制參數:

"New Text" | Add-Content C:\test\Test.txt -Force 

"New Text" | Set-Content C:\test\Test.txt -Force 

編輯補充:我很好奇OUT-之間的區別文件和設置的內容,並發現這一點:

Powershell set-content and out-file what is the difference?

它仍然沒有完全解釋在寫一個隱藏的文件的差異,但可能會感興趣如果y你試圖決定使用哪一個。

+0

謝謝,這很有用。我沒有考慮過設置和添加內容的cmdlet。我使用的實際cmdlet是具有相同權限問題的Export-Clixml。我可能會看到我是否可以抓住xml並使用set-content編寫它。 – malexander

+0

您可以隨時使用ConvertTo-Xml | Set-Content – KevinD

+0

是的,這是我的嘗試,理論上聽起來不錯,但Export-Clixml cmdlet會生成特殊的格式。使用ConvertTo-XML,您將失去使用Import-clixml稍後導入對象所需的格式。 – malexander

4

隱藏的文件必須先刪除,然後才能將其覆蓋爲Out-File(不含-Append參數)。 Add-ContentSet-Content通過修改現有文件的內容而不覆蓋它來解決此問題。請參閱docs on the FileMode.Create枚舉值。

+0

Bam。它是;)我有一個解決方法,但總是很高興知道這些事情的原因。謝謝 – malexander

相關問題