是否有方法了解Powershell中的cmdlet版本以实现向后兼容性?
假设您正在Powershell 4.0环境中编写脚本,并且希望确保脚本在Powershell 3.0中工作。如何确保其向后兼容?以下是获取“get ChildItem”版本的示例:是否有方法了解Powershell中的cmdlet版本以实现向后兼容性?,powershell,powershell-2.0,powershell-3.0,Powershell,Powershell 2.0,Powershell 3.0,假设您正在Powershell 4.0环境中编写脚本,并且希望确保脚本在Powershell 3.0中工作。如何确保其向后兼容?以下是获取“get ChildItem”版本的示例: 好的,这个问题的措辞更具体一点,说明你在寻找什么。听起来像是你要求的 #Requires语句阻止脚本运行,除非Windows PowerShell版本、模块、管理单元以及模块和管理单元版本 满足先决条件。如果不满足先决条件,Windows PowerShell 不运行脚本 这样,在编写脚本时,可以强制执行脚本的功能版
好的,这个问题的措辞更具体一点,说明你在寻找什么。听起来像是你要求的
#Requires
语句阻止脚本运行,除非Windows
PowerShell版本、模块、管理单元以及模块和管理单元版本
满足先决条件。如果不满足先决条件,Windows PowerShell
不运行脚本
这样,在编写脚本时,可以强制执行脚本的功能版本
#Requires -Version 3.0
因此,当您构建和调试脚本时,您知道它将在至少具有3.0版本的系统上工作。如果这很重要的话,它也会识别较小的构建
我最近遇到这个需求是出于我自己的需要,现在我意识到我上面的建议不会让你得到我认为你想要的确切结果。您应该改为在运行脚本时调用新的PowerShell会话,并使用启动指定版本的Windows PowerShell()的
-Version
开关
因此,在测试脚本时,请按如下方式运行:
powershell -Version 2 -File myscript.ps1
使用所需命令的get模块,可以执行以下操作:
(Get-Module (Get-Command Get-NetTCPConnection).Source).PowerShellVersion
请澄清:
提供安装位置(Get命令)。Source
get Command resolve path
并检查返回的know?好的,我重新表述了我的问题,我当前的环境是PS4,我想确保脚本在PS3中工作。在PS3和PS4中get Command
结果中没有Version
属性。你是对的。我忘记了与我的PS3环境的交叉检查。请原谅放置。事后看来,这对于OP想要的可能是有缺陷的,因为-Version指定了脚本所需的Windows PowerShell的最低版本。使用#requires可以确保脚本仅在给定PowerShell的最低版本时运行,但不能确保其兼容。您仍然必须以这种方式编写代码,并在两个版本中对其进行测试,以确保它在两个版本中都能工作。我承认PowerShell 3.0和4.0的兼容性非常好,但是如果你想有一个需要在2.0中运行的脚本,那么你肯定需要编写一些不同的代码(例如,远离2.0之后引入的特性和功能,或者在本例中是3.0)@campbell.rw耶。。。这就是为什么我在我的回答的后半部分添加了一个我认为OP想要的正确答案。是的,好东西,只是为了帮助澄清,以防人们会感到困惑。
(Get-Module (Get-Command Get-NetTCPConnection).Source).PowerShellVersion