如何让 winrm 默认使用 powershell 7 进行远程会话

how to get winrm to use powershell 7 for remote sessions by default

随着 powershell 7 的发布,似乎是时候超越 ps 5.1 了,所以我在几台服务器上安装了它来试一试。

然而,当我使用 ps7 从我的电脑创建到这些服务器的会话时,我总是在远程计算机上 运行ning ps5.1。

Invoke-Command -ComputerName name -ScriptBlock { 
        Write-Host $env:COMPUTERNAME
        $PSVersionTable.PsVersion
    }

输出 5.1.17763.316。有什么想法可以让远程会话最好默认使用 7.0.0 版吗?

更新 在这方面取得了一些进展,所以尽管我会分享。

在远程机器上的 powershell 7 运行 下面的命令

Enable-PSRemoting

这将创建一些 PsSessionConfigurations,您可以使用以下命令查看它们..

Get-PSSessionConfiguration

现在您可以执行以下操作从 powershell 7 创建会话

Invoke-Command -ComputerName ServerName -ScriptBlock { $PsVersionTable.PSVersion } -ConfigurationName Powershell.7
$session = New-PSSession ServerName -ConfigurationName Powershell.7
Invoke-Command -Session $session -ScriptBlock { $PsVersionTable.PSVersion } 

这现在在远程会话上使用 ps 7,快乐的日子。现在如何默认情况下发生这种情况......?从这个 github issue :

set the default microsoft.powershell endpoint to any PowerShell they choose

我认为这是我想做的,所以切换回 ps 5.1 并尝试了这个命令:

Get-PSSessionConfiguration -Name microsoft.powershell | Set-PSSessionConfiguration -PSVersion 7.0

只得到如下输出:

Set-PSSessionConfiguration : Cannot bind parameter 'PSVersion' to the target. Exception setting "PSVersion": "The value 7.0 is not valid for the PSVersion parameter. The available values are 2.0, 3.0, 4.0, 5.0, 5.1."

尽管我会在 ps7 中尝试此操作,因此通过 运行ning pwsh 和 运行 再次切换回相同的命令以获取他关注...

Write-Error: No session configuration matches criteria "microsoft.powershell".

所以仍然不太确定如何将 ps7 设置为默认...:(

注:

  • 远程处理客户端决定连接到服务器上的远程处理端点(会话配置)机器 - 见下文。

  • 所以,自己的尝试,

# WRONG
Get-PSSessionConfiguration -Name microsoft.powershell | 
  Set-PSSessionConfiguration -PSVersion 7.0

无效,因为Set-PSSessionConfiguration服务器机器[=75=上修改了端点配置 ], 它不控制 客户端 的行为。

请注意,基本先决条件PowerShell 远程处理必须在服务器上启用机器,这可以通过在安装过程中通过 MSI GUI 安装程序选择这样做,或者通过 运行ning Enable-PSRemoting - with admin privileges - later.Tip of the hat to Lars Fosdal.

来实现
  • 从 PowerShell (Core) 执行此操作会创建名为 PowerShell.<version> 的标准会话配置,客户端可以选择连接到该配置 - 见下文。

  • 要列出服务器上定义的所有配置,运行 Get-PSSessionConfiguration 具有管理员权限。


客户端 机器 上,您可以设置默认值 会话配置在服务器(远程机器)上定义以通过$PSSessionConfigurationName preference variable.

连接到

例如,默认以 PowerShell 7 为目标:

# When remoting, default to running PowerShell Core v7.x on the
# the target machines:
$PSSessionConfigurationName = 'PowerShell.7'

如果将以上内容添加到 $PROFILE 文件中,以后的会话将默认以 PowerShell 7 为目标。

有关更多信息,请参阅,其中还显示了如何在各个命令的上下文中定位给定的服务器配置.


注意:更改 PowerShell [Core] 默认目标 的端点 - 从 7.2 开始仍然是 Window PowerShell - 正在考虑中:参见 GitHub issue #11616.