我的目标是:获得文件或目录的有效权限,而不需要 powershell 库中的 PowerShellAccessControl 或 NTFSSecurity 等外部模块(我在其他系统上都使用了这两种模块而没有问题)。仅仅因为它必须运行的系统的所有者不想要“外部不受信任”的东西。在我的系统上测试时,我的情况是该文件存在。我在 Server 2019 上以本地管理员身份运行,我用来测试的来宾帐户已激活并且对文件具有完全访问权限(通过资源管理器验证、扩展权限、有效访问权限)。在 Powershell 上以管理员身份右键单击开始没有区别。
# define method
$MethodDefinition = @'
[DllImport("advapi32.dll", SetLastError = true)]
public static extern uint GetEffectiveRightsFromAclA(
string pacl,
string pTrustee,
out uint pAccessRight);
'@
$Advapi32 = Add-Type -MemberDefinition $MethodDefinition -Name 'Advapi32' -Namespace 'Win32' -PassThru
# execute function
$pacl = [System.String]"c:\testfile.txt"
$pTrustee = [System.String]"guest"
$PACCESS_MASK = [System.uint32]0
$AccessMask = [Win32.Advapi32]::GetEffectiveRightsFromAclA([ref]$pacl, [ref]$pTrustee,[ref]$PACCESS_MASK)
我希望返回访问掩码,一个 uint32 值。
但是[Win32.Advapi32]::GetEffectiveRightsFromAclA([ref]$pacl, [ref]$pTrustee,[ref]$PACCESS_MASK)
,无论有没有$AccessMask =
, 都被称为 PowerShell 崩溃。抱歉,我只能提供 PowerShell 崩溃的屏幕截图,而不能提供文本。