Некоторое время назад я писАл о расширении оболочки ADUC для получении имени зарегистрированного на компьютере пользователя. На этот раз публикую скрипт на PowerShell 2.0 для задания описаний компьютеров в AD на основании имени текущего зарегистрированного на нём пользователя и его номера телефона. Для снижения таймаута WMI взята и немного доработана конструкция Test-Host, благодаря чему достигается достаточно высокая скорость работы.
Для использования измените выделенное красным (OU и домен) для своего окружения.
Import-Module ActiveDirectory foreach ($comp in (Get-ADComputer -filter * -SearchBase "CN=Computers,DC=domain,DC=corp" | foreach {$_.name} )) { $ping = new-object System.Net.NetworkInformation.Ping trap {Write-Verbose "Ошибка пинга"; $False; continue} if ($ping.send($comp,50).Status -eq "Success" ) { $useroncomp = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).username $lastuser = Get-ADUser ($useroncomp.split("\")[1]) -properties displayname, telephonenumber Set-ADComputer $comp -Description (($lastuser.DisplayName) + " (" + ($lastuser.telephonenumber) + ")") } else {Write-Host $comp "- недоступен"} }
Внимание! Скрипт работает только на Windows Server 2008 R2 и Windows 7, то есть там, где есть модуль Active Directory для PowerShell
Спасибо за пост, не полностью, но кое-где меня заинтересовало.
Довольно доступоно и просто раскрыта тема.спасибо
Полезная статья
Приветствую !
Спасибо за статейку !
Реально первый подобный скрипт который наконец то заработал ! 😀
Вопросик
Можно ли его как нибудь проапгрейдить =)
интересует такая тема
если никто на компе не залогинен что бы из description запись удалялась ?
ну и еще может если комп в дауне дописывалось может что то типа нет связи или не включен
и вовще тогда агонь будет а не скрипт ! 😀
p.s вчера девчушка сидела на одном компе а сегодня уже на другом
но на том компе котором она сидела вчера никого сегодня нет
а запись осталась что она щас там ….
получается я зря на человека наехал (у нас нельзя сидеть на нескольких компах под одной учеткой )
Что мешает на Logout повесить скрипт очистки данного поля?
Это точно. Полностью согласен с предыдущим автором.
Интересные коментарии, да и блог то что надо.
Отредактил малец твой скрипт, добавил в описание еще IP
####################################################
# Description.ps1 27/05/2015 PowerShell v3-4 mode by ®clevergod and ToSHa
# Записываем в атрибут Description каждого объекта Computer, имя, залогоненого на нем пользователя + (IP)
# Ложем в шедуллер DC и наслаждаемся (никаких больше логон скриптов) учите PowerShell ребята!
####################################################
Import-Module ActiveDirectory
#$erroractionpreference = «SilentlyContinue»
foreach ($comp in (Get-ADComputer -filter * -SearchBase «OU=АЛМАТЫ,OU=KELET,DC=kelet,DC=local» | select -expand name)) #foreach {$_.name} ))
{ $ping = new-object System.Net.NetworkInformation.Ping
trap {Write-Verbose $false; » $comp — Ошибка пинга»; continue}
if ($ping.send($comp).Status -eq «Success»)
{
$useroncomp = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).username
$IP = [System.Net.Dns]::GetHostAddresses(«$comp»)
$lastuser = Get-ADUser ($useroncomp.split(«\»)[1]) -properties displayname
Set-ADComputer $comp -Description (($lastuser.DisplayName) + » (» + $IP + «)»)
}
else {Write-Host $comp.name «$comp — недоступен»}
}
Записываем в атрибут Description каждого объекта Computer & User
####################################################
# Description.ps1 27/05/2015 PowerShell v3-4 made by ®clevergod and ToSHa
# Записываем в атрибут Description каждого объекта Computer & User, имя, залогоненого на нем пользователя + (IP)
# Ложем в шедуллер DC и наслаждаемся (никаких больше логон скриптов) учите PowerShell ребята!
####################################################
# Добавляем оснастку ActiveDirectory на старых PS
Import-Module ActiveDirectory
# Пропуск ошибок (в частности если у юзеров проблема с RPC)
$erroractionpreference = «SilentlyContinue»
# Погнали в цикле с переменными (точим под себя «OU=ОТДЕЛ,DC=company,DC=local»)
foreach ($comp in (Get-ADComputer -filter * -SearchBase «OU=ОТДЕЛ,DC=company,DC=local» | select -expand name))
{ $ping = new-object System.Net.NetworkInformation.Ping
trap {Write-Verbose $false; » $comp — Ошибка пинга»; continue}
if ($ping.send($comp).Status -eq «Success»)
{
$useroncomp = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).username
$user = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).username
$IP = [System.Net.Dns]::GetHostAddresses(«$comp»)
$lastuser = Get-ADUser ($useroncomp.split(«\»)[1]) -properties displayname
$lastLogIN = Get-ADUser ($useroncomp.split(«\»)[1]) -properties name
# Описание ПК — Последний залогиненый + IP
Set-ADComputer $comp -Description (($lastuser.DisplayName) + » (» + $IP + «)»)
# Описание Юзера — Комп
Set-AdUser $lastLogIN -Description $comp
}
else {Write-Host $comp.name «$comp — недоступен»}
}
Запинается — ошибка пинга
Подскажите пожалуйста в чём может быть проблема?
(машина доступна, с dc пингуется)