Drunken Master Еще раз АГРОМНАЭ спасибо за помощь. Наконец дошли руки, и я доваял скрипт.
Код: ###########Скрипт использует ActiveRoles Management Shell for Active Directory от Quest Software. Взять его можно по ссылке :
http://www.quest.com/powershell/activeroles-server.aspx############ #Для корректной работы скрипта нужно заменить dc.domain.ru на имя домен-контроллера
#Для определения модели монитора нужен файл вида: PNPDeviceID DeviceName.
#Таблицу с большим количеством PNPDeviceID можно взять по адресу
http://listing.driveragent.com/pnp/ param ($z)
function helpme
{
write-host -fore White -back DarkGray "`n Добавление конфигурации компьютеров ActiveDirectory в их описание"
write-host "`n Скрипт записывает в пустые описания (Description) компьютеров, находящихся в определенной ветке/подразделении/контейнере AD, их конфигурацию в виде: модель процессора, модель материнской платы, объем оперативной памяти, объем винчестера(-ов), дата заведения в AD."
write-host " Например: " -no
write-host -fore Green "Celeron 1.70GHz, D845GLVA, 40GB, 256MB, ATI RADEON 9550, NEC Multisync 1970NX (21.08.2008)"
write-host "`n Для запуска скрипта в качестве параметра нужно указать ветку/подразделение/контейнер/объект AD."
write-host " Например: " -no
write-host -fore Green "ConfigToDescription.ps1 domain.ru/container1/container14"
write-host "`n Если ветка/подразделение/контейнер/объект AD содержит пробелы, то его/её нужно заключать в ковычки."
write-host " Например: " -no
write-host -fore Green "ConfigToDescription.ps1 \"domain.ru/container one/container14\""
write-host "`n Скрипт использует Download ActiveRoles Management Shell for Active Directory от Quest Software"
write-host " Адрес: " -no
write-host -fore Green "
http://www.quest.com/powershell`n" exit
}
if ($z -like '' -or $z -imatch "[?]" -or $z -imatch "(help)" ) {helpme}
############################# Запрс login/password для доступа к объектам AD ###################################################################################
$c=get-credential -credential administrator@domain.ru
$dc="dc.domain.ru"
$drvpath="
C:\DRV\all.drv"
connect-QADService -service $dc -credential $c 2>CTD.log | Out-Null
$comps=Get-QADObject -Credential $c -searchroot "$z" -type Computer 2>>CTD.log | Where {$_.OSName -notlike '*Server*'}
foreach ($comp in $comps)
{
$compname=$comp.name
ping $compname /n 1 | Out-Null
if ($LastExitCode -ne 0)
{
"$compname не найден в сети."
}
else
{
$compname>>CTD.log
############################# Проверяем количество ядер и запоминаем модель процессора #########################################################################
(Get-WmiObject Win32_Processor -ComputerName $compname -Credential $c 2>>CTD.log) | Select-Object -First 1 | ForEach-Object {$cpu = $_.Name -Replace 'Intel\(R\) ','' -Replace '\(TM\)','' -Replace'\(R\)','' -Replace"CPU","" -Replace "\s{2,}"," " -Replace "^\s+",""}
if(((Get-WmiObject Win32_Processor -ComputerName $compname -Credential $c 2>>CTD.log) | Select-Object -First 1 | ForEach-Object {$_.ProcessorID}) -eq 'BFEBFBFF00010676') {$cpu = "Core2 E8200 2.66GHz"}
############################# Если модель не разрешилась, то сервер RPC недоступен или доступ запрещен ###############################################################
if ($cpu -eq "")
{
"$($compname): Сервер RPC недоступен или доступ запрещен."
continue;
}
############################# Узнаем модель материнской платы ############################################################################################
$mb = (Get-WmiObject Win32_BaseBoard -ComputerName $compname -Credential $c 2>>CTD.log).Product -Replace "\s+",""
############################# Определяем количество винчестеров и запоминаем их объем ##########################################################################
Get-WmiObject Win32_DiskDrive -Filter "MediaType LIKE 'Fixed%'" -ComputerName $compname -Credential $c 2>>CTD.log | Where {$_.PNPDeviceID -LIKE "IDE*"} | ForEach-Object {$hdd = ""}{$hdd += "{0:0}GB, " -f ($_.Size/1e+9)}{$hdd = $hdd.Trim(' ,')}
############################# Поределяем объем оперативной памяти ###########################################################################################
$ram = "{0:0}MB" -f ((Get-WmiObject Win32_PhysicalMemory -ComputerName $compname -Credential $c 2>>CTD.log) | Foreach-Object {$s=0}{$s +=$_.Capacity}{$s / 1MB})
############################# Поределяем объем оперативной памяти ###########################################################################################
$vga=(Get-WmiObject Win32_VideoController -ComputerName $compname -Credential $c 2>>CTD.log | ? {$_.PNPDeviceID -like "PCI\Ven*"} | select -first 1).caption -Replace '\(R\)','' -Replace 'Family','' -Replace 'Series','' -Replace 'Controller','' -Replace 'Graphics','' -Replace 'Chipset','' -Replace '\s{2,}',' ' -Replace '\s$',''
############################# Поределяем объем оперативной памяти ###########################################################################################
$mnt=(Get-WmiObject Win32_DesktopMonitor -ComputerName $compname -Credential $c 2>>CTD.log | ? {$_.PNPDeviceID -like "Display\*"}).PNPDeviceID -replace "^(.+\\)(.+)(\\.+)", '$2' -replace "^\s*$", "unknown"
$mon=(select-string -path $drvpath -pattern "$mnt").Line -replace "$mnt ",""
############################# Задаем дату обновления #####################################################################################################
$add = (Get-Date).ToString("d")
############################# Записываем полученные даннные в описание компа ##################################################################################
get-QADObject -SearchRoot "$comp" -Type Computer 2>>CTD.log | Where {$_.description -notlike "*$add*"} | set-QADObject -ObjectAttributes @{Description="$cpu, $mb, $hdd, $ram, $vga, $mon ($add)"} 2>>CTD.log | out-null
"$compname - Ok!"
############################# Обнуляем значения для следующего цикла ########################################################################################
$cpu = $mb = $hdd = $ram = $add = $vga = $mnt = $mon= ""
}
}
disconnect-QADService 2>>CTD.log