Редактирование ключа реестра на удаленном компьютере с помощью Powershell - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь изменить значение ключа реестра на удаленной виртуальной машине под управлением Windows 7. Для этого я использую следующие команды:

$RegistryBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', "WIN-MONKU")
$RegKey= $RegistryBase.OpenSubKey("SOFTWARE\lalaland\node")
$RegistryValue = $RegKey.GetValue("HostAddress")
Write-Host "HostAddress: $RegistryValue"

Но я получаю сообщения об ошибках:

Exception calling "OpenRemoteBaseKey" with "2" argument(s): "Attempted to perform an unauthorized operation."
At D:\workspace\Scripts\Update.ps1:35 char:1
+ $RegistryBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('Loc ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : UnauthorizedAccessException

You cannot call a method on a null-valued expression.
At D:\workspace\Scripts\Update.ps1:36 char:1
+ $RegKey= $RegistryBase.OpenSubKey("SOFTWARE\lalaland\node")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

You cannot call a method on a null-valued expression.
At D:\workspace\Scripts\Update.ps1:37 char:1
+ $RegistryValue = $RegKey.GetValue("HostAddress")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Для меня это похоже на проблему с авторизацией.Я не уверен, где я должен предоставить учетные данные.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Вы говорите ...

'не может вызвать powershell на удаленном компьютере.Я хочу получить доступ к реестру с моего настольного компьютера. '

Тем не менее, заголовок вашего сообщения говорит ...

' Редактирование ключа реестра на remote компьютер с использованием Powershell '.

Итак, на локальном ПК у вас включен Hyper-V и у вас есть гостевая ОС Win7, то есть это удаленный хост.Исходя из этого, вы не используете развертывание домена, вам нужно включить PSRemoting с использованием рабочей группы между вашим ПК и виртуальной машиной.

PowerShell Remoting между двумя компьютерами рабочей группы

# configure the machine to allow access.
Enable-PSRemoting –force

Если для одной из сетевых карт на вашем компьютере установлен тип сетевого подключения «Public», то требуемый порт не будет открыт в настройках брандмауэра.Если вы не хотите менять тип сетевого подключения, вам придется вручную настроить брандмауэр, чтобы пропускать трафик.Если вы планируете подключиться через определенный порт, убедитесь, что вы правильно настроили правила брандмауэра.Если вы просто используете порты по умолчанию, посмотрите этот недавний пост в блоге, чтобы выяснить, какие порты открывать.

# configure the client machine.
Start-Service WinRM
Set-ItemProperty –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System –Name  LocalAccountTokenFilterPolicy –Value 1 –Type DWord

# running on Windows XP
Set-ItemProperty –Path HKLM:\System\CurrentControlSet\Control\Lsa –Name ForceGuest –Value 0

добавьте имя вашего сервера в настройку TrustedHosts в конфигурации WinRM, что позволяетваш клиентский компьютер для подключения к вашему серверному компьютеру с использованием механизма аутентификации, который не аутентифицирует сервер (как это делает Kerberos):

Set-Item WSMan:\localhost\Client\TrustedHosts –Value <ServerMachineName> -Force

# If there is an existing list of servers 
Set-Item WSMan:\localhost\Client\TrustedHosts –Value <ServerMachineName> -Force -Concatenate 

Если вы хотите использовать IP-адрес вашего серверного компьютера вместо его имени, вынеобходимо указать явные учетные данные при подключении.

Предостережение: добавляя сервер в список TrustedHosts, вы разрешаете отправку информации о ваших учетных данных на сервер без проверки его личности.Добавляйте сервер в этот список только в том случае, если вы знаете, что сетевой путь от вашего клиентского компьютера до серверного компьютера безопасен.

# check if the WinRM service is running:
Get-Service WinRM
Test-WSMan –Auth default
winrm enumerate winrm/config/listener

# check the remoting configuration
Get-PSSessionConfiguration
New-PSSession

# check if the local account token filter policy is enabled 
Get-ItemProperty –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System –Name LocalAccountTokenFilterPolicy*

# check if the network access policy
Get-ItemProperty –Path HKLM:\System\CurrentControlSet\Control\Lsa –Name ForceGuest*
0 голосов
/ 21 ноября 2018

Вы пытаетесь обернуть это в функцию и вызвать ее с помощью Invoke-Command с параметром -Credential:

Function Get-RemoteRegistryKey()
{
    $RegistryBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', "WIN-MONKU")
    $RegKey= $RegistryBase.OpenSubKey("SOFTWARE\lalaland\node")
    $RegistryValue = $RegKey.GetValue("HostAddress")
    Write-Host "HostAddress: $RegistryValue"
}

Invoke-Command { Get-RemoteRegistryKey } -ComputerName 'WIN-MONKU' -Credential $(Get-Credential)

Дайте мне знать, если ошибки аутентификации по-прежнему возникают

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...