使用Powershell和Test-Path,如何区分"文件夹不存在"和"访问被拒绝"之间的区别

Gar*_*rry 7 powershell

在powershell中使用Test-Path命令,如何区分"文件夹不存在"和"拒绝访问"?

Nex*_*ine 7

TL; DR:好消息是,Test-Path即使你没有权限也往往不会返回false(当它没有权限时,你会得到一个异常,而不是一个简单的$false)

更深入地说,它取决于您拒绝访问的含义.根据您要检查的权限,取决于PowerShell命令对您有用.

例如,C:\ System Volume Information是非管理员无权限的文件夹.Test-Path对于此文件夹返回true - 它存在 - 即使您无法访问它.另一方面,运行Get-Child-Item失败.所以在这种情况下,你需要运行

$path = 'C:\System Volume Information'
if ((Test-Path $path) -eq $true)
{
    gci $path -ErrorAction SilentlyContinue
    if ($Error[0].Exception -is [System.UnauthorizedAccessException])
    {
        # your code here
        Write-Host "unable to access $path"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您具有读取权限但没有写入权限,那么您必须实际尝试写入该文件,或者查看其安全权限并尝试找出适用于该脚本运行的当前用户的内容:

(get-acl C:\windows\system32\drivers\etc\hosts).Access
Run Code Online (Sandbox Code Playgroud)