2016-03-22 4 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, что ваш скрипт должен делать.

В вашем конкретном случае, вы должны поместить

#Requires -Version 3 

Это сообщит PowerShell, что по крайней мере PowerShell версии 3 необходим, если кто-то пытается запустить сценарий с помощью PowerShell версии 2 они будут получать нижеследующее сообщение:

Невозможно запустить сценарий 'version3.ps1', потому что в строке 1 для Windows PowerShell версии 3.0 содержится оператор #requires. Версия, требуемая скриптом, не соответствует текущей версии Windows PowerShell версии 2 .0. В строке: 1 знак: 2 + & < < < < C: \ Users \ TestUser \ Desktop \ version3.ps1 + CategoryInfo: ResourceUnavailable: (version3.ps1: String) [], ScriptRequiresException + FullyQualifiedErrorId: ScriptRequiresUnmatchedPSVersion

в дополнение к версии вы можете требовать от других вещей, а также, все из которых перечислены в about_Requires на TechNet: 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

СВЯТОЙ BATMAN! Я должен сказать, что они продолжают добавлять потрясающие вещи в POSH с каждой версией. Это работает и благодарит за потрясающий ответ. Я не имел абсолютно никакого представления о #Requires, потому что я действительно не слишком разбираюсь в манифесте. Теперь у меня есть это, чтобы добавить в свою панель инструментов. Я очень жалею, что мог бы проголосовать еще три раза, так как у вашего ответа были примеры, ссылки и отличное объяснение. Счастливые сценарии! –

+0

Рад, что я мог бы помочь :) – Bluecakes

 Смежные вопросы

  • Нет связанных вопросов^_^