丢失时如何提示$ args

时间:2016-01-20 13:02:57

标签: powershell args

我的剧本:

Traceback (most recent call last):
  File "N:\Yr 10 CP\Practice\python\Gaming\THE ACTUAL THING.py", line 12, in <module>
    print(numbers[randint(0,8)])
IndexError: list index out of range

如果我用脚本传递参数,即:。

get-ComputerName.ps1 computer01

它工作正常。但是,如果我跳过计算机,我希望它提示我,但我得到了这个错误:

Get-ADComputer : Cannot validate argument on parameter 'Identity'. The argument
is null. Provide a valid value for the argument, and then try running the
command again.
At U:\get-ADComputer-assigned-user.ps1:9 char:20
+ Get-ADComputer -Id $computername -Properties * | select name,description
+                    ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-ADComputer], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

我无法弄清楚如何让它发挥作用。

2 个答案:

答案 0 :(得分:5)

不要使用automatic variable $args,而是为计算机名定义一个特定的必需参数:

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$true, Position=0)]
  [string]$ComputerName
)

Get-ADComputer -Id $ComputerName -Properties * | Select-Object Name, Description

这将允许您像这样运行脚本:

./Get-ComputerName.ps1 -ComputerName computer01

或者像这样:

./Get-ComputerName.ps1 computer01

如果缺少参数,系统会提示您输入该参数:

PS C:\> ./Get-ComputerName.ps1

cmdlet test.ps1 at command pipeline position 1
Supply values for the following parameters:
ComputerName: _

如果您希望脚本抛出错误而不是提示缺少参数,可以这样做:

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$false, Position=0)]
  [string]$ComputerName = $(throw 'Parameter missing!')
)

Get-ADComputer -Id $ComputerName -Properties * | Select-Object Name, Description

Check the documentation,了解有关PowerShell中参数处理的更多信息。

答案 1 :(得分:0)

看起来 $args 会一直存在,所以 ($args -eq $null) 总是假的。要查看 $args 是否为空,您可以执行

if ($args.Length -eq 0)