2016-08-03

Поиск живых компьютеров в Active Directory

Скрипт для поиска компов, которые меняли свой внутренний пароль в AD в течение последних трех дней:

1
2
3
4
5
6
7
8
9
Import-Module ActiveDirectory

$lastCheckDays = 3

$filter =  (get-date).AddDays(-$lastCheckDays).ToString("dd/MM/yyyy")
get-adcomputer `
            -filter "Passwordlastset -gt '$filter'" `
            -properties * `
            | Select name,passwordlastset,OperatingSystem

Выполнять лучше на контроллере соответствующего домена

Если требуется собрать и свести в один файл информацию о комьютерах из разных доменов, можно использовать такой скрипт
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Import-Module ActiveDirectory

$tempfile   = 'c:\temp\comp.csv.temp'
$resultfile = 'c:\temp\comp.csv'
 

function DoDomain($dc)
    {
    $lastCheckDays = 30 # Максимум дней с обновления пароля
    $filter =  (get-date).AddDays(-$lastCheckDays).ToString("dd/MM/yyyy")

    $error.clear()
    try {Get-ADDomain -server "$dc" | Out-Null } # проверка доступности контроллера
    catch {"[Error] $dc" }
    if (!$error){ # если контроллер доступен - понеслась...
        # Вытаскиваем список живых компов, 
        # экспортируем во временный файл, вырезая заголовки
        get-adcomputer `
                    -filter "Passwordlastset -gt '$filter'" `
                    -server "$dc"`
                    -properties name,CanonicalName,passwordlastset,OperatingSystem `
                    | Select name,CanonicalName,passwordlastset,OperatingSystem  `
                    | ConvertTo-Csv -NoTypeInformation `
                    | Select-Object -Skip 1 `
                    | Out-File "$tempfile" 

        #импортируем временный файл с другими заголовками, 
        $tmp = Import-Csv -Header Name,Domain,Date,OS $tempfile

        # из поля с указанием домена и OU компьютера вырезаем все кроме домена
        # для удобства фильтрации по домену например в экселе
        $tmp | ForEach-Object {$_.Domain = [regex]::replace($_.Domain,'/.*','') }

        # выбираем добавлять ли заголовок во временный файл. 
        # Добавляем, если результирующий файл еще не был создан и, следовательно
        # это первый обработанный домен. Записываем временный файл
        if (Test-Path "$resultfile") {
            $tmp | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File "$tempfile" 
            } else {
            $tmp | ConvertTo-Csv -NoTypeInformation |  Out-File "$tempfile" 
            }

        # Добавляем временный файл в конец результирующего
        [System.IO.File]::ReadAllText("$tempfile") | Out-File "$resultfile" -Append 
        
        # пробегаемся по результирующему файлу, удаляя пустые строки 
        # (опять же важно для экселя, чтобы первую строку сделать фильром)
        [System.IO.File]::ReadAllText("$resultfile")  -replace '\s+\r\n+', "`r`n" |  Out-File "$resultfile"
        Remove-Item "$tempfile"
        }
    }




Remove-Item "$resultfile" 

DoDomain("dc.domain1.local")
DoDomain("dc.domain2.local")
DoDomain("dc.domain3.local")

Важно! На контроллерах доменов должна работать служба Active Directory Web Services.
Для контроллеров на Windows 2003, если данная служба не установлена, потребуется установить NET Framework 3.5 SP1, а также патч на фреймворк KB969166 (у микрософта доступен только через общение с саппортом так что выкладываю архив), ну и саму службу

2016-05-21

proxmox: shrink lxc container

Proxmox 4.2
Container: 101
Storage: iSCSI with group "iscsi-lvm-group"
Current size: 20G
Needed size: 10G
  1. BACKUP FIRST!
  2. Stop VM
    lcx-stop -n 101
  3. Check disk
    e2fsck -f  /dev/iscsi-lvm-group/vm-101-disk-1
    (
    use tune2fs if "MMP check failed" error, and e2fsck again)
  4. Do your disk little smaller that you want
    resize2fs /dev/iscsi-lvm-group/vm-101-disk-1 9G
  5. Reduce LVM size to what you want
    lvreduce -L 10G /dev/iscsi-lvm-group/vm-101-disk-1
  6. Resize your disk without size parameter
    resize2fs /dev/iscsi-lvm-group/vm-101-disk-1
  7. Check disk
    e2fsck -f  /dev/iscsi-lvm-group/vm-101-disk-1
    (
    use tune2fs if "MMP check failed" error, and e2fsck again)
  8. Edit disk size in container config
    vi /etc/pve/lxc/101.conf
  9. Run the container

2016-05-12

Поиск левого DHCP для самых маленьких

Маленькая детективная история, которая началась с того, что у клиентов начали появляться трудности с доступом к сетевым ресурсам. Выяснилось что они получают IP-адреса с какого-от левого источника (да, это можно предотвратить, но что не сделано - то не сделано).

Что делаем:

  1. на компе, получившим левый адрес, делаем
    ipconfig /all

    смотрим IP DHCP-сервера: в моем случае 192.168.1.1, он же шлюз - типичная ситуация "кто-то умный принес домашний роутер".
    (Для полноты картины качаем Rogue Checker - утилиту для поиска DHCP-серверов в сети. Полезно для мониторинга ситуации со стороны)
  2. Имея комп с левый адресом пингуем IP DHCP-сервера
    ping 192.168.1.1
    и дальше
    arp -a
    последняя команда выдаст MAC-адрес DHCP-сервера
  3. ищем MAC-адрес на свичах, выясняем порт на котором висит "злоумышленник" (я для этого использую богоподобный скрипт port_report.py)
  4. Если порт подписан и понятно где находится розетка - идем и рассказываем человеку о безопасности на предприятии. Если розетка не подписана - смотрим какие мак-адреса висят на том же порту, если таковые есть - это скорее всего какое-то оборудование предприятия - компы, ip-телефоны и т.д., которые были воткнуты в принесенный роутер.
В моем случае человек принес роутер чтобы к одной розетке подключить несколько компов. При этом использовал его как хаб, таким образом клиентский порт роутера оказался соединен с нашей локалкой, что и вызвало проблемы. К счастью, по засветившимся на порту мак-адресам мы быстро установили какому оборудованию принадлежат маки (спасибо автоматической базе инвентаризации) и на ком это оборудование числится.


2016-05-07

Исправление крестовины (D-Pad) геймпада Retro-bit SNES Gamepad


Для удобства игры на старой Super Famicom прикупил себе пару беспроводных геймпадов Retro-bit (ebay). Нареканий в части беспроводной работы к ним не возникло, но выяснилось, что крестовина (aka directional pad, aka D-Pad) у них самая премерзкая - при нажатии одного из направлений практически неизбежно прожимается одно из смежных. К счастью это оказалось несложно исправить.


2016-04-07

Как убить лишние копии процесса в windows

Потребовалось сотворить костыль, убивающий незавершающиеся копии процесса, на всякий случай оставив последние из запущенных. В моем случае это костыль, но в целом кому-то может и пригодиться, так что выкладываю рецепт на powershell:

$processName = "php-cgi"
$survivorsCount = 6

$processList = Get-Process -Name $processName
$doomedCount = $processList.Count

if ($doomedCount  -gt $survivorsCount) {
  $bulletCount = $doomedCount - $survivorsCount
  $bulletCount
  $killkillkill = $processList | Select-Object -first $bulletCount | Stop-Process -force
}
Сгенерировано: hilite.me

2016-04-01

Простейший пингер с логированием под bash

Собственно пингуем, ведем лог и это все что надо )

#!/bin/bash

if [[ -z "$1" ]]; then
    echo "Please enter IP, ex.: $0 127.0.0.1"
    exit
else
    echo "Logfile: /tmp/ping_$1"
fi

while true
do
    
    while ! ping -c1 $1 &>/dev/null
 do echo "Ping Fail - `date`" >> /tmp/ping_$1
    done

    echo "Host Found - `date`" >> /tmp/ping_$1
    sleep 1
done

2016-03-08

Как по порядку переименовать файлы, скачанные wget по списку

Решил скачать комикс из вконтакта, полученный список (listfile.txt) для скачивания имел примерно такой вид:

https://pp.vk.me/c307313/v307313650/1e94/bj560KCwYY4.jpg
https://pp.vk.me/c307313/v307313650/1692/yFPMOuXHLvw.jpg
...
https://pp.vk.me/c307313/v307313650/1e7b/d-MXTKSZr34.jpg
https://pp.vk.me/c307313/v307313650/1e84/Oj_DhH9Fbvw.jpg

Собственно, после скачивания wget'ом (wget -i listfile.txt) я получил неудобоваримый набор файлов с рандомными названиями, и мне захотелось переименовать их в вид 001.jpg 002.jpg, согласно порядку, в котором они были в исходном файле. Хорошенько попотев, получил такой однострочник:

cat ./listfile.txt | tr -d  '\r' |  while read url; do n=$((n+1)); file="`echo $url| sed -e 's/.*\///'`"; newfile="`printf \"%03d\" $n`";  mv  ./"$file"  ./"$newfile".jpg ;  done


Или, для читаемости, так:

cat ./listfile.txt | tr -d  '\r' |  while read url; 
do 
    n=$((n+1)); 
    file="`echo $url| sed -e 's/.*\///'`"; 
    newfile="`printf \"%03d\" $n`";  
    mv  ./"$file"  ./"$newfile".jpg ;  
done

Немного пояснений:

tr -d  '\r'  - исходный файл у меня был виндовосформирован, поэтому в каждой строке там был лишний символ перевода коретки, который мешался

while read url - стандартный цикл построчного чтения файла в переменную url

n=$((n+1)) - переменная n для нового имени файлов, которая будет прирастать на единицу

file="`echo $url| sed -e 's/.*\///'`" - старое имя файла, которое получается путем обрезания левой части ссылки

newfile="`printf \"%03d\" $n`" - новое имя файла, которое состоит из переменной n сформатированной в трехсимвольное отображение (1,2,3 -> 001, 002, 003).

2016-02-15

Не подключаются мобильные устройства по MTP

Если после установки антивируса касперского к компьютеру перестали подключаться смартфоны, стоит проверить ветку реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{EEC5AD98-8080-425F-922A-DABF3DE3F69A}

Если в ней есть ключи UpperFilters или LowerFilters - удалите их. Массово это можно сделать, проимпортировав политиками reg-файл:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{EEC5AD98-8080-425F-922A-DABF3DE3F69A}]
"UpperFilters"=-
"LowerFilters"=-


Также в интернете встречаются упоминания о ветках:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000} - наличие фильтров тут может привести к неработоспособности всех юсб-устройств,


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318} - ветка, отвечающая за CD-ROM'ы


2016-01-20

Яндекс.Сервер 2010.09: Руководство по установке и эксплуатации

Удивительно, но в инете решительно не гуглится этот документ: yandex-server-manual.pdf
(скачать Яндекс.Сервер 2010.09 win+lin можно по ссылке)

2016-01-14

Логирование изменений конфигурации Cisco Catalyst на syslog

via @ https://networklessons.com/network-management/configuration-change-notification-logging/
! Находясь в режиме конфигурации
Router(config)#archive
Router(config-archive)#log config
! Включаем логирование
Router(config-archive-log-cfg)#logging enable
! Устанавливаем размер локального лога
Router(config-archive-log-cfg)#logging size 500
! Запрещаем сохранять пароли
Router(config-archive-log-cfg)#hidekeys
! Включаем перенаправление на сислог
Router(config-archive-log-cfg)#notify syslog
! Просматриваем локальный лог
Router#show archive log config all

2015-12-01

Zabbix и мониторинг состояния баз Exchange 2010 (с использованием Low Level Discovery)

В результате аварийного отключения сервера, или еще каких-либо непредвиденных обстоятельств, реплики баз данных Exchange могут быть рассинхронизированы. Об этом мы узнали, когда место на рабочем сервере оказалось почти полностью съедено логами. К счастью, о нехватке места мы были предупреждены заббиксом, но встал вопрос о мониторинге состояния баз.

В этом посте я расскажу как решил задачу, а также постараюсь доступно рассказать как работает Zabbix Low Level Discovery (LLD), так как интернет не особо пестрит примерами самостоятельных решений для этого функционала заббикса.

2015-11-26

Конвертирование объектов PowerShell 2 в JSON

В инете распространены скрипты для PowerShell 2, использующие фреймворк. Однако этот способ у меня не заработал  - выдавал ошибки типа "Invalid JSON primitive: Microsoft.Exchange.Management.SystemConfigurationTasks.DatabaseCopyStatusEntry."

Для таких страдальцев как я, нашелся отличный работающий скрипт конвертации: https://gist.github.com/mdnmdn/6936714

Скачать архивом (актуальность на момент поста): ConvertTo-JSON.zip

2015-11-19

[решено] Падение производительности Veeam Backup на больших серверах

Долгое время не мог понять, почему Veeam Backup & Replication (6.5 на Win2008/R2) постепенно теряет производительность при бэкапе больших (>2TB) виртуальных машин. Скорость копирования падала с >100MB/c на старте задания до 1-2 MB спустя несколько часов.
Оказалось, дело в неправильной работе дискового кэша в Win 2008/R2 (говорят, в 2012м сервере это поправили, но я не проверял) - он раздувается до неприличных объемов и все начинает тупить и тормозить вплоть до остановки задания.
Для решения этой проблемы я использовал утилиту cacheset от Марка Руссиновича. Она позволяет выставить минимальный и максимальный размеры кэша, при этом раздутый кэш сдувается до установленных лимитов. Однако, как выяснилось, эти лимиты через какое-то время снова сбрасываются, поэтому данную утилиту я запихал в шедулер:

c:\bin\cacheset 1024 100000
где 1024 - минимальный размер кэша в KB, 100000 - максимальный.

Запуск этой команды раз в час обеспечил решение проблемы.

Скачать: с офиц. сайта, отсюда

2015-09-19

Настройка многомониторной конфигурации с выводом звука на ТВ/ресивер

Сегодня опишу свою конфигурацию игрового компа, а вернее - схему подключения с тремя мониторами и двумя звуковыми картами.

2015-07-17

Как убить процесс по имени в винде

С помощью powershell - легко и просто:

Get-Process -Name имя_процесса | Stop-Process -force

имя_процесса - может содержать маску,
-force - предотвращает появление диалога с подтверждением

2015-06-27

EncFSMP: монтирование EncFS под windows

Это просто праздник какой-то! Кого-то достала невозможность использования EncFS (виртуальная файловая система с шифрованием данных) под виндой и появилась софтина, свободная как птица и РАБОЧАЯ, МАТЬ ЕЕ!!! Качать тут: EncFSMP

2015-06-03

Как скопировать файлы с атрибутами безопасности в Windows

Для того чтобы скопировать файлы со всеми NTFS-атрибутами (при миграции файлсервера, например), можно воспользоваться утилитой robocopy, входящей в Windows 2003 Resource Kit Tools (входит в состав w2k8_R2) Примеры использования:

robocopy C:\folder D:\folder /COPYALL /E /R:1000000000

Или

robocopy \\server\share C:\folder /COPYALL /E /R:1000000000 /Z

/COPYALL - копировать все атрибуты
/E - рекурсивно
/R:1000000000 - миллион повторных попыток копирования для заблокированных файлов (значение по умолчанию, используется при неуказании ключа). После каждой попытки таймаут 30 секунд!
/Z - использовать журнал возобновления на случай потери сетевого соединения 

Справка по синтаксису: PDF, MSDN.


2015-05-25

blogger.сom ч.2: как изменить стиль картинок?

Этот вопрос парил меня реально многие годы =) В блоггере изображения вставляются неким скриптом, при этом можно довольно легко и просто выбрать один из четырех размеров (мелкий, средний, большой, оригинальный) и выравнивание - по левому или правому краям, или по центру. Вопрос был в том, как изменить эти, назовем их "пресеты", чтобы, к примеру, изображение можно было в один клик сделать в ширину блога.

Посмотрим как выглядят картинки, вставленные в мой основной блог.


Как можно видеть, изображение (в данном случае среднего размера) имеет по мимо всего прочего белую окантовку (сама картинка в оригинале кончается черной рамкой). Разумеется мне не пришло бы в голову растягивать во всю ширину именно эту - вертикальную картинку, но для горизонтальных иногда хочется это сделать. Убрав, заодно, ненужную белую рамку.

Собственно, что нужно сделать. Так как стили, применяемые на картинки, зависят от темы, то универсального решения, которое можно было бы скопипастить - нет.  Однако его довольно просто получить, используя инструменты разработчика, которые сейчас есть в любом уважающем себя браузере. Например в хроме, который использую я.

Откроем пост с картинкой. Если вы юзаете хром, то достаточно тыкнуть правой мышкой на картинку и выбрать "просмотр кода элемента", чтобы открыть такое окно (кликабельно):



Из полезного мы видим в первую очередь набор применяемых стилей справа. Из критичного в данном случае - padding и box-shadow, которые реализуют белую рамку и эффект тени. Эти стили нужно переназначить. Второе полезное - кусочек  width="289" в самом коде страницы. Это ширина, которая устанавливается при выборе средней ширины картинки при ее вставке. Скажу что для большого размера эта ширина равна 640, и именно ее я менял.

Собственно теперь мой стиль:


.post-body img[width="640"] {
  padding: 0px!important;
  box-shadow: 0px 0px 0px rgba(0, 0, 0, .5)!important;
  width: 710px!important;
  height: auto!important;
  position: relative;
  left: -34px;
}

Поясню. Первая строка обозначает элемент который мы будем менять - это тег с классом "post_body" (его можно увидеть при исследовании стилей) и содержащий атрибут width="640". То есть все стили, которые мы будем применять, будут распространяться только на картинки, для которых в редакторе, при вставке, мы выберем большой размер. 
(Фактически мы таким образом можем задать аж 3 абсолютно разных стиля, "забиндив" их на 3 "пресетовых" размера.)

Дальше  мы меняем свойство padding - убирая внешние отступы от картинки и с ними - белую рамку.
Еще дальше мы убираем тень (box-shadow), выставляя ее значения в нули.
Параметр width - ширина, которая равна ширине моей колонки.
height: auto - высота устанавливается автоматически, так чтобы картинка не меняя пропорций.
position: relative - выставляем относительное позиционирование.... тут я приторможу и поясню...

Штука в том, что если посмотреть на мой бложик, на его центральную колонку, в котором расположены посты, то можно увидеть, что текст не прилегает вплотную к краям этой области. Иными словами для центральной области задан отступ, и если просто взять картинку, отключить ее отступы и выставить ширину равную ширине "постовой"! области блога, то картинка "съедет" вправо на ширину общего отступа колонки. Конечно можно убрать этот отступ вовсе, но тогда левый край текста будет также прилегать к границе колонки, что будет выглядеть убого. Поэтому для картинок и только для них нужно задать относительное смещение, и первый шаг для этого - параметр position: relative. А дальше добавляем...

left: -34px - методом проб и ошибок выясненное значение, при котором картинка ширины бложика ложится ровно по краям колонки.

Замечу, что в стиле я добавляю параметр !important, чтобы стиль перекрыл дефолтно заданные значения (вроде это необходимо только для параметров ширины и высоты, но другим параметров от этого дополнения хуже не будет)

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

2015-05-23

blogger.com ч.1: меняем оформление цитат

Блог в котором я живу
называется "стили говно, 2 года править"
В общем есть пара триксов, на тему "как заставить блоггер ком выглядить не так стремно", и для начала мне захотелось исправить выделение цитат. На просторах инета я нашел отличный рецепт, результат работы которого можно видеть выше.

Переходим в настройки блога, выбираем "шаблон" и тыкаем кнопку "настроить":



Дальше "Дополнительно" и "добавить CSS":



Добавляем в окно вот этот текст:

.tr_bq {
  border-left: 4px solid #2288bb;
  margin: 1.5em 10px;
  padding: 0.5em 10px;
  quotes: "\201C""\201D""\2018""\2019";
}
.tr_bq:before {
  color: #2288bb;
  content: open-quote;
  font-size: 4em;
  line-height: 0.1em;
  margin-right: 0.25em;
  vertical-align: -0.4em;
}

.tr_bq:after {
  color: #2288bb;
  content: close-quote;
  font-size: 4em;
  line-height: 0.1em;
  margin-left: 0.25em;
  vertical-align: -0.4em;
}


Можно поиграться с цветом:
- строчка "border-left: 4px solid #2288bb;" - это левая полоска, ее толщина, стиль и цвет
- строчки "color: #2288bb;" в последующих двух разделах - это цвета открывающих и закрывающих кавычек, их лучше менять вместе =)