gpt4 book ai didi

windows - 如何使用 power shell 确定当前 Windows 用户是否对特定文件具有写入权限

转载 作者:可可西里 更新时间:2023-11-01 14:45:04 27 4
gpt4 key购买 nike

我正在尝试编写一个 power shell 程序/例程,它在 txt 文件的末尾添加两个新行,并且还做许多其他事情。

我想防止由于缺少对文件的写入权限而导致的文件写入尝试失败。所以我想测试当前用户是否对特定文件具有写权限。

我试试

$Files = "C:\Program Files\MySoftware\SWVersion\OtherSubFolder\DesiredFile.txt"
Get-Acl -Path $Files | Format-List AccessToString

但这会显示所有用户对该文件的权限,但我只想知道当前用户是否可以写入所需的文件。

如有任何帮助或指导,我们将不胜感激。

谢谢。

最佳答案

如果您只是想过滤当前用户的 AccessToString 属性的结果,那么假设每行以 DOMAIN\username 格式的用户开头,所有你需要做的是:

(Get-Acl $File).AccessToString | findstr "$env:USERDOMAIN\$env:USERNAME"

如果你想获得 FileSystemAccessRule 对象以便你可以用它做一些事情,按如下方式做:

(Get-Acl $File).Access | ?{$_.IdentityReference -eq "$env:USERDOMAIN\$env:USERNAME"}

如果您想检查用户是否具有特定权限,这可能更有用:

if (((Get-Acl $File).Access | ?{$_.IdentityReference -eq "$env:USERDOMAIN\$env:USERNAME"}).FileSystemRights -match 'Modify') {
# Do whatever it is you want to do if the user has Modify permissions
}

(当然,您可以将 -match 'Modify' 应用于第一个命令的结果,这通常不会有问题,但如果域或用户名包含 "修改”。不太可能,但最好只匹配您感兴趣的属性。)

注意:我将 $Files 更改为 $File 因为您只是为单个文件分配路径。如果 $Files 旨在成为多个文件的路径数组,将其通过管道传递给 Foreach-Object block ,如下所示:

$Files | %{(Get-Acl $_).Access | ?{$_.IdentityReference -eq "$env:USERDOMAIN\$env:USERNAME"}

关于windows - 如何使用 power shell 确定当前 Windows 用户是否对特定文件具有写入权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19532593/

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