如何让 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.
随着 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.