Некоторое время назад я писАл о расширении оболочки ADUC для получении имени зарегистрированного на компьютере пользователя. На этот раз публикую скрипт на PowerShell 2.0 для задания описаний компьютеров в AD на основании имени текущего зарегистрированного на нём пользователя и его номера телефона. Для снижения таймаута WMI взята и немного доработана конструкция Test-Host, благодаря чему достигается достаточно высокая скорость работы.
Для использования измените выделенное красным (OU и домен) для своего окружения.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 пингуется)