Удаленное выполнение команды Powershell с версией PowerShell-Core
Я пытаюсь выполнить команду Powershell удаленно, моя проблема в том, что используется Powershell версии 4.0, и я хочу выполнить мою команду удаленно, используя Powershell Core 6.0.4.
Я пытался использовать эту команду на удаленном хосте
Set-PSSessionConfiguration -name microsoft.powershell -psversion 6.0 -FORCE
И получаю эту ошибку:
Set-PSSessionConfiguration : Cannot bind parameter 'PSVersion' to the target. Exception setting "PSVersion": "The
value 6.0 is not valid for the PSVersion parameter. The available values are 2.0,3.0 and 4.0."
Я установил версию 6.0.4 на моей удаленной машине.
Я знаю, что он использует версию 4 для выполнения моей удаленной команды, потому что
Invoke-Command -Session $session -ScriptBlock {$PSVersionTable.PSVersion};
возвращает:
Major Minor Build Revision PSComputerName
----- ----- ----- -------- --------------
4 0 -1 -1 IIS-DEV2
Есть идеи, как заставить его использовать версию 6?
1 ответ
Как показано в вашем ответе, устаревшие версии PowerShell Core действительно требуют запуска
Install-PowerShellRemoting.ps1
чтобы позволить данному компьютеру действовать как конечная точка удаленного взаимодействия (т. е. позволить другим компьютерам нацеливаться на него с помощью командлетов удаленного взаимодействия, таких какNew-PSSession
илиInvoke-Command
), указанный сценарий был временной мерой, которая больше не нужна в текущих версиях PowerShell Core.- Из WS-Management (WSMan) Remoting в PowerShell Core, на момент написания:
Сценарий установки является краткосрочным решением, пока мы не добавим дополнительные функции в Enable-PSRemoting для выполнения того же действия.
- Текущие версии PowerShell Core и все будущие версии должны использовать
Enable-PSRemoting
командлет, как в Windows PowerShell.
Примечание. На момент написания этой статьи в удаленном взаимодействии WS-Management (WSMan) в PowerShell Core еще не упоминалось, что текущей версии 6.x больше не требуется временный скрипт - см. Эту проблему GitHub. Также обратите внимание, чтоEnable-PSRemoting
это не доступно на Unix-подобных платформах, как в v7.0 (и ни один не является устаревшимInstall-PowerShellRemoting.ps1
сценарий).
В качестве альтернативы, ориентированной на конкретную версию PowerShell Core:
Пока -ConfigurationName Powershell.6.0.4
работает, если вы хотите настроить таргетинг на очень конкретную версию,Enable-PSRemoting
также создает PowerShell.<OwnMajorVersionOnly>
конфигурация, при которой не требуется указывать полный номер версии (который может измениться при обновлении PowerShell Core на компьютере конечной точки).
Поэтому вместо этого рассмотрите возможность использования следующего, используя пример запуска Enable-PSRemoting
из версии PowerShell 7.x на конечной точке удаленного взаимодействия:
-ConfigurationName PowerShell.7
Для получения дополнительной информации см. Этот пост.
В папке установки ядра powershell находится файл скрипта Install-PowerShellRemoting
,
Запустите скрипт на удаленном сервере, к которому вы хотите подключиться, и затем при удаленном взаимодействии используйте следующее:
$session = New-PSSession -ComputerName IIS-DEV2 -port 5985 -Credential $mycreds -ConfigurationName "powershell.6.0.4"
Это сработало, и я получил сессию с ядром Powershell.