尝试覆盖隐藏文件时拒绝权限

时间:2013-11-22 22:06:45

标签: powershell powershell-v3.0

我一直在寻找一段时间,似乎无法理解为什么会这样。

我有一个维护文件的脚本。我希望隐藏该文件,但更改文件属性会在尝试覆盖它时导致权限问题。

设置是这样的:

"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:拒绝访问路径'C:\ Test \ Test.txt'。在行:1 char:15   +“测试文字”|输出文件'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

解决方法是删除文件然后编写我的新文件,但我更愿意维护现有文件,如果可能的话只添加它。

3 个答案:

答案 0 :(得分:4)

必须删除隐藏文件,然后才能像Out-File那样“覆盖”它们(没有-Append参数)。 Add-ContentSet-Content通过修改现有文件的内容而不覆盖它来解决此问题。请参阅docs on the FileMode.Create枚举值。

答案 1 :(得分:3)

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 :(得分:2)

我不确定为什么Out-File会出现这个错误 - 它也适用于我。但是,Set-Content和Add-Content都可以在我的系统上使用-Force参数正确运行:

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

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

编辑补充:我很好奇Out-File和Set-Content之间的区别,并发现了这个:

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

它仍然没有完全解释写入隐藏文件的区别,但如果您正在尝试决定使用哪个文件,则可能会感兴趣。