none
как в Powershell вызвать RegLoadKey на другом компьютере ? RRS feed

  • Вопрос

  • необходимо для анализа подгружать кусты реестра из списка в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

    как в Powershell вызвать RegLoadKey на другом компьютере ?

     

    6 декабря 2010 г. 15:15

Ответы

  • Т.к не разу не программировал,долго бился,в итоге получилось =))

     

     

    $signature = @"
    [DllImport("advapi32.dll")]
    public static extern int LogonUser(String lpszUserName, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
    
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern int ImpersonateLoggedOnUser(IntPtr hToken);
    
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern bool RevertToSelf();
    
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern long RegLoadKey(int hKey, String lpSubKey, String lpFile);
    
    [DllImport("advapi32.dll", SetLastError = true)]
    public static extern int RegConnectRegistry(string lpmachineName, int hKey, ref int phKResult);
    
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern int RegUnLoadKey(UInt32 hKey,string lpSubKey);
    "@
    
    $reg = Add-Type -MemberDefinition $signature -Name "Registry" -Namespace "Win32Functions" -PassThru
    $lngTokenHandle = New-Object IntPtr(0)
    $phKResult = New-Object IntPtr(0)
    $blnResult = $reg::RevertToSelf()
    $blnResult = $reg::LogonUser("Administrator", "contoso.com", "PassWord",9, 0, [ref]$lngTokenHandle)
    $reg::ImpersonateLoggedOnUser($lngTokenHandle)
    
    $reg::RegConnectRegistry("RemoteComputer",0x80000002,[ref]$phKResult)
    $reg::RegLoadKey($phKResult,"TestComp","C:\Documents and Settings\Administrator\Ntuser.dat")
    $reg::RegUnLoadKey($phKResult,"TestComp")
    

     

    • Помечено в качестве ответа Alex 2 8 декабря 2010 г. 6:46
    6 декабря 2010 г. 21:40
    Отвечающий

Все ответы

  • 1)psexec

    psexec \\comp1 reg load HKLM\TestComp "C:\Documents and Settings\TestUser\NtUser.dat"
    

    2)Использовать Win32_Process

     

    $proc = [WMICLASS]"\\comp1\root\cimv2:Win32_Process"
    $proc.Create('reg.exe load HKLM\TestComp "C:\Documents and Settings\TestUser\NtUser.dat"')
    

    3)get-hep Invoke-Command -full

    Соответственно,можно также использовать reg unload.

    6 декабря 2010 г. 18:15
    Отвечающий
  • Возможно и, вот, это вам может пригодится: Remote registry access and creating new Registry values with PowerShell


    blog: http://shss.wordpress.com/
    6 декабря 2010 г. 20:51
  • Чувствуются руки админов :) ,

    а хочется ответа от программера...

    типа ( http://blog.securitywhole.com/2010/02/02/getting-registry-last-write-time-with-powershell.aspx  )

    6 декабря 2010 г. 21:29
  • Т.к не разу не программировал,долго бился,в итоге получилось =))

     

     

    $signature = @"
    [DllImport("advapi32.dll")]
    public static extern int LogonUser(String lpszUserName, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
    
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern int ImpersonateLoggedOnUser(IntPtr hToken);
    
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern bool RevertToSelf();
    
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern long RegLoadKey(int hKey, String lpSubKey, String lpFile);
    
    [DllImport("advapi32.dll", SetLastError = true)]
    public static extern int RegConnectRegistry(string lpmachineName, int hKey, ref int phKResult);
    
    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern int RegUnLoadKey(UInt32 hKey,string lpSubKey);
    "@
    
    $reg = Add-Type -MemberDefinition $signature -Name "Registry" -Namespace "Win32Functions" -PassThru
    $lngTokenHandle = New-Object IntPtr(0)
    $phKResult = New-Object IntPtr(0)
    $blnResult = $reg::RevertToSelf()
    $blnResult = $reg::LogonUser("Administrator", "contoso.com", "PassWord",9, 0, [ref]$lngTokenHandle)
    $reg::ImpersonateLoggedOnUser($lngTokenHandle)
    
    $reg::RegConnectRegistry("RemoteComputer",0x80000002,[ref]$phKResult)
    $reg::RegLoadKey($phKResult,"TestComp","C:\Documents and Settings\Administrator\Ntuser.dat")
    $reg::RegUnLoadKey($phKResult,"TestComp")
    

     

    • Помечено в качестве ответа Alex 2 8 декабря 2010 г. 6:46
    6 декабря 2010 г. 21:40
    Отвечающий
  • Варианты 1-4 протестированы в домене.

    Успешно отработал только первый.

    Скорее всего, это связано с доменными политиками.

    Ну, будет свободное время, разберёмся и с этим.

    Большое спасибо Kazun за все четыре варианта.

     

    8 декабря 2010 г. 6:48