2016-01-20 8 views
1

Мой сценарий:

$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

Я не могу понять, как заставить его работать.

+4

прочитайте [расширенную функцию помощи] (https://technet.microsoft.com/en-us/library/hh847806.aspx) и используйте обязательный параметр –

ответ

3

Не используйте 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 

Если параметр отсутствует, вы будете про mpted для него:

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 

Checkthedocumentation для получения дополнительной информации об обработке параметров в PowerShell.