我只是询问社区是否有一种方法让脚本在执行脚本之前检查正在运行的POSH版本。目前,我的工作是以下代码:
#region Final Checks
#//Check to make sure that version of PowerShell is at least 3.0 before preceding.
If($PSVersionTable.PSVersion.Major -le 2) {
Throw "This script has not been tested with version 2.0 or older of PowerShell. Please execute this script from a system that has PowerShell 3.0 or newer installed. Windows 8/Server 2012 and newer has it installed by default. Windows 7/Server 2008 R2 can be patched to have 3.0 installed."
}
#endregion Final Checks
在定义参数后,我有这个权利。但是,为了我自己的疯狂,我希望脚本在进入脚本的肉和土豆之前自动执行此检查。一个很好的比较是使用Validate [X]作为参数。如果操作员尝试提供的数据不适合我的用户,则在执行脚本之前会抛出错误。有任何想法吗?我知道[CmdletBinding()]中没有任何内容可以做到这一点。谢谢!
答案 0 :(得分:4)
您可以在脚本顶部使用#Requires
,以告诉PowerShell您的脚本需要执行哪些操作。
在你的具体情况下,你会把
#Requires -Version 3
这将告诉PowerShell需要 至少 PowerShell版本3,如果有人尝试使用PowerShell版本2运行脚本,他们将收到以下消息:
脚本' version3.ps1'无法运行,因为它包含"#requires" Windows PowerShell 3.0版的第1行语句。脚本所需的版本与当前运行的Windows PowerShell版本2版本不匹配 0.0。 在行:1 char:2 +& <<<< C:\ Users \用户testuser的\桌面\ version3.ps1 + CategoryInfo:ResourceUnavailable:(version3.ps1:String)[],ScriptRequiresException + FullyQualifiedErrorId:ScriptRequiresUnmatchedPSVersion
除版本外,您还可以要求其他内容,所有这些内容都列在TechNet上的about_Requires中:https://technet.microsoft.com/en-us/library/hh847765.aspx
#Requires -Version 4
#Requires -Module MyCmdlets
Write-Host "If you see this, you are running Version 4 and have the MyCmdlets Module available"