#Requires –Version 2.0

Наверное у многих возникало желание делать в начале своего скрипта проверку например версии PowerShell. Ведь если вы используете новые возможности 2.0, а файл будет запущен под 1.0, то часть команд сработает, а другая нет, что в результате может привести как минимум к ошибкам, а как максимум – к большим проблемам.

Вообще написать проверку версии несложно. У PowerShell 2.0 есть специальная переменная, $PSVersionTable в которой содержится вся необходимая информация о версии:

[PS <1> C:\root] $psversiontable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.4918
BuildVersion                   6.1.7100.0
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.0

Ну а версию 1.0 легко опознать по отсутствию этой переменной🙂 В результате получаем такую функцию:

function Get-Version {if ($PSVersionTable){$PSversionTable.PSVersion.ToString()} else {"1.0"}}

Но на самом деле всё это – лишние движения. Всё можно сделать гораздо проще.

Если ваш скрипт требует версии 2.0, вам достаточно в его начале поместить следующую строку:

#Requires -Version 2.0

PowerShell поймёт эту директиву, и при попытке запуска сценария в оболочке с версией ниже указанной, выдаст ошибку:

PS C:\Temp> . C:\Temp\test.ps1
The script 'test.ps1' cannot be run because it contained a "#requires" statement at 
line 1 for Windows PowerShell version 2.0 which is incompatible with the installed 
Windows PowerShell version of 1.0.
At line:1 char:2
+ .  <<<< C:\Temp\test.ps1

Вполне понятно, и не сложно.

Ниже, полный список критериев которые позволяет указать деректива Requires:

#requires -shellid 
#requires -version 
#requires -pssnapin  [-version ]

Например чтобы разрешить запуск сценария лишь в оболочке с подгруженной оснасткой AD Cmdlets, достаточно сделать так:

#Requires -PSSnapin Quest.ActiveRoles.ADManagement

Можно даже указать конкретную версию оснастки добавив ключ –Version. Причем если вы это сделаете, скрипт будет выполнятся именно с этой версией. Даже если установлена более поздняя – будет выдана ошибка.

Опубликовано в 2.0, PowerShell. Метки: , , . 2 комментария »

комментария 2 to “#Requires –Version 2.0”

  1. dmach Says:

    А файлы .ps2 будут? =)

  2. Xaegr Says:

    Файлы .ps2 будут тогда когда PowerShell изменится настолько что станет обратно несовместимым. Пока же — 2.0 прекрасно может выполнять скрипты 1.0, так что новое расширение вводить нет смысла.


Обсуждение закрыто.

%d такие блоггеры, как: