Мне нужно выдать себя за зарегистрированного пользователя.
Требуется из-за контекста безопасности PS.
Позвольте мне объяснить.
У меня один выигрышный сервис.
И одна библиотека DLL со всей логикой.
И два разных клиента (.exe и ps)
которые используют этот сервис через dll.
Когда я запускаю .exe и вызываю win service
все отлично. Но когда я начинаю 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)"
}
}
Но я не могу это назвать.
Это дает мне следующую ошибку:
Вы не можете вызвать метод для выражения с нулевым значением.