1

我的目标是:获得文件或目录的有效权限,而不需要 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 崩溃的屏幕截图,而不能提供文本。

从现在开始,我正在靠墙奔跑,我必须改变什么? Powershell 因调用 advapi32.dll 而崩溃

4

0 回答 0