Избавьтесь от $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
, вы можете вызывать свой сценарий следующими способами:
- . \ MyScript.ps1 -Имя "Hello" -Ip 127.0.0.1
- . \ MyScript.ps1 "Hello" 127.0.0.1
Без param
блок, у вас есть только опция № 2 для вызова скрипта.