Powershell - 如何测试命令的结果?

时间:2017-01-04 10:19:56

标签: powershell

很抱歉这个愚蠢的问题,但我不知道如何简单地测试我的命令结果(它返回一个对象)!

这是我的命令:

$command = Get-ADUser -Server "MyServer" -Filter 'Name -eq "test"' -SearchBase "DC=MyDomain,DC=COM" -Properties badpwdcount,lockedout | Select-Object LockedOut

我只想测试结果:

if($command -eq $true){
   write-host "OK"
}

当我尝试此命令查看结果时:

write-host $command

我得到“ @ {LockedOut = True} ”。所以,我试图改变我的状况,如:

if($command -eq "@{LockedOut=True}"){
   write-host "OK"
}

但它不起作用......

1 个答案:

答案 0 :(得分:1)

Write-Host $command输出@{LockedOut=True}时,这是因为Select-Object LockedOut会生成一个LockedOut属性的新对象。

更改Select-Object语句以使用-ExpandProperty参数:

$command = Get-ADUser -Server "MyServer" -Filter 'Name -eq "test"' -SearchBase "DC=MyDomain,DC=COM" -Properties badpwdcount,lockedout | Select-Object -ExpandProperty LockedOut
if($command){
    # "test" user is locked out
}

或检查LockedOut属性:

if($command.LockedOut){
    # "test" user is locked out
}

如您所见,-eq $true语句中的if比较是多余的

请注意,如果您的目录中有多个名为test的用户,则可能会收到意外结果。如果您按用户名查找用户,则应过滤SAMAccountName属性(保证每个域唯一):

$command = Get-ADUser -Server "MyServer" -Filter 'SAMAccountName -eq "test"' -SearchBase "DC=MyDomain,DC=COM" -Properties badpwdcount,lockedout | Select-Object -ExpandProperty LockedOut
if($command){
    # "test" user is locked out
}