Как добавить более одной машины в список доверенных хостов с помощью winrm

Чтобы запускать команды powershell на машине с удаленной машины, мы должны добавить удаленную машину в список доверенных хостов хост-машины.

Я добавляю машину A к доверенным хостам машины B, используя следующую команду:

winrm set winrm/config/client ‘@{TrustedHosts="machineA"}’

Как добавить больше машин, скажем, машину C, машину D в список доверенных хостов машины B?


person cmm user    schedule 04.02.2014    source источник


Ответы (5)


Я предпочитаю работать с PSDrive WSMan:\.

Получить TrustedHosts

Get-Item WSMan:\localhost\Client\TrustedHosts

Установить TrustedHosts

укажите одну, разделенную запятыми, строку имен компьютеров

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 'machineA,machineB'

или (опасно) подстановочный знак

Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'

для добавления в список можно использовать параметр -Concatenate

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 'machineC' -Concatenate
person hdev    schedule 13.07.2015
comment
есть ли способ добавить хосты в список? потому что я не смог найти API для добавления. - person Snow; 06.07.2016
comment
Вы можете добавить с помощью -Value machineB -Concatenate - person SxMT; 25.08.2016
comment
@dhcgm Это решение НЕ работает для серверов, контролируемых доменом, которые полагаются на Kerberos для аутентификации. Не могли бы вы подтвердить? Поэтому, несмотря на добавление явных доверенных хостов, я все еще могу использовать недоверенные хосты для доступа к серверу, если у меня есть права администратора на сервере. Я думаю, что это работает только для компьютеров рабочей группы. Спасибо. - person objectNotFound; 14.08.2020
comment
@objectNotFound В своей среде я использовал Powershell Remoting только на компьютерах рабочей группы, поэтому не могу подтвердить ваш тезис. Но звучит правдоподобно. - person hdev; 14.08.2020

Предложенный ответ Loïc MICHEL вслепую записывает новое значение в запись TrustedHosts.
I думаю, лучше сначала запросить TrustedHosts.
Как Джеффри Хикс, опубликованный в 2010 году, сначала запросите запись TrustedHosts:

PS C:\> $current=(get-item WSMan:\localhost\Client\TrustedHosts).value
PS C:\> $current+=",testdsk23,alpha123"
PS C:\> set-item WSMan:\localhost\Client\TrustedHosts –value $current
person Altered-Ego    schedule 23.07.2016

Чтобы упростить работу с доверенными хостами, я создал модуль psTrustedHosts. Вы можете найти репозиторий здесь на GitHub. Он предоставляет четыре функции, облегчающие работу с доверенными хостами: Add-TrustedHost, Clear-TrustedHost, Get-TrustedHost и Remove-TrustedHost. Вы можете установить модуль из галереи PowerShell с помощью следующей команды:

Install-Module psTrustedHosts -Force

В вашем примере, если вы хотите добавить хосты «machineC» и «machineD», вы просто используете следующую команду:

Add-TrustedHost 'machineC','machineD'

Чтобы было ясно, это добавляет хосты 'machineC' и 'machineD' к любым уже существующим хостам, а не перезаписывает существующие хосты.

Команда Add-TrustedHost также поддерживает конвейерную обработку (как и команда Remove-TrustedHost), поэтому вы также можете сделать следующее:

'machineC','machineD' | Add-TrustedHost
person Jason Boyd    schedule 28.11.2017
comment
@HerbM Доменные имена работают нормально. Диапазоны с подстановочными знаками работают только для одного значения, т. е. вы можете иметь список машин, разделенных запятыми, или строку, содержащую подстановочные знаки, но не список, разделенный запятыми, где одно из значений в списке имеет подстановочный знак. Это похоже на проблему с WinRM. Он позволит добавить значение с маской подсети, но, похоже, не интерпретирует его как сетевой диапазон, когда вы пытаетесь подключиться к машине в этом диапазоне, так что это не работает. - person Jason Boyd; 10.04.2018
comment
И, очевидно, вы должны использовать «подсети» бедняков (на границах октетов), а не нотацию CIDR или MASK: 192.168.230.* NOT: 192.168.224.0/19 # или что-то еще - person HerbM; 12.04.2018

То же, что @Altered-Ego, но с txt.file:

Get-Content "C:\ServerList.txt"
machineA,machineB,machineC,machineD


$ServerList = Get-Content "C:\ServerList.txt"
    $currentTrustHost=(get-item WSMan:\localhost\Client\TrustedHosts).value
    if ( ($currentTrustHost).Length -gt "0" ) {
        $currentTrustHost+= ,$ServerList
        set-item WSMan:\localhost\Client\TrustedHosts –value $currentTrustHost -Force -ErrorAction SilentlyContinue
        }
    else {
        $currentTrustHost+= $ServerList
        set-item WSMan:\localhost\Client\TrustedHosts –value $currentTrustHost -Force -ErrorAction SilentlyContinue
    }

-ErrorAction SilentlyContinue требуется в старой версии PS, чтобы избежать поддельного сообщения об ошибке:

PS C:\Windows\system32> get-item WSMan:\localhost\Client\TrustedHosts


   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Client

Type            Name                           SourceOfValue   Value
----            ----                           -------------   -----
System.String   TrustedHosts                                   machineA,machineB,machineC,machineD
person ilRobby    schedule 04.02.2021

person    schedule
comment
если кто-то получит ответ Error: Invalid use of command line ..., попробуйте удалить одинарные кавычки - person svarog; 16.11.2016
comment
Это просто не работает для меня, одинарные кавычки или нет. Я получаю Error: Invalid use of command несмотря ни на что. - person Hylle; 21.03.2018
comment
@svarog для меня было наоборот. Мне пришлось добавить одинарные кавычки. Раньше у меня была такая же ошибка Error: Invalid use of command. - person Bruno Bieri; 17.09.2018