Главная > Powershell > Обзор “сетевого окружения” в Powershell

Обзор “сетевого окружения” в Powershell

Иногда администраторам сети нужно выполнить какую-либо операцию над всеми компьютерами сети, либо просто узнать какие компьютеры находятся в данный момент в сети. Для решения таких задач существует множество готовых решений.  Например, бесплатный Advanced IP Scanner. Но зачем ставить сторонний софт, когда можно попытаться обойтись своими силами.

Если компьютеров немного можно составить список компьютеров. В больших сетях составлять список компьютеров дело неблагодарное. Для таких целей есть Сетевое окружение. О нем сегодня и пойдет речь.

Получить Сетевое окружение можно через проводник. Проводник, как и многое другое, предоставляет доступ к своим службам через COM-объекты. Для использования проводника в Powershell нужно создать соответствующий объект:

$shell = New-Object -ComObject shell.application

После этого нужно подключиться собственно к Сетевому окружению. Для этого используется так называемый ClassID – идентификатор класса. Для сетевого окружения это ::{208D2C60-3AEA-1069-A2D7-08002B30309D}.

$network = $shell.NameSpace("::{208D2C60-3AEA-1069-A2D7-08002B30309D}")

Это равносильно тому, что открыть “Сетевое окружение”. Здесь как правило находятся ярлыки на наиболее используемые сетевые ресурсы. В этом можно убедиться выполнив команду:

$network.Items()

Нам нужна папка “Вся сеть”:

$EntireNetwork = $network.Items().item("EntireNetwork").GetFolder

Здесь нас интересует “Microsoft Windows Network”, ищем:

foreach ($item in $EntireNetwork.Items())
{
    if ($item.Name -match "Microsoft Windows Network")
    {
        $MSWinNetwork = $item.GetFolder
    }
}

Далее перебираем все рабочие группы (домены) и выводим имена компьютеров:

foreach ($item in $MSWinNetwork.Items())
{
    $Domain = $item.GetFolder
    foreach ($DomainItem in $Domain.Items())
    {
        $Computer_name = $DomainItem.name
        $Computer_name
    }
}

Вот и всё. Применений этому можно найти массу, например одним махом выключить все компьютеры 🙂 А если серьёзно, то из этого можно, например,  найти все компьютеры, на которых установлено памяти меньше, чем 512 МБ, и которые срочно нуждаются в апгрейде, или вообще провести инвентаризацию всей сети.

Реклама
Рубрики:Powershell Метки: ,
  1. Kazun
    19/05/2011 в 18:52

    Применение очень и очень ограничено,я бы сказал в пределах маленькой workgroup.Более эффективнее получать список компьютеров из Active Directory.

    • 19/05/2011 в 19:42

      Никто ж с этим не спорит, но домен есть не у всех.

  2. xmark
    30/10/2016 в 12:11

    Не работает на Windows 10, можно поправить?

    • 02/11/2016 в 16:51

      Попробуйте заменить цикл, на следующую конструкцию:

      foreach ($item in $network.Items())
      {
          $item.path
      }
      
  1. 15/07/2011 в 23:23
  2. 03/09/2011 в 00:00

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: