2017-01-04 32 views
0

对不起,这个愚蠢的问题,但我不知道如何简单地测试我的命令的结果(它返回一个对象)!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" 
} 

但它不工作...

+0

'$ command.LockedOut当量$ TRUE'(或只是'$命令.LockedOut') –

+0

谢谢,这是工作! – Paktros

+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 
} 

正如你所看到的,if语句内-eq $true比较是多余的


请注意,如果您的目录中有多个用户名为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 
} 
+0

谢谢你的回答,这是非常有建设性的回应!我会尽我所能接受你的答案,再见! – Paktros