Запуск сценария powershell для удаленного получения текущего пользователя? - PullRequest
0 голосов
/ 13 февраля 2020

Так что у меня проблемы с удаленным получением некоторой информации о ключе от текущего пользователя. Я не могу понять, что я делаю неправильно, я могу получить эту информацию на своей машине, но не удаленно. Любой вклад будет полезен, спасибо.

$session = New-PSSession -ComputerName $ComputerName
Invoke-Command -Session $session {$hotfix = Get-HotFix;
$Reg = [Microsoft.Win32.RegistryKey]::OpenBaseKey('CurrentUser','default');
$RegKey= $Reg.OpenSubKey("SOFTWARE\\Google\\Chrome\\BLBeacon");
$ChromeBuild = $RegKey.GetValue("VERSION");
return $ChromeBuild, $hotfix}

1 Ответ

0 голосов
/ 13 февраля 2020

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
    }
} 
...