我的剧本:
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
我无法弄清楚如何让它发挥作用。
答案 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)