Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Корисне по Windows

У різних компаніях адміни по різному підходять до іменування комп'ютерів. Є ті, хто іменує їх за типом: PC1, PC2 і т.д. Є ті, хто називають комп'ютери інвентарним номером, якщо такий у них є. Є ті, хто кодує в імені якісь корисні дані, на кшталт SVOB-213, де SVOM це показник географічного знаходження офісу, 2 поверх, 13 кабінет. А є такі контри, в яких доводиться працювати мені)))

І в таких конторах комп'ютери називають в залежності від імені або прізвища користувача за ним сидить. На даний момент в конторі якій я працюю, комп'ютери іменуються по префіксу філії та прізвища користувача, наприклад MSK-IVANOV. Користувачів багато, вони досить часто змінюються (досить часто, що б відволікати мене від моїх набагато важливіших справ), тому довелося автоматизувати процес перейменування.

Спочатку був придуманий простенький скрипт для ручного перейменування комп'ютерів в домені (саме в домені) не встаючи з крісла.

@echo off cls: st :: запитує ім'я комп'ютера, який треба перейменувати, зчитуючи відповідь з консолі. set / p OldCompName = "Old computermame:" :: Перевіряємо що за користувач на ньому залягання. % ~ Dp0PsLoggedon.exe -l \\% OldCompName% :: Продовжуємо чи ні? Питання на випадок якщо комп'ютер вимкнений, або користувач не залогінені. set / p FF = "Продовжити процедуру перейменування? (y / n):" :: Якщо відповідаємо "y", то продовжуємо, якщо "n" то переходимо в початок, для перейменування іншого компа. if% FF% == n goto st else goto fw :: Початок процедури перейменування. Запит нового імені комп'ютера, адже ім'я користувача на ньому залогінненого ми подивилися вище і знаємо у що треба перейменувати. : Fw :: Прочитуємо з консолі нове ім'я компа. set / p NewCompName = "New computermame:" :: Перейменовуємо комп'ютер стандартною утилітою netdom. Тут треба вписати логін і пароль доменного адміна. netdom RENAMECOMPUTER \\% OldCompName% / newname:% NewCompName% / userd: domen \ admin / passwordd: admin_password / force :: Шолом пошту всім зацікавленим особам про перейменування. Облікові дані і одержувача природно треба підставити свої. % ~ Dp0blat \ blat.exe -to [email protected] -f [email protected] -server smtp.itroad.ru -port 25 -u [email protected] -pw qwerty123 -subject "Перейменування комп'ютера% COMPUTERNAME%" -charset "windows-1251" -body "Було вироблено перейменування комп'ютера% OldCompName% в% NewCompName%" :: переміняли ще що не будь? Якщо так, то починаємо з початок, якщо немає, то виходимо. set / p Agane = "Ще що ні будь перейменуємо? (y / n):" if% Agane% == y goto st else goto exit: exit exit

Скрипт треба запускати на контролер домену і під учеткой адміна, щоб PsLoggedon.exe вистачило прав перевірити залогіненним користувача, так і c є тільки на КД. Забрати готовий скрипт з усім необхідним можна тут .

Полу автомат це добре, але повний автомат, ще краще. Тому даний скрипт отримав свій розвиток, і перетворився в те, у що перетворився)))

Змінилася схема запуску, тепер скрипт запускається на комп'ютерах користувачів. Передбачається, що скрипт буде запускатися через GPO (обов'язково через політики користувача, а не комп'ютера) в момент входу, або виходу користувача (у мене в момент виходу, щоб не затягувати час старту системи).

Дана схема вирішує 2 завдання, по-перше, тепер не треба думати над тим, залягання користувач чи ні, чи включений комп'ютер, чи ні. По-друге, так набагато простіше забирати ім'я користувача, ім'я комп'ютера і інші змінні.

При написання всієї цієї справи, довелося зіткнуться з деякими проблемами. Найголовніша це запуск скрипта з підвищеними правами, бо через GPO (через секцію користувача, а не комп'ютера) все запускається під правами користувача. Відповідно довелося винаходити велосипед, який однаково добре працював би на будь-яких системах, починаючи від Win2000 і закінчуючи Win8, міг би запам'ятовувати пароль адміна, і яким можна було б довірити адмінських пароль.

Стандартна конструкція: echo | RUNAS / netonly / user: \ program (for example cmd) працює не завжди і не у всіх ОС. Користуватися сторонніми додатками я не наважився, тому скористався милицею у вигляді psexec.exe, милицею, але милицею перевіреним і на 100% працюють.

На жаль і тут не обійшлося без мінуса, в свіжих версіях psexec.exe при першому запуску пропонують прийняти ліцензійну угоду, що псує автоматизацію. Тому довелося імпортувати у себе гілку реєстру і вже прийнятим угодою і додати її експорт на комп'ютери користувача в скрипт.

Інша проблема, це поділ машин на цільові (на яких повинен відпрацьовувати цей скрипт) і не цільові (наприклад, якісь службові машини якими користуються всі, або сервера, особливо сервера терміналів). Для цього була зроблена перевірка префікса машини, машина без потрібного префікса вважається «особливої» і на ній скрипт відпрацьовується. Звичайно, частково проблема вирішується застосування групової політики тільки на потрібний підрозділ і з винятками у вигляді фільтрів WMI або навіть таргетування, але про всяк випадок, нехай буде перевірка.

@Echo Off setlocal :: Мінлива шляху для збереження лічильників. Папка повинна бути доступна для запису під будь-яким користувачем, папка повинна бути мережевий. :: В дорозі не допускаються пропуски. Можна звичайно взяти в лапки, але це зайвий геморой, бо прогалини в мережевому шляху свідомо погана ідея. SET P = \\ server \ Computers_auto_rename_counter \ :: Логін користувача від якого відбувається перейменування і запуск psexec. Користувач повинен бути адміністратором домену. SET U = domen \ admin :: Пароль користувача SET PA = admin_password :: Префікс комп'ютерів SET PR = MSK :: Переконуємося що комп'ютер є робочою машиною, а не сервером або службовою машиною. У робочого комп'ютера повинен бути префікс MSK. :: Якщо префікса немає, виходимо нічого не роблячи. echo "% COMPUTERNAME%" | findstr / i "% PR% -" If "% errorlevel%" NEQ "0" (exit) :: Перевіряємо чи є лічильник, якщо немає, то створюємо. IF NOT EXIST% P% \% COMPUTERNAME% .txt (echo 0>% P% \% COMPUTERNAME% .txt exit) ELSE GOTO check :: ------------------ ---------- Початок і кінець GOTO ----------------------------: check :: Наповнюємо змінну значенням лічильника . SET / p N = <% P% \% COMPUTERNAME% .txt :: Порівнюємо ім'я користувача і ім'я комп'ютера без урахування регістру, якщо не сходяться, додаємо до лічильника одиницю. :: Якщо зафіксовано 2 входи під користувачем, а потім зайшов користувач чиїм ім'ям називається комп'ютер, лічильник скидається на 0. :: Скидання лічильника зроблений на випадок тимчасового користування комп'ютером якимось іншим людиною. IF / I "% COMPUTERNAME%" NEQ "% PR% -% USERNAME%" (set / a N + = 1) ELSE (set N = 0) echo% N%>% P% \% COMPUTERNAME% .txt :: Імпортуємо гілку реєстру зі схваленням ліцензійної угоди. regedit / a "% ~ dp0 \ A.reg" :: Якщо лічильник перевищив 3, то перейменовуємо комп'ютер і скидаємо лічильник. :: За ідеєю, можна просто перейменувати, адже на новому імені створиться новий лічильник. Якщо лічильник менше 3, то йдемо далі. IF% N% GEQ 3 (% ~ dp0psexec.exe \\% COMPUTERNAME% -u% U% -p% PA% -d "% ~ dp0netdom.exe" RENAMECOMPUTER \\% COMPUTERNAME% / newname:% PR% -% USERNAME% / userd:% U% / passwordd:% PA% / force || echo 0>% P% \% COMPUTERNAME% .txt GOTO send) ELSE (exit) :: ----------- ----------------- Початок і кінець GOTO ----------------------------: : ---------------------------- Початок і кінець GOTO ----------------- -----------: send :: Відправка повідомлення про перейменування. % ~ Dp0blat \ blat.exe -to [email protected] -f [email protected] -server smtp.itroad.ru -port 25 -u [email protected] -pw qwerty123 -subject "Автоматичне перейменування комп'ютера% PR% "-charset" windows-1251 "-body" Було вироблено автоматичне перейменування комп'ютера% COMPUTERNAME% в% PR% -% USERNAME% на підставу 3х кратного логіна користувача% USERNAME% ":: ----------- ----------------- Початок і кінець GOTO ---------------------------- exit

Вот такой вот скрипт автоматичного перейменування комп'ютерів вийшов. Він дарує ще крапельку вільного часу, який можна витратити на праведні справи)))

Архів з готовим скриптом і всім необхідним можна забрати тут .

Хотілося б сказати з приводу префікса, зрозуміло що він не один в конторі, тут можна піти двома шляхами, модифікувати цей скрипт, зробивши його універсальним, або можна створити для кожного підрозділу свій скрипт, я пішов другим шляхом, бо кожен підрозділ у мене, це окремий домен, і що б зробити скрипт універсальним, мені б довелося «палити» пароль адміністратора кореня лісу, що я порахував непотрібним.

Що б вся ця бодяга мала закінчений вигляд, додам батник перевірки, який дозволяє побачити в якому стан лічильники.

@Echo Off SET P = \\ server \ Computers_auto_rename_counter \ CLS echo Дані комп'ютери мають лічильники відмінні від нуля echo. findstr [1-5]% P% \ *. txt pause

На цьому все. Думаю якщо не сам скрипт, то ідея будуть корисні.

Exe -l \\% OldCompName% :: Продовжуємо чи ні?
Set / p FF = "Продовжити процедуру перейменування?
Set / p Agane = "Ще що ні будь перейменуємо?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.