Архив рубрики: Полезное по Windows

Красноярский сайт о Windows. Все, что связанно с Windows, мои личные записки и опыт. А так как я проживаю в Красноярске, очень многие Windows статьи имеют прямое отношение к этому городу.

Показать ну прямо совсем скрытые (старые) устройства в диспетчере устройств

Задолбало меня что новые устройства добавляются у меня в ПК уже с запредельными индексами, типа — Bluetooth #5. Через просто показать скрытые устройства их не видно, долго я ломал голову, ой как долго пока не набрел на это:

Нужно добавить системную переменную devmgr_show_nonpresent_devices. Поставить её значение «1«, а уже после в меню «Вид» ставим галку на опции «Показать скрытые устройства», после чего появятся все устройства, которые побывали в ПК за всю историю Windows.

Обновление утилиты для закачки Cureit и AVPTool

Доброго времени суток дорогие читатели ))

Давно я не занимался сайтом, но при этом продолжал таки свою трудовую деятельность и плодами этой деятельности, стало обновление моей чудо утилиты по закачке Cureit и AVPTool. Подробности читаем в конце целевой статьи.

Автоматическое переименование компьютеров в домене, в зависимости от пользователя за ним сидящего

Скрипт автоматического переименования компьютеров в домене на основание логина пользователя.В разных компаниях админы по разному подходят к именованию компьютеров. Есть те, кто именует их по типу: 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 test@itroad.ru -f admin@itroad.ru -server smtp.itroad.ru -port 25 -u admin@itroad.ru -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 test@itroad.ru -f admin@itroad.ru -server smtp.itroad.ru -port 25 -u admin@itroad.ru -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

На этом все. Думаю если не сам скрипт, то идея будут полезны.

Полезные выборки LDAP\AD

active_directory

Пожалуй, это будет один из самых коротких постов. Выкладываю свои выборки пользователей из AD, что бы не забыть.

 

  • Включенные, просроченные\не просроченные, не системные пользователи не имеющие в профиле почты:
(&(&(objectCategory=user)(!mail=*)(&(objectClass=user)(objectCategory=PERSON)(company=*)(|(userAccountControl=512)(userAccountControl=66048)))))

 

  • Включенные\выключенные, просроченные\не просроченные, не системные пользователи, в обязательном порядке имеющие в профиле почту и в поле «Описание» полную дату рождения в виде dd.mm.yyyy:
(&(&(objectCategory=user)(mail=*)(description=*.*.*)))

 

  • Тоже что и выше, но с пустым полем «Описание»:
(&(objectCategory=user)(!description=*)(mail=*))

 

  • Тоже что и выше, но поле «Описание» не пустое (содержит записи любого вида):
(&(objectCategory=user)(description=*)(mail=*))

 

  • Отключенные, просроченные\не просроченные, не системные и системные пользователи.

Срок действия пароля не ограничен

Работает только если в профиле пользователя нет галки «Срок действия пароля не ограничен»

Если надо не ограничивать сроки действия пароля, это можно сделать через GPO.

 

 

 

 

 

(&(&(objectClass=user)(objectCategory=PERSON)(userAccountControl=514)))

 

  • Ну и пожалуй самое интересное, что пришлось очень долго сооружать. Это вывод всех просроченных пользователей.

Срок действия учетной записи

Очень много админов пользуются галкой «Срок действия учетной записи» по отношению к увольняющимся сотрудникам.

И ведь это действительно удобно, поставил дату увольнения и все, учетка «обезврежена». Но часто это забывается, а когда пользователей не одна сотня и ты их даже в глаза не видел, найти потом просроченную учетку проблематично.

Для этого у меня такая выборка, хотя мелкомякие утверждают в технете, что это невозможно:

 

(&(&(&(objectCategory=user)(&(objectClass=user)(objectCategory=PERSON)(!accountExpires=0)(!accountExpires=9223372036854775807)(!userAccountControl=514)))))

 

Дополнение статьи от 18.11.2015

Выборка всех компьютеров в домене:

(&(objectCategory=computer)(name=*))

 

Выборка отключенных компьютеров:

(&(objectCategory=computer)(name=*)(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=2))

 

Выборка только включенных компьютеров:

(&(&(&(objectCategory=computer)(name=*)(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=2))))

 

Выборка всех пользователей кроме отключенных руками:

(&(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))))

 

А вот сейчас будет вкуснятина — выборка пользователей заблокировавшихся после неудачного ввода пароля:

(&(&(&(&(&(objectCategory=person)(objectClass=user)(lockoutTime:1.2.840.113556.1.4.804:=4294967295))))))

 

Только отключенные руками пользователи:

(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))

 

Вот тоже отличная выборка — выборка не отключенных руками и по времени пользователей:

(&(&(&(objectCategory=user)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(|(accountExpires=9223372036854775807)(accountExpires=0)))))

 

Вот такие рецептики. Если есть что добавить, или я где то не прав. Прошу в комменты.

Opera 64bit

opera 64bit

После переустановки Windows на 64 битную версию и осознав что это надолго, я задался целю найти и установить все нужные мне программы только в 64 битном исполнение. Особой проблемы это не составило, и почти все было найдено, кроме браузера. Оказалось в отличие от Linux где нет проблемы заиметь себе 64 битный огнелис, хром или мою любимую оперу, в Windows с этим проблема.

Но после достаточно длительных поисков, я все же нашел не фейковую 64 битную оперу 12 версии от самих разработчиков. К сожалению не все так радужно радужно как хотелось бы, хоть сама опера и работает замечательно, открывает неимоверное кол-во вкладок и прочее,  но все это великолепие обламывается на сайтах с Flash. Flash нет в чистом 64 битном исполнение, и получается опера ничего не выигрывает от своей 64 битности в отношение Flash сайтов.

Пользуйтесь кому надо.

P.S. Все что не с оперовского сайта находится в интернетах, это или банальные 32 битные версии, или фейки с измененным эбаутом, но запускающиеся в 32 битном режиме.