Как проверить количество аргументов в powershell? - PullRequest
0 голосов
/ 09 января 2020
param (
[string]$Name =  $args[0],#First argument will be the adapter name
[IPAddress]$IP = $args[1],#Second argument will be the IP address
[string]$InterfaceId = $args[3],#Second argument will be the IP address
[string]$VlanId = $args[4], #Fourth argument will be vlanid
[string]$SubnetIP = $args[5],#subnet mask
[string]$IPType = "IPv4",
[string]$Type = "Static"
)
    Write-Host $Args.Count

Я хочу проверить, передаются ли аргументы командной строки в скрипт powershell или нет, и если он не указан, то я хочу показать использование записью. Я запускаю скрипт в режиме администратора. Я нашел один метод после поиска, что с помощью $ Args.Count мы можем получить количество аргументов при запуске скрипта, но для меня это всегда ноль. Что я делаю неправильно? введите описание изображения здесь

1 Ответ

0 голосов
/ 09 января 2020

Избавьтесь от $args[x] назначений и добавьте [cmdletbinding()] сверху.

[CmdLetbinding()]
param (
[string]$Name, #First argument will be the adapter name
[IPAddress]$IP, # etc...
[string]$InterfaceId,
[string]$VlanId,
[string]$SubnetIP,
[string]$IPType = "IPv4",
[string]$Type = "Static"
)

Затем вы можете использовать $PSBoundParameters.Count, чтобы получить количество аргументов.

$args - это специальная переменная, которая используется, когда именованный параметр отсутствует. Поэтому, поскольку вы назвали параметр, он всегда будет иметь нулевое значение (за исключением, может быть, если вы добавите больше аргументов, чем именованных параметров)

Если вы используете блок param, то вы не Нужно назначить $args[0] и другие. На самом деле, это абсолютно бесполезно, поскольку они будут $null.

Другой подход, хотя я рекомендую вам оставить блок param, заключается в том, чтобы вообще не использовать никаких именованных параметров. В этом случае $args будет работать так, как вы ожидаете.

[string]$Name =  $args[0]
[IPAddress]$IP = $args[1]
[string]$InterfaceId = $args[3]
[string]$VlanId = $args[4] 
[string]$SubnetIP = $args[5]
[string]$IPType = "IPv4"
[string]$Type = "Static"

Основное отличие состоит в том, что если у вас есть блок param, вы можете вызывать свой сценарий следующими способами:

  1. . \ MyScript.ps1 -Имя "Hello" -Ip 127.0.0.1
  2. . \ MyScript.ps1 "Hello" 127.0.0.1

Без param блок, у вас есть только опция № 2 для вызова скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...