Приведу пример конфигурации ядра для настройки консоли. Надоело что экран по умолчанию маленький 640×480 Захотелось большего.
В ядро добавляем:
options SC_PIXEL_MODE
options VESA
options VGA_WIDTH90
options SC_NORM_ATTR=(FG_GREEN|BG_BLACK)
options SC_KERNEL_CONS_ATTR=(FG_RED|BG_BLACK)
Так же меняем цвета консоли, обычный текст становится зеленым, а вывод ядра красным.
В rc.conf добавляем:
allscreens_flags=»-g 132×60 MODE_279″
Это для 17 дюймов. Для других мониторов надо смотреть через vidcontrol -i mode | more сводную таблицу и выбрать что подходит для конкретного случая.
Сегодня какой-то день активаций. На работе после смены матери на новом компе виста попросила очередной активации. Как не странно она ругнулась, что ключ уже используется. Пришлось звонить по бесплатному телефону и вводить 9 последовательностей по шесть цифр, после этого робот меня вежливо спросил, на скольких машинах я использую данную версию Windows. Я конечно робко ответил, что на одной. После этого активация прошла удачно.
Второй этап был с домашним ноутбуком, который я не включал уже больше месяца. Конечно он попросил активацию, только вот не давал нормально загрузиться чтоб подключить USB CDMA модем и провести активацию по интернету. Пришлось опять звонить. Порадовало что с меня по бесплатному номеру не сняли ни копейки. Правда активация прошла странно, робот ругнулся что у меня неверная последовательность цифр. Вежливо переключил на живого человека. Мне ответила девушка, с сильным акцентом, предложила по новой ввести код продукта, подождала и подтвердила что все прошло нормально и обратно переключила на робота. Я правильно ввел продиктованные цифры, после чего активация прошла.
————-
Вывод я для себя сделал такой. Пользоваться этим можно, единственное ответ диктуется достаточно быстро, нужно иметь сноровку чтоб вбивать сразу.
Переключать меня на человека не было необходимости, робот сам мог предложить сделать то же самое что и девушка. При чем во второй раз голос робота был явной нарезкой
Сам скрипт user-dir-size.pl1
param ($path,$size,$diff,$min)
#$diff = "no";
$text = "`n
`t Надо использовать следующий синтаксис скрипта:
`t -path - путь до домашней папки
`t -size - размер папки, поддерживается сокращения: Gb,Mb,Kb
`t -diff - вычислить кто почти достиг придела в диапазоне: yes|no. Default no
`t -min - минимальный размер, используется в паре с -size
`t---------------------------------------------------------------------------
`t Пример:
`t ./user-dir-size.ps1 -path ""E:\Homes\"" -size 1Gb
`t ./user-dir-size.ps1 -path ""E:\Homes\"" -size 1Gb -diff yes -min 900Mb"
if ((!$diff) -or ($diff -eq "no")) {
if (!$path -or !$size ) {
write-warning $text ;
return
}
else{
Get-ChildItem -LiteralPath $path |
Where-Object {$_.PSIsContainer} |
ForEach-Object {
$u=$_
$u | Get-ChildItem -Recurse |
Measure-Object Length -Sum |
Where-Object {($_.sum -gt $size)} |
Select @{name="Name"; expression={$u.name}},
count,
@{n="Summ"; e={"{0:n2}Mb" -f ($_.sum/1Mb)}}
} | ConvertTo-Html -Head " <link rel='stylesheet' href='styles.css' type='text/css' />" |Out-file "Превышена квота.html"
}
}
else {
if ((!$path -or !$size -or !$min) -or ($diff -ne "yes")) {
write-warning $text ;
return
}
else {Get-ChildItem -LiteralPath $path |
Where-Object {$_.PSIsContainer} |
ForEach-Object {
$u=$_
$u | Get-ChildItem -Recurse |
Measure-Object Length -Sum |
Where-Object {($_.sum -gt $min) -and ($_.sum -lt $size)} |
Select @{name="Name"; expression={$u.name}},
count,
@{n="Summ"; e={"{0:n2}Mb" -f ($_.sum/1Mb)}}
}| ConvertTo-Html -Head " <link rel='stylesheet' href='styles.css' type='text/css' />" |Out-file "Близок к превышению.html"
}
}
Таблица стилей styles.css
body {
background-color: #CCC;
}
body,table,td,th {font-family:Tahoma; color:black;Font-Size;12pt}
th {
font-weight:bold;
background-color: #99F ;
}
td {background-color: white; }
table {
background-color: #000;
text-align: center;
}
Данный скрипт считает общий объем домашней папки и выводи в красивую html табличку тех товарищей, чей объем папки превысил 1Gb места
Если случайно удалили/изменили политики GPO который создаются при добавлении роли AD на Windows Server. Для этого подойдет утилита dcgpofix.exe.
Для Windows Server 2003
dcgpofix /Target:Domain | DC
Для Windows Server 2008
dcgpofix /ignoreschema /Target:Domain | DC
При восстановлении политики ни куда не линкуются, это надо делать вручную.
Вот и мой первый так сказать скриптец который в папке с домашними папками доменных пользователей восстанавливает владельцев папки исходя из названии папки. Так как у нас в пусть до домашней папки выглядит так //server.domain.ru/Homes$/%username%. Вот сам скрипт:
Get-ChildItem -Path D:\Homes | ForEach-Object { icacls $_ /setowner "DOMAIN\$_" /T }
Рекомендую перед запуском скрипта запустить icacls D:\Homes /save C:\acl.txt /T для того чтоб на свякий случай сохранить дамп пермишенов.
P.S. все это дело для Windows Server 2008, так как icacls входит в его состав. Для Windows Server 2003 есть cacls.
Спасибо товарищу Alexander Donin с форума Microsoft за помощь в написании данного скрипта на PowerShell для раскидывания пользователей по подразделениям исходя из их положения в исходном домене. Данный скрипт помогает раскидать пользователей в целевом доменене по подразделением при их переносе с помощью ADMT
#Заменить имя OU
$Ou="Migr_users"
#Заменить имя нового домена
$Domain1="DC=domain_new,DC=ru"
#Заменить имястарого домена
$Domain2="DC=domain_old,DC=ru"
#Ищем пользователей в OU
$Path1 = "LDAP://OU=" + $OU + "," + $domain1
$Path2 = "LDAP://" + $domain2
$Search = New-Object DirectoryServices.DirectorySearcher([ADSI]$Path1)
$Search.filter = "(&(objectCategory=user)(cn=*))"
$Users = $Search.Findall()
# для каждого
foreach ($User_n in $Users ){
#находим соотв. в старом домене
$User = [ADSI]$User_n.Path
$USerName = [string]$User.Name
$Search2 = New-Object DirectoryServices.DirectorySearcher([ADSI]$Path2)
$Search2.filter = "(&(objectCategory=user)(cn=$USerName))"
$User_old = $Search2.FindOne()
#меняем в пути имя домена
$User_old = [ADSI]$User_old.Path
$User_old_tmp = [string]$User_old.distinguishedName
$Path3 = [string]$user_old_tmp.Replace($domain2,$domain1)
#удаляем начало (СN=имя пользователя,)
$UserCN="CN=" + $user_old.CN + ","
$Path3 = "LDAP://" + [string]$Path3.Replace([string]$UserCN,"")
#собственно перемешение
$user.psbase.MoveTo([adsi]$Path3)
}
#Конец
Вот и свершилось чудо, я наконец нашел время поставить это чудо чтоб обзавестись своим блогом