Tra*_*ito 3 windows powershell automation
我正在尝试编写一个电源shell程序/例程,它在txt文件的末尾添加两个新行,还可以执行许多其他操作.
由于缺少对文件的写入权限,我想防止文件写入尝试失败.所以我想测试当前用户是否对特定文件进行了写入权限.
我试试
$Files = "C:\Program Files\MySoftware\SWVersion\OtherSubFolder\DesiredFile.txt"
Get-Acl -Path $Files | Format-List AccessToString
Run Code Online (Sandbox Code Playgroud)
但是这会显示文件中所有用户的权限,但我只想知道当前用户是否可以写入所需的文件.
任何帮助或指导都会被贬低.
谢谢.
如果您只想过滤当前用户的AccessToString属性的结果,那么假设每行以DOMAIN\username格式的用户开头,您需要做的就是:
(Get-Acl $File).AccessToString | findstr "$env:USERDOMAIN\$env:USERNAME"
Run Code Online (Sandbox Code Playgroud)
如果要获取FileSystemAccessRule对象以便可以对其执行某些操作,请执行以下操作:
(Get-Acl $File).Access | ?{$_.IdentityReference -eq "$env:USERDOMAIN\$env:USERNAME"}
Run Code Online (Sandbox Code Playgroud)
如果您想检查用户是否具有某些权限,那么这可能更有用:
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
}
Run Code Online (Sandbox Code Playgroud)
(当然,你可以申请-match 'Modify'第一个命令的结果,这通常不会有问题,但如果域或用户名包含"修改",它会破坏.不太可能,但最好只是匹配属性你有兴趣.)
注:我改变$文件至$文件,因为你只分配到一个单一的文件的路径.如果$ Files旨在成为多个文件的路径数组,请将其传递给Foreach-Object块,如下所示:
$Files | %{(Get-Acl $_).Access | ?{$_.IdentityReference -eq "$env:USERDOMAIN\$env:USERNAME"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5867 次 |
| 最近记录: |