是否有方法了解Powershell中的cmdlet版本以实现向后兼容性?

是否有方法了解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 不运行脚本 这样,在编写脚本时,可以强制执行脚本的功能版

假设您正在Powershell 4.0环境中编写脚本,并且希望确保脚本在Powershell 3.0中工作。如何确保其向后兼容?

以下是获取“get ChildItem”版本的示例:


好的,这个问题的措辞更具体一点,说明你在寻找什么。听起来像是你要求的

#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