如何在 powershell 中测试其他用户帐户的真实访问权限

How can test real access right for other User-Account in powershell

我需要尝试特定用户是否对 DFS 文件夹具有读取或写入权限(以验证我的 DFS)。

我是域的管理员,我在 $Credentials 中有该用户的凭据 但 Test-Path、Get-Item、New-Item 不接受凭据

在不同用户的上下文中对 运行ning 命令使用 Invoke-Command

$computer = 'localhost'
$cred     = Get-Credential

Invoke-Command -Computer $computer -Credential $cred -ScriptBlock {
  Param($path)

  if (Test-Path -LiteralPath $path) {
    New-Item -ItemType File "$path\your.txt"
  }
} -ArgumentList 'C:\some\folder'

您也可以使用 Start-Job,但这会 运行 脚本块在后台,因此这意味着更多的管理开销。

另一个选项,如果一切都失败了,可能是 runas.exe,尽管它可能需要一些 creative quoting:

& runas /user:DOM\username "powershell -Command \`"&{ New-Item 'C:\some\folder\your.txt' }`"\"

如果您只需要检查给定文件夹的权限而不执行任何操作,您可以使用 Get-Acl:

Get-Acl 'C:\some\folder' |
  select -Expand Access |
  ? { $_.IdentityReference -like '*\username' }

而是递归地检查 acl,我使用 Start-Process 和特定凭据的真实写访问权限(start-processrunas 的别名)。 该过程写入一个包含 $(whoami) 内容的新文件 结束进程后检查文件是否存在及其内容。

function test-Write ($folder)
    $WinCredential = Get-Credential -UserName "Domain\User" -Message "Login"
    Start-Process -WindowStyle Hidden -Wait -Credential $WinCredential -FilePath "powershell.exe" -ArgumentList "whoami | out-file '$folder\test.txt'"
    if ((get-content "$folder\test.txt") -like "Domain\User") {
       return 'OK'
    }
    return 'Erreur NTFS Access'
}