Прикольная такая лень, мне нравится. Из предложений: проверять доступность компьютера не по расположению его в соответствующем ou, а по последнему общению с ним (у QAD такая штука есть, гуглится по obsolete computer account) — так несколько надежнее, ибо перемещение — ручная операция :)
А по выводу — интересно все это выгружать сразу в csv, например, для дальнейшего анализа в виде таблицы.
Еще, кстати, можно развернуть powershell на всех машинах групповой политикой и крутить скриптами локально, выкладывая результаты на сетевой диск — тогда точно всем достанется :) единственная проблема — с линухами не катит никак, как, впрочем, и оригинальный скрипт…
З.Ы. В csv можно все собрать, но понимаешь, либо весь вывод отправлять разом, ибо в export-csv нет волшебной команды -append. Хотя возможно я чего то не знаю :)
Хоть приложение и старенькое — юзал на предыдущей работе CheckCFG — легко интегрируется в логон скрипты и умеет делать очень много полезных штук. Есть вроде даже скрипты для Линукса…
>>Здесь надо пояснить, что у меня в домене есть папка Disable, где располагаются учетные записи всех отключенных компьютеров. Если они отключены, то какой смысл к ним стучаться. По этому эту папку мы исключаем из поиска.
Тю, есть решение гораздо проще (хоть и строчек кода больше):
=Cut=
function Get-ADComputers ()
{
# $strFilter = "(objectCategory=Computer)"
#get AD computers without disabled accounts
$strFilter = "(&(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=2))"
Не требует модуля ActiveDirectory, кстати, а значит и работает в PSv1 (для меня это было критично одно время)
>>Get-WmiObject -computername $a Win32_Processor
Если процессоров больше одного, информация будет дублироваться, для записи в текстовый файл — не критично, при запихивании результатов в таблицу — будут проблемы.
То же относится к памяти, дискам, томам и сетевым картам.
>>Get-WmiObject -computername $a Win32_Physicalmemory
Пропущен параметр MemoryType, для преобразования в читаемый вариант можно прогнать через тупой свитч:
switch( $wmiW32PM[0].MemoryType )
{
0 {$strRAMType = «Unknown»}
1 {$strRAMType = «Other»}
2 {$strRAMType = «DRAM»}
9 {$strRAMType = «RAM»}
17 {$strRAMType = «SDRAM»}
19 {$strRAMType = «RDRAM»}
20 {$strRAMType = «DDR»}
21 {$strRAMType = «DDR-2»}
default {$strRAMType = $_}
} #end switch
(для DDR-3 встречалось как 22 так и 23, адаптировать по месту, некоторые маловерятные я выкинул)
Так же не наблюдаю инвентаризации ОС, через класс Win32_OperatingSystem, в котором есть следующие полезные свойства:
Caption, Version, Description, InstallDate, lastbootuptime, SerialNumber, CSDVersion
Так же непонятна конструкция
>> $OS=Get-WmiObject -computername $a Win32_OperatingSystem | foreach {$_.caption}
Вполне можно обойтись более элегантым (и чуть более быстрым)
$OS = (Get-WmiObject -computername $a Win32_OperatingSystem).caption
или совсем быстрым
$OS = (get-wmiobject -query «SELECT Caption FROM Win32_OperatingSystem» -computername $a).Caption
Плюс всё это хозяйство можно писать не в отдельные текстовые файлы, а вполне в табличку, которую потом через export-csv выгрузить.
А при желании — через System.Net.WebClient и выгрузить на FTP.
Объяснюсь про Disable. Домен достался мне по наследству, по этому когда я только начинал заниматься дизайном домена, эта папка появился по необходимости собирать там отключенные учетные записи компьютеров. Все таки удобнее держать их всех в одной куче, нежели разбросанными по домену. Да я согласен с Вашим предложением по отсеву отключенных учетных записей. Но, так как лично у меня они лежат все в 1 месте, мне легче было сделать таким образом :)
Что касается разных свойств, будь то процессор, память и тому подобное — я опять же с Вами согласен, но мне в моем задании этой информации было достаточно :)
На счет непонятной конструкции — пути PowerShella неисповедимы :)
Что касается csv файла, не скрою, что сначала хотел выгружать все туда. Но к сожалению до конца с этим не разобрался, и остановился на текстовых файлах. Буду развиваться дальше :)
>>Объяснюсь про Disable
Да не надо было, и так понятно. Тем более в моих подотчётных доменах тоже есть такой OU ;)
>>Что касается разных свойств
Ну я и уточнил, что текстовика этого достаточно.
По поводу выгрузки в табличку — есть тупой вариант чтобы не связываться с CSV:
В стародавние времена инвентаризацию деал с помощью Fpinger, у него есть какой-то модуль который достаточно запихать в логон скрипт или через psexec прогнать по всем машинам. На выходе получались такие красивые бумажки с табличками и непонятными буковками, которые так любит руководство.
Инвентаризация компьютеров в домене. Лень-двигатель прогресса