Я пытаюсь написать то, что кажется очень простым, но я занимаюсь этим часами и все еще не могу получить то, что мне нужно.
У меня есть скрипт PowerShell, который будет использоваться для запуска или выключения виртуальных машин. Я хочу, чтобы пользователь указал либо имя группы ресурсов, либо отдельное имя виртуальной машины, либо текстовый файл с именами виртуальных машин.
Этот скрипт используется для Azure, но вопрос относится только к объявлению param ().
Я перепробовал каждую комбинацию, которую могу придумать, делая части параметров наборов параметров, делая их обязательными, не обязательными и т. Д., Но я не смог сделать это правильно.
Любая помощь приветствуется!
param (
[Parameter (Mandatory = $true, ParameterSetName = 'ByResourceGroup')]
[string]$ResourceGroup,
[Parameter (Mandatory = $true, ParameterSetName = 'ByFile')]
[string]$File,
[Parameter (Mandatory = $true, ParameterSetName = 'ByName')]
[string]$Name,
[Parameter (Mandatory = $false, ParameterSetName = 'ByResourceGroup')]
[Parameter (Mandatory = $false, ParameterSetName = 'ByFile')]
[Parameter (Mandatory = $false, ParameterSetName = 'ByName')]
[switch]$Start,
[Parameter (Mandatory = $false, ParameterSetName = 'ByResourceGroup')]
[Parameter (Mandatory = $false, ParameterSetName = 'ByFile')]
[Parameter (Mandatory = $false, ParameterSetName = 'ByName')]
[switch]$Stop
)
Пользователь должен иметь возможность передавать в ЛИБО:
-ResourceGroup
ИЛИ ЖЕ
-Файл
ИЛИ ЖЕ
-Имя
И
передать либо:
-Начните
ИЛИ ЖЕ
-Stop
Не оба!
Я думаю, что у меня это правильно для первого сета, но я не могу получить -Start и -Stop как эксклюзивные.
Get-help говорит это:
SYNTAX
C:\Set-AzureVM.ps1 -ResourceGroup <String> [-Start] [-Stop] [<CommonParameters>]
C:\Set-AzureVM.ps1 -File <String> [-Start] [-Stop] [<CommonParameters>]
C:\Set-AzureVM.ps1 -Name <String> [-Start] [-Stop] [<CommonParameters>]
I am looking for something more like this:
SYNTAX
C:\Set-AzureVM.ps1 -ResourceGroup <String> -Start [<CommonParameters>]
C:\Set-AzureVM.ps1 -File <String> -Start [<CommonParameters>]
C:\Set-AzureVM.ps1 -Name <String> -Start [<CommonParameters>]
C:\Set-AzureVM.ps1 -ResourceGroup <String> -Stop [<CommonParameters>]
C:\Set-AzureVM.ps1 -File <String> -Stop [<CommonParameters>]
C:\Set-AzureVM.ps1 -Name <String> -Stop [<CommonParameters>]
Просто чтобы закрыть это ... Я немного изменил это (потребности изменились, и код изменился). Как и предполагали другие, я согласен с тем, что то, что я пытался сделать, вероятно, в любом случае было невозможно. Кроме того, я обрабатываю возможность того, что пользователь выберет и -Start и -Stop или ни один из них в коде. Спасибо всем за ваши комментарии!
SYNTAX
C:\Set-AzureVM.ps1 -Name <String> -ResourceGroup <String> [-Start] [-Stop] [<CommonParameters>]
C:\Set-AzureVM.ps1 -File <String> [-Start] [-Stop] [<CommonParameters>]