gpt4 book ai didi

PowerShell:检查当前用户是否有权在 PowerShell 中覆盖文件的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 01:44:28 26 4
gpt4 key购买 nike

TL; 博士

在我的脚本开头,我想检查一个文件(作为参数给出)是否可覆盖,如果当前用户没有权限,则退出 .
(例如,如果用户或他/她所属的组已被拒绝访问文件。)

原因:在脚本中,我正在处理一些数据(这需要时间),最后,我将结果写入文件,但是整个脚本正确运行会有点令人沮丧,但最后,事实证明该文件不可写(我可以在开始时检查)。

我试过的

这是测试 是否正确的方法文件存在 :

$Outfile = "w:\Temp\non-writable-file.txt"                # (normally I get this as a parameter)
$OutFileExists = Test-Path -Path $Outfile -PathType Leaf

当然, $OutfileExists将等于 True如果文件存在。

但我想检查这个文件是否可写 - 现在不是(我自己更改了安全设置以便能够测试它):

Everyone - denied from writing

所以,如果我尝试这个:
(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 组没有写入权限。
但是我仍然不知道如何优雅地检查该文件的可覆盖性。

最佳答案

我用过这个:

Try { [io.file]::OpenWrite($outfile).close() }
Catch { Write-Warning "Unable to write to output file $outputfile" }

它将尝试打开文件进行写访问,然后立即关闭它(实际上不向文件写入任何内容)。如果它因任何原因无法打开文件,它将运行 Catch 块,您可以在那里进行错误处理。

关于PowerShell:检查当前用户是否有权在 PowerShell 中覆盖文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22943289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com