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

Ale*_*les 6 powershell powershell-remoting powershell-6.0

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

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

Invoke-Command -ComputerName name -ScriptBlock { 
        Write-Host $env:COMPUTERNAME
        $PSVersionTable.PsVersion
    }
Run Code Online (Sandbox Code Playgroud)

输出 5.1.17763.316。任何想法如何让远程会话在默认情况下最好使用 7.0.0 版?

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

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

Enable-PSRemoting
Run Code Online (Sandbox Code Playgroud)

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

Get-PSSessionConfiguration
Run Code Online (Sandbox Code Playgroud)

现在您可以执行以下操作以从 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 } 
Run Code Online (Sandbox Code Playgroud)

这现在在远程会话中使用 ps 7,快乐的日子。现在如何在默认情况下实现这一点......?从这个github 问题

将默认的 microsoft.powershell 端点设置为他们选择的任何 PowerShell

我认为这就是我想要做的,因此切换回 ps 5.1 并尝试了以下命令:

Get-PSSessionConfiguration -Name microsoft.powershell | Set-PSSessionConfiguration -PSVersion 7.0
Run Code Online (Sandbox Code Playgroud)

只得到以下输出:

Set-PSSessionConfiguration:无法将参数“PSVersion”绑定到目标。异常设置“PSVersion”:“值 7.0 对于 PSVersion 参数无效。可用值为 2.0、3.0、4.0、5.0、5.1。”

虽然我会在 ps7 中尝试这个,所以通过运行pwsh切换回来并再次运行相同的命令让他跟随......

写入错误:没有会话配置符合条件“microsoft.powershell”。

所以仍然不太确定如何使 ps7 成为默认值... :(

mkl*_*nt0 11

笔记:

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

  • 因此,你自己的尝试,

# 错误的
Get-PSSessionConfiguration -Name microsoft.powershell | 
  设置-PSSessionConfiguration-PSVersion 7.0

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

请注意,基本先决条件必须在服务器计算机上启用PowerShell 远程处理,这可以通过在安装期间通过 MSI GUI 安装程序选择这样做来实现,也可以通过Enable-PSRemoting稍后运行- 以管理员权限 - 来实现。Lars Fosdal 致敬

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

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


客户,您可以设置默认什么会话配置中定义的服务器上(远程机器)连接到,通过$PSSessionConfigurationName选项变量

例如,默认针对 PowerShell 7:

# When remoting, default to running PowerShell Core v7.x on the
# the target machines:
$PSSessionConfigurationName = 'PowerShell.7'
Run Code Online (Sandbox Code Playgroud)

如果您将上述内容添加到您的$PROFILE文件中,默认情况下,未来的会话将针对 PowerShell 7。

这个答案详细信息,这也说明了如何针对个别命令的情况下给定的服务器配置


注意:正在考虑更改默认情况下PowerShell [Core] 目标端点- 从 7.2 开始仍然是Window PowerShell - 正在考虑中:请参阅GitHub 问题 #11616