Последние записи.

Сбор счетчиков производительности с удаленных хостов

При проведении аудита без снятия показаний счетчиков производительности просто не обойтись. Если серверов немного, скажем 10-20, то безусловно можно собрать данные «руками», а если их 100, 200 или больше?

Как говориться в фильме «Формула любви» – «Тут без помощника не обойтись…»

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

1. Для начала формируем текстовый файл с необходимыми счетчиками, например для того что бы получить все счетчики от PhysicalDisk необходимо выполнить следующую команду:

typeperf -qx PhysicalDisk -o counters.txt

Аналогичным образом формируется набор счетчиков для любой другой группы.

2. Формируем любым удобным вам методом файл со списком хостов которые необходимо тестировать.
hostlist.txt

host1
host2
host3
...

3. Скопирвать-вставить скрипт приведенный ниже в файл collect-perf.cmd. Для его работы нам понадобятся:

  • Привилегированная учетная запись на удаленном хосте
  • утилита psexec
@echo off
for /f "tokens=1 delims=" %%a, in (hostlist.txt) do (
  copy counters.txt \\%%a\c$\TEMP
  psexec \\%%a -d cmd.exe /c "c:\Windows\system32\typeperf.exe -cf c:\temp\counters.txt -si 30 -sc 100 -f TSV -o c:\temp\perfmon_report.txt"
)

Результатом работы приведенного скрипта будет файл c:\temp\perfmon_report.txt в котором будут собраны данные по указанным вами счетчикам со следующими характеристиками.

  1. интервал – 30 секунд
  2. количество экземпляров – 100

4. После того как данные сформируются собрать их можно так.

@echo off
for /f "tokens=1 delims=" %%a, in (hostlist.txt) do (
  copy \\%%a\c$\TEMP\perfmon_report.txt %%a__report.txt
)

Шел я утром на работу…

Дорожная заметка о том как надо ремонтировать дороги.

Мы строили, стоили и наконец…

Приехали.

Кадр 1
Кадр 2

Обновление до Exchange 2007 SP3

Exchange 2007 Logo

Закончил обновление почтовой системы до SP3. Традиционная записка «на полях».

Установка SP3 для Exchange 2007 происходит в следующем порядке.
* Качаем сервис-пак отсюда, описание тут.
* Отключение Forefront for Exchange (если установлено)
В командной строке переходим в папку установки Forefront for Exchange.

cd C:\Program Files (x86)\Microsoft Forefront Security\Exchange Server
FSCUtility.exe /disable

Проверяем статус

FSCUtility.exe /status

* Установка обновления
Транспортные узлы обновляются без особых проблем, но предварительно необходимо отключить такие службы как MOM или Operation Management Health.

У нас развернут кластер единой копии и о нем хочется сказать отдельно. Порядок его обновления:
Шаг №1
Перемещаем кластер на второй узел.
Обновляем файлы пассивного узла.

Шаг №2
* Перемещаем кластер на обновлённый узел

Шаг №3
* Обновляем CMS
* Обновляем файлы оставшегося узла

Теперь по пунктам.

На пассивном узле обновление запускается командой

setup /m:Upgrade

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

Stop-ClusteredMailboxServer –Identity CMS-Server –StopReason "Upgrade to SP3"

Перемещаем кластер на обновлённый узёл:

Move-ClusteredMailboxServer –Identity CSM-Server –TargetMashine NODE-2 –MoveComment "Upgrade to SP3" –Confirm:$false

Далее на узле (напомню что на нем не должно быть кластерных ресурсов) запускаем обновление кластера:

setup.com /UpgradeCMS

Необходимо помнить что кластер выключен.
Осталось обновить только один узел:

setup /m:Upgrade

По завершению процесса перезагружаем его.

* Включение Forefront for Exchange (если установлено)
В командной строке переходим в папку установки Forefront for Exchange.

cd C:\Program Files (x86)\Microsoft Forefront Security\Exchange Server
FSCUtility.exe /enable

Проверяем статус:

FSCUtility.exe /status

Производим рестарт сервисов Exchange.

Вроде как ничего не забыл.
Комментарии приветствуются.

Поиск сообщений больше чем…

Заметка на полях.

В случае если требуется найти «вредителей» создающих большой почтовый траффик, например медиа файлы или просто мусор. Можно воспользоваться магической формулой на powershell.

Ищем сообщения больше чем 10 Мб на определенном сервере за месяц от 01-06 до 01-07 на одном сервере и пишем результаты в CSV-файл.

get-messagetrackinglog -server "exhub-01" -eventid "receive" -start "01/06/2010" -end "01/07/2010" –resultsize unlimited |
select-object sender,totalbytes | where {$_.totalbytes -gt "10485760"} |
sort-object totalbytes -descending | export-csv -Encoding "Unicode" c:\large-messages.csv

Или ищем все сообщения по всем транспортным серверам

get-exchangeserver | where {$_.ishubtransportserver -eq "true"} |
get-messagetrackinglog -eventid "receive" -start "01/06/2010" -end "01/07/2010" –resultsize unlimited |
select-object sender,totalbytes | where {$_.totalbytes -gt "10485760"} |
sort-object totalbytes -descending | export-csv -Encoding "Unicode" c:\large-messages.csv

Получение списка установленного ПО

Powershell Logo

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

Логика работы скрипта проста – подпихиваем файл hosts.txt, он в начале пытается пинговать хост, в случае успеха добавляет имя хоста в файл online.txt, в обратном случае в файл offline.txt.

Таким образом в файле offline.txt получается набор хостов которые не были протестированы по тем или иным причинам.

# get-Applications.ps1
# version 0.4

$erroractionpreference = "SilentlyContinue"

$hostFile = "hosts.txt"
$OnlineFile = "online.txt"
$OfflineFile = "offline.txt"

# Create files
New-Item -ItemType File $OnlineFile -Force
New-Item -ItemType File $OfflineFile -Force

# ping hosts
$colComputers = get-content $hostFile

foreach ($strComputer in $colComputers) {
  $ping = new-object System.Net.NetworkInformation.Ping
  $Reply = $ping.send($strComputer)
  if ($Reply.status –eq "Success") {
  # для русской версии необходимо заменить "Success" на "Ответ от"
  #if ($Reply.status –eq "Ответ от") {
    Add-Content $OnlineFile $strComputer
  } else {
    Add-Content $OfflineFile $strComputer
  }
$Reply = ""
}

$hosts = Get-Content $OnlineFile

# Создаем Excel книгу
$Excel = New-Object -Com Excel.Application
$Excel.visible = $True

# Начина
$Excel = $Excel.Workbooks.Add()
$wSheet = $Excel.Worksheets.Item(1)
$wSheet.Cells.item(1,1) = "HostName"
$wSheet.Cells.item(1,2) = "Verison"
$wSheet.Cells.Item(1,3) = "Publisher"
$wSheet.Cells.Item(1,4) = "UninstallString"
$wSheet.Cells.Item(1,5) = "Name"

$WorkBook = $wSheet.UsedRange
$WorkBook.Interior.ColorIndex = 8
$WorkBook.Font.ColorIndex = 11
$WorkBook.Font.Bold = $True

$intRow = 1
foreach ($remoteHost in $hosts) {
  $uninstallkey="Software\Microsoft\Windows\CurrentVersion\Uninstall"
  $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  $remotebase=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$remoteHost)

  $regkey=$remotebase.OpenSubKey($uninstallkey)

  $regkey.GetSubKeyNames() | foreach {
    $intRow++
    $wSheet.Cells.Item($intRow,1) = $remoteHost
    $wSheet.Cells.Item($intRow,2) = $remotebase.OpenSubKey("$uninstallkey\$_").GetValue("DisplayVersion")
    $wSheet.Cells.Item($intRow,3) = $remotebase.OpenSubKey("$uninstallkey\$_").GetValue("Publisher")
    $wSheet.Cells.Item($intRow,4) = $remotebase.OpenSubKey("$uninstallkey\$_").GetValue("UninstallString")
    $wSheet.Cells.Item($intRow,5) = $remotebase.OpenSubKey("$uninstallkey\$_").GetValue("DisplayName")
  }
}

$WorkBook.EntireColumn.AutoFit()