2015-07-23 4 views
0

Я новичок в PowerShell, и я пытаюсь написать сценарий, который будет запрашивать AD для имен машин, проверять, какие из них отвечают, и записывать вывод в файл. До сих пор у меня есть это:PowerShell - итерирование имен компьютеров в Active Directory

$computers = Get-ADComputer -filter {(Name -like "PC*")} | Select-Object -Property Name 
foreach ($computer in $computers) { 
    if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -Ea 0 -Quiet)) { 
     "Machine $computer connected." | Out-File "out.txt" -Append 
    } else { 
     "Machine $computer not connected." | Out-File "out.txt" -Append 
    } #end if 
} #end foreach 

Что я получаю в выходной текстовый файл выглядит следующим образом:

... 
Machine @{Name=PC-0649} not connected. 
Machine @{Name=PC-1541} not connected. 
Machine @{Name=PC-1574} not connected. 
... 

Я думаю, что моя проблема заключается в Select-Object -Property Name части первой линии. Запустив отладчик, похоже, что PowerShell форматирует каждую итерацию $computer для включения строки заголовка.

[DBG]: PS Y:\>> $computer 

Name                                               
----                                               
PC-0649 

Какой лучший способ для меня удалить все, кроме ПК, - #### в этой ситуации?

ответ

1

Я думаю, ваша проблема в том, что у вас все еще есть список (усеченных) компьютерных объектов в $computers. Проверьте это, выполнив $computers[0].GetType(). Если вы не видите String, это не строка. :) Попробуйте это вместо:

$computers = Get-ADComputer -filter {(Name -like "PC*")} | 
    Select-Object -ExpandProperty Name 
+0

Это сработало отлично! Спасибо. – paulorv

Смежные вопросы