Игнорировать автономные компьютеры в Get-ADComputer

Я пытаюсь запустить командлеты Get-WmiObject/Get-CimInstance на всех подключенных к сети компьютерах моего домена. Я пытался сделать что-то вроде этого:

Get-ADComputer -Filter * | Foreeach-Object {
#Do Something
}

Проблема в том, что если компьютер не подключен к сети, я получаю сообщение об ошибке, и, насколько мне известно, я не могу запустить эту команду только для компьютеров, подключенных к сети.

Итак, я подумывал о том, чтобы перейти на следующий компьютер, когда произойдет ошибка, используя -ErrorAction SilentlyContinue, но в любом случае он просто выполнит остальную часть кода внутри цикла, и я хочу этого избежать.

Есть ли способ выйти из цикла в моей ситуации, когда это произойдет, или каким-либо другим способом я мог бы сделать то, что мне нужно?

Спасибо !

Используйте Where-Object, чтобы отфильтровать нулевые записи.

jdweng 27.03.2024 13:15

Делайте параллельно get-ciminstance -computername computer1,computer2,computer3...

js2010 27.03.2024 13:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте Test-Connection, чтобы проверить, можете ли вы подключиться к удаленному компьютеру, затем return из блока ForEach-Object, если вы не можете:

Get-ADComputer -Filter "Enabled -eq '$true'" |ForEach-Object {
  # pick host name
  if (-not($cn = $_.DNSHostName)) {
    $cn = $_.Name
  }

  # test connectivity - change to `-Protocol DCOM` for Get-WmiObject
  if (-not(Test-Connection -ComputerName $_.DNSHostName -Protocol WSMan -Quiet)) {
    return
  }

  Get-CimInstance ... -ComputerName $cn
}
Ответ принят как подходящий

В powershell 5.1 вы можете быстро получить список компьютеров, подключенных к сети, вот так (время ответа и адрес — это фактические свойства):

if (! (test-path list.txt)) { Get-ADComputer -Filter * | % name |
  set-content list.txt }
$list = get-content list.txt
$uplist = test-connection -count 1 $list -AsJob | receive-job -wait -auto | 
  ? responsetime | % address
$uplist | Foreeach-Object {
  #Do Something with $_
}
# or in parallel:
# invoke-command $uplist { 'whatever' } 

Спасибо, использовал его с оператором if и отлично работает! if (Test-Connection -ComputerName $_.Name -Count 1 -Quiet) { }

Wayne 28.03.2024 07:48

@Wayne Что ты думаешь об этом редактировании?

js2010 28.03.2024 13:31

Значит, все в $uplist будет компьютерами, на которых работал пинг, поэтому мне не нужно заморачиваться с оператором if? Это отличная идея, мне нравится, спасибо

Wayne 03.04.2024 10:23

Другие вопросы по теме