PowerShell remoting: управление тем, на какую версию нацелено издание (PowerShell Core или Windows PowerShell);состояние кроссплатформенного удаленного взаимодействия - PullRequest
1 голос
/ 04 октября 2019

Этот вопрос с ответом на вопрос, касающийся Windows [1] , затрагивает следующие аспекты:

Теперь, когда есть два PowerShell-выпуски - устаревшие только для Windows Windows PowerShell и кроссплатформенный PowerShell Core , оба могут быть установлены надля данного компьютера с ОС Windows:

  • Как определить, какое издание PowerShell будет выполнять удаленные команды , например, через Invoke-Command -ComputerName?

  • Как можно настроить таргетинг на конкретное издание , как ad hoc , так и постоянно , через конфигурацию?

Примечание:

Чтобы издание могло быть нацелено на удаленное взаимодействие на данном компьютере, его необходимо настроить на для удаленного взаимодействия :

  • Только Windows PowerShell автоматически настроен для удаленного взаимодействия, но только на серверах под управлением Windows Server 2012 или выше.

  • Начиная с v7, PowerShell Core еще не поставляется с Windows;Если вы используете официальный установщик, вы можете включить удаленное взаимодействие во время установки.

В любом случае вы можете использовать Enable-PSRemoting для (повторного) включения удаленного взаимодействия PowerShell по требованию , что:

  • должен быть запущен из соответствующего издания .

  • должен быть запущен с правами администратора


[1] То есть вопрос сосредоточен на удаленном взаимодействии WinRM (WinRM - это специфичная для Windows реализация DTMF WSMan (WS-Управление) стандарт ).

Что касается кроссплатформенного удаленного взаимодействия с PowerShell Core :

  • Вы можетеуже используется удаленное взаимодействие на основе SSH на всех платформах:

    • Использование удаленного взаимодействия на основе SSH в основном включает те же командлеты, что и удаленное взаимодействие на основе WinRMхотя используемые параметры отличаются;в частности, вы указываете целевой компьютер (-ы) с помощью параметра -HostName, а не параметра -ComputerName.

    • Ограничения (по состоянию на v7) :«Удаленное взаимодействие на основе SSH в настоящее время не поддерживает настройку удаленной конечной точки и Just Enough Administration (JEA)».

  • Для Unix-to-Windows remoting ( Unix , относящийся к Unix-подобным платформам, таким как macOS и Linux) - то есть удаленное взаимодействие на машине Windows с Unix-подобной машины - вы можете альтернативно использовать WinRMудаленное взаимодействие с дополнительной конфигурацией:

    • На компьютере Windows:

      • SSL-соединения должны быть включены путем настройки WinRM для HTTPS.
      • Учетные записи пользователей, которые будут использоваться с Unix-подобных компьютеров, должны быть определены как локальные учетные записи пользователей в группе local Administrators - учетные записи домена не будут работать.
    • Unix-подобные машины должны использовать удаленное взаимодействиекомандлеты с параметрами -Authentication Basic -UseSsl.

    • См. about_Remote_Requirements

  • AРеализация на основе Unix WSMan работает в репозитории psl-omi-provider , который уже позволяет Linux машинам выступать в качестве целей удаленного взаимодействия (то есть сервер компонент уже пригоден для использования - мне не ясно, можно ли его также установить на macOS );клиентский компонент, однако, еще не готов к работе на момент написания этой статьи.
    Как только клиентский компонент клиента станет доступен, станет возможным равномерное межплатформенное удаленное взаимодействие на основе WSMan, как на Unix-подобных машинах (Linux, macOS)) и между Unix-подобными машинами и машинами Windows.

1 Ответ

2 голосов
/ 04 октября 2019

Локально указанная конфигурация сеанса удаленного взаимодействия определяет, какая версия PowerShell и, возможно, версия будут использоваться на удаленной машине :

  • Ad hoc , вы можете использовать -ConfigurationName параметр командлетов удаленного взаимодействия, таких как Invoke-Command, New-PSSession и Enter-PSSession дляявно указать конфигурацию сеанса.

  • Постоянно , через конфигурацию вы можете установить стандартную конфигурацию сеанса через$PSSessionConfigurationName переменная предпочтения (в связанном разделе справки также описаны другие переменные предпочтения, относящиеся к удаленному сеансу, а именно $PSSessionApplicationName и $PSSessionOption)

На целевом компьютере операции удаленного взаимодействия * Командлет , Get-PSSessionConfiguration перечисляет все зарегистрированные конфигурации сеансов, к которым клиенты могут подключаться, и которыеВы можете управлять с помощью Register-PSSessionConfiguration и Unregister-PSSessionConfiguration:

  • Предостережение :Get-PSSessionConfiguration должен выполняться в сеансе с повышенными правами (от имени администратора), и из-за ошибки в Windows PowerShell 5.1 может потребоваться сначала выполнить следующую фиктивную команду: $null = Get-Command Test-WSMan, чтобы обеспечить определение диска wsman:).

  • Конфигурации сеансов, имена которых начинаются с префикса 'microsoft.powershell ', принадлежат Windows PowerShell .

  • Префикс 'PowerShell.' относится к PowerShell Core .

$PSSessionConfigurationName по умолчанию 'http://schemas.microsoft.com/powershell/Microsoft.PowerShell' в в обоих выпусках, что означает, что Windows PowerShell по умолчанию предназначен для удаленногомашины , даже если вы работаете с PowerShell Core :

  • Часть Microsoft.PowerShell относится к (64-разрядной) конфигурации сеанса Windows PowerShell,как указано Get-PSSessionConfiguration (в нижнем регистре).

  • Префикс http://schemas.microsoft.com/powershell/ является необязательным и может быть опущен;обратите внимание, что использование https: в префиксе не работает и не автоматически переключается на транспорт на основе SSL;для последнего требуется явная конфигурация . Обратите внимание, что удаленное взаимодействие на основе HTTPS / SSL не требуется, если все ваше удаленное взаимодействие происходит в домене Windows.

Для настройки PowerShell Core наудаленный компьютер :

  • Обычно конфигурации сеансов PowerShell Core зависят от версии , и у вас есть два варианта:

    • Назначение Major Версия PowerShell Core - например, PowerShell.7 - с использованием любой последней версии v7.x, установленной на целевой машине.

      • Это предпочтительнее , поскольку ваш код не требует обновления каждый раз, когда вы устанавливаете исправление или обновление вспомогательной версии на целевом компьютере.
    • Целевая версия - например, PowerShell.7.1.2

      • Делайте это только в том случае, если у вас есть несколько параллельных установок, которые совместно используют один и тот жеосновная версия, и вам явно необходимо указать один из них.
    • Опять же, работает Get-PSSessionConfiguration на целевом компьютере из сеанса с повышенными правами сообщает имена всех зарегистрированных конфигураций сеансов.

  • Комуцелевое ядро ​​PowerShell ad hoc , используйте -ConfigurationName PowerShell.7, например:

# Connect to computer $comp and make it execute $PSVersionTable 
# in PowerShell Core v7.x, which tells you what PowerShell edition 
# and version is running.
Invoke-Command -ComputerName $comp -ConfigurationName PowerShell.7 { $PSVersionTable }
  • Для целевого ядра PowerShell по умолчанию, постоянно , добавьте что-то вроде следующего в ваш $PROFILE файл:
# When remoting, default to running PowerShell Core v7.x on the
# the target machines:
$PSSessionConfigurationName = 'PowerShell.7'
...