Sk8*_*ter 11 powershell file-io powershell-4.0
在我的脚本开头,我想检查一个文件(作为参数给出)是否可以覆盖,如果当前用户没有这样做的权限则退出.
(例如,如果用户或他/她所属的组被拒绝访问文件.)
原因是:在脚本中,我正在处理一些数据(这需要时间),最后,我将结果写入文件,但是整个脚本正确运行会有点令人沮丧,但最后,事实证明该文件是不可写的(我可以在开始时检查).
这是测试文件是否存在的正确方法:
$Outfile = "w:\Temp\non-writable-file.txt" # (normally I get this as a parameter)
$OutFileExists = Test-Path -Path $Outfile -PathType Leaf
Run Code Online (Sandbox Code Playgroud)
当然,如果文件存在则$OutfileExists等于True.
但我想检查这个文件是否可写 - 现在不是(我自己更改了安全设置以便能够测试它):

所以,如果我试试这个:
(Get-Acl $Outfile).Access
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
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
Run Code Online (Sandbox Code Playgroud)
(我也可以过滤掉这个结果.)
好的,现在我知道Everyone组没有写访问权限.
但我仍然不知道如何优雅地检查这个文件的可覆盖性.
mjo*_*nor 19
我用过这个:
Try { [io.file]::OpenWrite($outfile).close() }
Catch { Write-Warning "Unable to write to output file $outputfile" }
Run Code Online (Sandbox Code Playgroud)
它将尝试打开文件进行写访问,然后立即将其关闭(不实际向文件写入任何内容).如果因任何原因无法打开文件,它将运行Catch块,您可以在那里进行错误处理.
| 归档时间: |
|
| 查看次数: |
17580 次 |
| 最近记录: |