2016-03-22 17 views
1

私は、スクリプトの実行前にどのバージョンのPOSHが実行されているかをスクリプトが確認する方法を見つけた場合、現在、私の回避策は次のコードです:スクリプトの実行前のPowerShellのバージョンチェック

#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()]には何もないことを知っています。ありがとう!

答えて

4

スクリプトの上部に#Requiresを使用すると、スクリプトが何をする必要があるかをPowerShellに伝えることができます。あなたはこれが誰かがPowerShellのバージョン2でスクリプトを実行しようとすると、彼らが受け取ることになります、その少なくとも PowerShellのバージョン3が必要とされているPowerShellを教えてくれます

#Requires -Version 3 

をかけることになり、あなたの特定のケースで

スクリプト 'version3.ps1'は、Windows PowerShellバージョン3.0の1行目に「#requires」ステートメントが含まれているため、実行できません。スクリプトで必要なバージョンが、現在実行中のバージョンのWindows PowerShellバージョン2 .0と一致しません。ラインで :1文字:2 + & < < < < C:\ユーザー\ 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" 
+0

HOLY BATMAN!私は彼らがPOSHにすべてのバージョンですばらしいものを追加し続けていると言わなければなりません。これはすばらしい答えのために働き、ありがとう。私は実際にマニフェストをあまり使っていないので、#Requiresについて全く考えていませんでした。今私は自分のツールボックスに追加することがあります。あなたの答えが例、参考文献、そして素晴らしい説明を持っていたので、私は約3回以上投票できることを真剣に願っています。ハッピースクリプティング! –

+0

うれしい私は助けることができます:) – Bluecakes

関連する問題