PowerShell всегда будет запускаться в контексте пользователя, который его запустил.
Вы не можете использовать PowerShell для запуска в качестве удаленного пользователя, вошедшего в систему текущего пользователя, поскольку это граница безопасности Windows.
Чтобы запустить код от имени вошедшего в систему пользователя, создайте запланированное задание, которое будет запускаться, когда пользователь входит в систему или использует MS SysteInternals psexe c .exe , который предоставляет параметры для запуска в качестве зарегистрированный пользователь.
Согласно документации ...
psexe c -i Запустите программу, чтобы она взаимодействовала с рабочим столом указанного сеанса на удаленная система. Если сеанс не указан, процесс запускается в сеансе консоли.
-u Указывает необязательное имя пользователя для входа в систему на удаленном компьютере.
Существует модуль PowerShell с усиленным psexe c подход через MS powershellgallery.com
С WMF 5 и выше (чтобы получить последнюю доступную версию модуля InvokePsExe c), просто запустите эту команду (требуется соединение inte rnet):
Find-Module -Name '*psexec*' | Format-Table -AutoSize
<#
Version Name Repository Description
------- ---- ---------- -----------
0.0.7 psexec PSGallery A small PowerShell module to run Sysinternals PsExec
1.2 InvokePsExec PSGallery Svendsen Tech's Invoke-PsExec for PowerShell is a function that lets you execute PowerShell and batch/cmd.exe code asynchro...
#>
Install-Module -Name InvokePsExec
При всем этом, чтобы получить удаленный ключ, вам не нужно пытаться запускать что-либо в качестве текущего пользователя, просто нажмите на куст реестра и потяните его, как если бы вы работали локально.
Кроме того, нет необходимости делать это с нуля, так как быстрый веб-поиск с помощью «PowerShell hkcu удаленно» даст вам хороший список людей, которые пытаются это сделать, и каковы их результаты.
Вот пример результатов, показывающих, как добывать удаленный реестр, используя устаревший модуль.
### query HKCU registry information remotely
<#
https://community.idera.com/database-tools/powershell/ask_the_experts/f/powershell_remoting-24/17743/query-hkcu-registry-information-remotely
Please check the below posted script. It requires get-regstring module. Its available in http://psremoteregistry.codeplex.com/
I used this script successfully to find a entry in proxyoverride settings of a each logged in user. You can change this script as per your need.
#>
$computer = Get-Content 'c:\test\hosts.txt '
Foreach ($comp in $computer)
{
$name = Get-WmiBbject Win32_ComputerSystem -computername $comp |
select username
$namesplit = $name.username.split('\')
$domainname = $namesplit[0]
$Username = $namesplit[1]
$objUser = New-Object System.Security.Principal.NTAccount("$domainname","$username")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$SID = $strSID.Value
$getRegStringSplat = @{
Key = "$SID\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Hive = 'users'
ComputerName = $comp
Value = 'proxyoverride'
}
$reg = Get-RegString @getRegStringSplat
$regoutput = $reg |
Select data
$searchstr = "somedomain.com"
$Sel = $regoutput |
Select-String $searchstr -SimpleMatch
If ($sel -eq $null)
{
"In $comp $username does not contain $searchstr." |
Out-file c:\test\proxy_output.txt -Append
}
Else
{
"Somedomain.com Found in $comp in $username" |
Out-file c:\test\proxy_output.txt -Append
}
}