丢失时如何提示输入$args
How to prompt for $args when missing
我的脚本:
$computername=$args[0]
if ($args -eq $null) { $computername = Read-Host "enter computer name" }
Get-ADComputer -Id $computername -Properties * | select name,description
如果我用脚本传递参数,即:
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
我不知道如何让它工作。
不要使用 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:\> <b>./Get-ComputerName.ps1</b>
cmdlet test.ps1 在命令管道位置 1
为以下参数提供值:
计算机名:_
如果您希望脚本抛出错误而不是提示缺少参数,您可以这样做:
[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 中参数处理的更多信息。
$args 似乎永远存在,所以 ($args -eq $null) 永远是假的。要查看 $args 是否为空,您可以执行
if ($args.Length -eq 0)
我的脚本:
$computername=$args[0]
if ($args -eq $null) { $computername = Read-Host "enter computer name" }
Get-ADComputer -Id $computername -Properties * | select name,description
如果我用脚本传递参数,即:
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
我不知道如何让它工作。
不要使用 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:\> <b>./Get-ComputerName.ps1</b>
cmdlet test.ps1 在命令管道位置 1
为以下参数提供值:
计算机名:_
如果您希望脚本抛出错误而不是提示缺少参数,您可以这样做:
[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 中参数处理的更多信息。
$args 似乎永远存在,所以 ($args -eq $null) 永远是假的。要查看 $args 是否为空,您可以执行
if ($args.Length -eq 0)