远程运行Powershell会话作为版本2。

8

我在运行PowerShell版本2的服务器上:

PS C:\> $PSVersionTable

Name      Value
----      -----
...
PSVersion 2.0

然后我创建一个新的远程会话到另一台计算机并连接它:

$sess = New-PSSession -ComputerName {ComputerName} -Credential $credential

它给我返回了结果:
PS C:\> Invoke-Command -Session $sess -ScriptBlock { $PSVersionTable }

Name      Value
----      -----
...
PSVersion 3.0

不过,我的脚本需要Powershell版本为2,因此我进入了一个会话(这样做更方便)。然后,我尝试将Powershell版本切换为2:

C:\> Enter-PSSession -Session $sess
[{ComputerName}]: PS C:\> Powershell -Version 2
Windows Powershell
Copyright (C) 2009 Microsoft Corporation. All rights reserverd

然后它就挂了(或至少在我按Ctrl-C之前不会让我在控制台中输入任何其他内容)。

我还尝试通过Invoke-Command进行操作:

PS C:\> Invoke-Command -Session $sess -ScriptBlock { Powershell -version 2 }

它做了同样的事情。

我还尝试按照此处的说明注册PSSessionConfiguration:https://technet.microsoft.com/en-us/library/hh847899.aspx

PS C:\> Register-PSSessionConfiguration -Name PS2 -PSVersion 2.0

但我得到的是:
Register-PSSessionConfiguration: a parameter cannot be found that matches parameter name 'PSVersion'.

有没有人有任何想法,我可以尝试一下?!谢谢


5
2中有什么3中没有的?为什么2更容易?我很好奇。 - Ritch Melton
2
你是在哪台机器上运行了 Register-PSSessionConfiguration 命令?是在你的电脑上还是在“服务器”上?服务器的操作系统是什么?我刚刚尝试了 Technet 文章中的步骤,它完美地工作了。我的 2008 服务器远程连接到我的运行 2.0 PSSessionConfiguration 的 Windows 7 机器。你是否尝试过针对不同的服务器或主机进行此操作? - Matt
@Matt - 我尝试在“其他”计算机上运行Register-PSSessionConfiguration,它完美地工作了,非常感谢! :) - Pete
1
@Pete:对不起,我也很难过,有些事情是无法忘记的。 - Ritch Melton
1
@Matt - 你回答了他的问题。如果你把它作为一个答案提交,他就可以标记它,我们就不会看到这个问题未被回答的情况。 - Jeter-work
显示剩余2条评论
2个回答

4
你在哪台机器上运行了Register-PSSessionConfiguration命令?是你的电脑还是“服务器”?
你需要在目标服务器上进行配置。这是你将要运行托管的PSSessionConfiguration的地方。
我刚刚尝试了technet article中的步骤,完美地运行了。我的2008服务器远程连接到我的运行2.0 PSSessionConfiguration的Windows 7机器。
在目标服务器/主机上:
Register-PSSessionConfiguration -Name PS2 -PSVersion 2.0

然后,在客户端机器上,引用“PS2”配置。
$s = New-PSSession -ComputerName Server01 -ConfigurationName PS2

0

我猜以下的方法也不起作用:

 #Requires -version 2.0

另一种你可以尝试的方法是在目标计算机上创建一个定时任务,让任务使用 Powershell.exe -version 2 执行你的脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接