我需要模拟登录用户。由于 ps 安全上下文,它是必需的。
让我解释。我有一个双赢的服务。还有一个具有完整逻辑的 dll 库。还有两个不同的客户端(.exe 和 ps)通过 dll 使用这个服务。
当我启动 .exe 并调用 win 服务时,一切正常。但是当我启动 ps 并尝试使用具有相同参数的相同 win 服务方法时,它给了我这个错误:(而且我在同一台机器上使用相同的用户启动 exe 和 ps)
未提供所需的模拟级别,或者提供的模拟级别无效。
实际上,我尝试使用当前帐户进行模拟。所以我找到了以下方法:
function ImpersonateLoggedOnUser
{
param
(
[Parameter(Mandatory = $true)]
[IntPtr]
$TokenHandle
)
$SUCCESS = $Advapi32::ImpersonateLoggedOnUser($TokenHandle); $LastError = [Runtime.InteropServices.Marshal]::GetLastWin32Error()
if(-not $SUCCESS)
{
throw "ImpersonateLoggedOnUser Error: $(([ComponentModel.Win32Exception] $LastError).Message)"
}
}
但我不能叫它。它给了我以下错误:您不能在空值表达式上调用方法。