循环运行Powershell Get-ADComputer的问题

时间:2017-04-05 16:00:44

标签: loops powershell

这让我发疯了。我是Powershell的初学者,但我看不出这里有什么问题。

我基本上运行一个脚本,该脚本关闭并检查AD中的描述字段,查找用户输入的匹配项并回读PC名称和相关描述。如下:

import-module activedirectory

$User = Read-Host -Prompt "Enter User's First OR Surname OR partial String"
$User = '*' + $User + '*'
Get-ADComputer -Filter 'Description -like $User' -Properties Description | Select Name, Description
write-Host "================================================================="
}

这对它自己的工作正常。但是我想循环它直到它关闭,所以用户可以立即进行另一次搜索。当我将它放入循环时,第一次运行搜索时,不会返回任何结果。第二次使用第二批返回第一批结果。从那时起,它正常工作。

所以输出看起来像:

Enter User's First OR Surname OR partial String: Test

=================================================================
Enter User's First OR Surname OR partial String: Test
Name      Description                
----      -----------                
COMPXXX01 Test, PS 
COMPXXX01 Test, PS   

=================================================================

所以基本上第一批结果在第二次运行时就会出现。

我尝试了几种循环方式,例如:

import-module activedirectory

While($true)
{
$User = Read-Host -Prompt "Enter User's First OR Surname OR partial String"
$User = '*' + $User + '*'
Get-ADComputer -Filter 'Description -like $User' -Properties Description | Select Name, Description
write-Host "================================================================="
}

任何建议都会得到很好的接受。

由于

1 个答案:

答案 0 :(得分:0)

有趣的发现。据我所知,控制台和控制台存在某种错误。 GET-ADComputer。 Get-Adcomputer在获取信息时“工作”(放入变量,内容显示),但不输出。有趣的是,如果你把输出两次,它将第二次工作:

While($true)
{
    $User = Read-Host -Prompt "Enter User's First OR Surname OR partial String"
    $User = '*' + $User + '*'
    Get-ADComputer -Filter 'Description -like $User' -Properties Description | Select Name, Description
    Get-ADComputer -Filter 'Description -like $User' -Properties Description | Select Name, Description
    write-Host "================================================================="
}

解决方法是第一次有一面旗帜:

$firstTime = $true

While($true)
{
    $User = Read-Host -Prompt "Enter User's First OR Surname OR partial String"
    $User = '*' + $User + '*'
    $computerTable = Get-ADComputer -Filter 'Description -like $User' -Properties Description | Select Name, Description    

    if($firstTime){
        $firstTime = $false           
        $computerTable 
    }

    $computerTable

    write-Host "================================================================="
}