缺少时如何提示输入$ args

Pau*_*aul 1 powershell args

我的剧本:

$computername=$args[0]
if ($args -eq $null) { $computername = Read-Host "enter computer name" }
Get-ADComputer -Id $computername -Properties * | select name,description
Run Code Online (Sandbox Code Playgroud)

如果我通过脚本传递参数,即:

get-ComputerName.ps1 computer01

它工作正常。但是,如果我跳过计算机,则希望它提示我,但出现此错误:

Get-ADComputer:无法验证参数“ Identity”上的参数。争论
一片空白。为参数提供有效值,然后尝试运行
再次命令。
在U:\ get-ADComputer-assigned-user.ps1:9 char:20
+ Get-ADComputer -Id $计算机名-属性* | 选择名称,描述
+ ~~~~~~~~~~~~~~
    + CategoryInfo:InvalidData:(:) [Get-ADComputer],ParameterBindingValidationException
    + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

我不知道如何使它工作。

Ans*_*ers 5

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

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

Get-ADComputer -Id $ComputerName -Properties * | Select-Object Name, Description
Run Code Online (Sandbox Code Playgroud)

这样您就可以像这样运行脚本:

./Get-ComputerName.ps1 -ComputerName computer01
Run Code Online (Sandbox Code Playgroud)

或像这样:

./Get-ComputerName.ps1 computer01
Run Code Online (Sandbox Code Playgroud)

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

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

Get-ADComputer -Id $ComputerName -Properties * | Select-Object Name, Description
Run Code Online (Sandbox Code Playgroud)

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

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

Get-ADComputer -Id $ComputerName -Properties * | Select-Object Name, Description
Run Code Online (Sandbox Code Playgroud)

检查 文件大约在PowerShell中的参数处理的进一步信息。