【发布时间】:2014-05-21 12:26:22
【问题描述】:
TL;DR
在我的脚本开始时,我想检查一个文件(作为参数给出)是否可覆盖,如果当前用户没有权限则退出。
(例如,如果用户或他/她所属的组已被拒绝访问文件。)
原因:在脚本中,我正在处理一些数据(这需要时间),最后,我将结果写入文件,但是整个脚本运行正确会有点令人沮丧,但是最后,事实证明该文件不可写(我可以在开始时检查)。
我尝试了什么
这是测试文件是否存在的正确方法:
$Outfile = "w:\Temp\non-writable-file.txt" # (normally I get this as a parameter)
$OutFileExists = Test-Path -Path $Outfile -PathType Leaf
当然,如果文件存在,$OutfileExists 将等于 True。
但我想检查此文件是否可写 - 现在不是(我自己更改了安全设置以便能够对其进行测试):
所以,如果我试试这个:
(Get-Acl $Outfile).Access
我得到这个输出:
FileSystemRights : Write
AccessControlType : Deny
IdentityReference : Everyone
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
FileSystemRights : ReadAndExecute, Synchronize
AccessControlType : Allow
IdentityReference : Everyone
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
FileSystemRights : FullControl
AccessControlType : Allow
IdentityReference : DOESNTMATTER\Pete
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
(我也可以过滤这个结果。)
好的,现在我知道 Everyone 组没有写入权限。
但是我仍然不知道如何优雅地检查这个文件的可覆盖性。
【问题讨论】:
-
如果每个人都被拒绝写入权限,那么没有人可以在不更改权限的情况下写入文件。 “拒绝条目优先于允许条目。这意味着,如果用户是两个组的成员,一个被允许授予权限,另一个被拒绝相同权限,则该用户被拒绝该权限。”
-
@bob:我知道而且我没有问为什么我不能覆盖文件(我自己更改了安全设置以便能够测试它!!),我问我如何检查(在 PowerShell 中)文件是否可写。
标签: powershell file-io powershell-4.0