diamon@truediamon.ru:~$

Windows, Linux, КПК и немного ещё.

Адресная книга в html из AD

ps

Как-то исторически сложилось, что адресная книга в организации велась в экселевском файлике, лежащем на шаре. Гемор её поддерживать, гемор ей пользоваться и всё такое. Но ведь есть замечательная Active Directory, в которой все данные есть! Избавил сотрудника от тяжкой ноши вносить всех в файлик и сваял за пару минут наколеночный скрипт. Ну и темплейт, ещё за пару десятков минут сварганил. Просто запускаем скрипт и у нас есть html, который можно положить куда угодно и политиками добавить его в букмарки всех сотрудников.

Ссылка на GitHub

addressbook.ps1:

$curDir = $MyInvocation.MyCommand.Definition | split-path -parent 
$searchBase = "OU=users,DC=company,DC=com"
$LDAPFilter = "(&(objectCategory=Person)(objectClass=User)(mail=*)(givenName=*)(sn=*)(!userAccountControl:1.2.840.113556.1.4.803:=2))" # незаблокированные юзеры с емейлом и заполненными именем-фамилией
$tplFile = $curDir + "\addressbook.tpl" #файл с темплейтом
$outFile = "\\iiswebserver\spravochnik\index.html" # куда кладём сгенерённый файл.
$UserCount = 0
$dt=Get-Date -Format "yyyy-MM-dd HH:mm"
 
$TextContent = ""
 
import-module ActiveDirectory
 
$users = Get-ADUser -LDAPFilter $LDAPFilter -SearchBase $searchBase -SearchScope Subtree -Properties cn, displayName, telephoneNumber, ipPhone, mail, Department, Title, Office
foreach ($user in $users) {
	$TextContent = $TextContent+"<tr><td>"+$user.displayName+"</td><td>"+$user.telephoneNumber+"</td><td>"+$user.ipPhone+"</td><td><a href=`"mailto:"+$user.mail+"`">"+$user.mail+"</a></td><td>"+$user.Title+"</td><td>"+$user.Department+"</td><td>"+$user.Office+"</td></tr>`n"
	$UserCount++
}
 
$tplText = Get-Content $tplFile -Encoding UTF8
$tplText = $tplText -replace "__content__", $TextContent
$tplText | Out-File $outFile -Encoding UTF8
 
Write-Host "$dt - done. $UserCount users exported."

addressbook.tpl:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Адресная книга "Рога и Копыта"</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
 
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/fixedheader/3.1.2/css/fixedHeader.dataTables.min.css">
<script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/fixedheader/3.1.2/js/dataTables.fixedHeader.min.js"></script>
<style type="text/css">
div.container {
width: 95%;
}
div#addressbook_filter {
float: left;
text-align: left;
}
</style>
<script>
$(document).ready(function() {
var table = $('#addressbook').DataTable( {
paging: false,
fixedHeader: {
 header: true,
 footer: false
 },
language: {
 info: "Показано _END_ записей",
 infoFiltered: "(отфильтровано из _MAX_ записей)",
 search: "Поиск: "
 }
} );
} );
</script>
</head>
 
<body>
<div class="container">
<div class="table-responsive">
<table class="display" id="addressbook" cellspacing="0" width="100%">
<thead>
<tr><th>ФИО</th><th>Телефон</th><th>добавочный</th><th>e-mail</th><th>Должность</th><th>Отдел</th><th>Кабинет</th></tr>
</thead>
<tbody>
__content__
</tbody>
</table>
</div>
</div>
</body>
</html>