Управление параметрами winrm с помощью провайдера wsman

Вей Ву (Wei Wu), [MSFT]
Посетите английский блог команды  Windows PowerShell:    https://blogs.msdn.com/PowerShell
Посетите Windows PowerShell ScriptCenter:  https://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx

Удаленная работа PowerShell построена поверх системы Windows Remote Management (WinRM), которая представляет собой реализацию протокола WS-Management компанией Microsoft. Вы можете использовать инструмент командной строки winrm.cmd для запросов и управления параметрами winrm. PowerShell V2 CTP3 содержит провайдера wsman для управления параметрами winrm с помощью стандартных коммандлетов *-Item. Давайте попробуем:

 

 PS C:\> cd wsman:
PS WSMan:\> dir
   WSManConfig: Microsoft.WSMan.Management\WSMan::WSMan
ComputerName                                  Type
------------                                  ----
localhost                                     Container
PS WSMan:\> cd .\localhost
PS WSMan:\localhost> dir | ft –auto
   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost
Name                Value      Type
----                -----      ----
MaxEnvelopeSizekb   150        System.String
MaxTimeoutms        180000     System.String
MaxBatchItems       32000      System.String
MaxProviderRequests 4294967295 System.String
Client                         Container
Service                        Container
Shell                          Container
Listener                       Container
Plugin                         Container
ClientCertificate              Container

На верхнем уровне каталогов диска wsman вы видите контейнер с именем localhost, он содержит все настройки winrm для локального компьютера. Если вы войдете в localhost как в каталог, вы увидите еще шесть контейнеров (я для справки привожу в скобках соответствующие командные строки winrm.cmd): client, который содержит клиентские настройки winrm ( winrm g winrm/config/client), service, который содержит настройки сервера winrm (winrm g winrm/config/service), shell содержит параметры командной оболочки (winrm g winrm/config/winrs), listener содержит экземпляры приемника listener (winrm e winrm/config/listener), plugin содержит экземпляры расширений winrm, включая стандартное расширение microsoft.powershell, а clientcertificate содержит привязки сертификатов (winrm e winrm/config/service/certmapping). Коммандлеты *-PSSessionConfiguration на самом деле были построены поверх провайдера wsman. Давайте попробуем выполнить Remove-Item и New-Item на экземплярах приемника. Не забывайте, что для нахождения динамических параметров New-Item для конкретного пути в поставщике wsman мы можем использовать автозавершение табуляцией.

 PS WSMan:\> cd .\localhost\Listener
PS WSMan:\localhost\Listener> Get-ChildItem
   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Listener
Name                      Type                 Keys
----                      ----                 ----
Listener_98910385         Container            {Address=*, Transport=HTTP}
PS WSMan:\localhost\Listener> Remove-Item .\Listener_98910385 –Recurse
PS WSMan:\localhost\Listener> New-Item . -Port 8080 -Address * -Transport http
   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Listener
Name                      Type                 Keys
----                      ----                 ----
Listener_98910385         Container            {Address=*, Transport=HTTP}

Теперь давайте воспользуемся set-item для изменения настроек winrm на стороне сервера на удаленном компьютере, чтобы обеспечить аутентификацию CredSSP. Вы можете подключиться к удаленной службе winrm, используя коммандлет connect-wsman, если соединение будет успешно, имя компьютера окажется на верхнем уровне каталогов устройства wsman.

 PS WSMan:\> Enable-WSManCredSSP *
cfg         : https://schemas.microsoft.com/wbem/wsman/1/config/client/auth
lang        : en-US
Basic       : true
Digest      : true
Kerberos    : true
Negotiate   : true
Certificate : true
CredSSP     : true
PS WSMan:\> New-PSSession weiwu-lh64.ntdev.corp.microsoft.com -cred $cred -Authentication credssp
[weiwu-lh64.ntdev.corp.microsoft.com] Connecting to remote server failed with the following error message : The WinRM client cannot process the request. The authentication mechanism requested by the client is not supported by the server or unencrypted traffic is disabled in the service configuration. Verify the unencrypted traffic setting in the service configuration or specify one of the authentication mechanisms supported by the server.  To use Kerberos, specify the computer name as the remote destination. Also verify that the client computer and the destination computer are joined to a domain. To use Basic, specify the computer name as the remote destination, specify Basic authentication and provide user name and password. Possible authentication mechanisms reported by server:     Negotiate Kerberos
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionOpenFailed
PS WSMan:\> Connect-WSMan weiwu-lh64
PS WSMan:\> get-item .\weiwu-lh64\Service\Auth\CredSSP
   WSManConfig: Microsoft.WSMan.Management\WSMan::weiwu-lh64\Service\Auth
Name                      Value                                              Type
----                      -----                                              ----
CredSSP                   false                                              System.String
PS WSMan:\> set-item .\weiwu-lh64\Service\Auth\CredSSP true
PS WSMan:\> New-PSSession weiwu-lh64.ntdev.corp.microsoft.com -cred $cred -Authentication credssp Id Name            ComputerName    State    Configuration         Availability
 -- ----            ------------    -----    -------------         ------------
  1 Session1        weiwu-lh64.n... Opened   Microsoft.PowerShell     Available
PS WSMan:\> Disconnect-WSMan weiwu-lh64
PS WSMan:\> Disable-WSManCredSSP

Наслаждайтесь!

 

Вей Ву (Wei Wu), [MSFT]
Посетите английский блог команды  Windows PowerShell:    https://blogs.msdn.com/PowerShell
Посетите Windows PowerShell ScriptCenter:  https://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx

Перевод: Виктор Горбунков