admin

admin

Фев 032016
 

Итак имеем: новый установленный сервер с удаленным доступом по ssh. В на сервере установлена CentOS 6.7, так же имеем 4 HDD по 3Tb.
Необходимо настроить два дисковых массива RAID1 без переустановки системы. Поехали.
Continue reading »

 Posted by at 23:12
Май 142015
 

Для настройки мониторинга FortiGate через Zabbix будем использовать протокол SNMP. В моем случае модель FortiWiFi 60D. Сервер Zabbix-а расположен вне локальной сети, по большому счету это не важно.

В начале настраиваем сам FortiWiFi.

Continue reading »

 Posted by at 14:43

Анализируем журнал Security

 PowerShell, Windows  Комментарии выключены
Апр 092013
 

В предыдущей статье мы рассмотрели анализ журнала System на предмет ошибок. Сегодня мы рассмотрим журнал Security на предмет подключения к нашему серверу через RDP. Нам необходимо узнать кто, когда и откуда подключался к нашему серверу терминалов. Все наши сервера работают на Windows Server 2008 R2. Ниже я привожу часть скрипта, который легко можно добавить в основной, который описан в соседней статье.

$dtNow = Get-Date
$dtPrev = $dtNow.AddHours(-1)
$login = @() # Массив подключения пользователя
$logout = @() # Массив отключения пользователя
 
Get-EventLog -LogName security | Where -FilterScript {
($_.TimeWritten -le $dtNow -and $_.TimeWritten -ge $dtPrev -and $_.EventID -eq 4624 -and $_.ReplacementStrings[8] -eq 10)} | 
ForEach-Object {
	$login += New-Object PSObject -Property @{
		ComputerName = $env:ComputerName
		TimeGenerated = $_.TimeGenerated
		User = $_.ReplacementStrings[5]
		Ip = $_.ReplacementStrings[18]
		SessionID = $_.ReplacementStrings[7]
    }
}
 
Get-EventLog -LogName security | Where -FilterScript {
($_.TimeWritten -le $dtNow -and $_.TimeWritten -ge $dtPrev -and $_.EventID -eq 4634 -and $_.ReplacementStrings[4] -eq 10)} | 
 
ForEach-Object {
	$logout += New-Object PSObject -Property @{
		ComputerName = $env:ComputerName
		TimeGenerated = $_.TimeGenerated
		User = $_.ReplacementStrings[1]
		SessionID = $_.ReplacementStrings[3]
    }
}
$login
$logout
 Posted by at 12:03
Май 112012
 
PowerShell

Продолжаю цикл статей по работе с удаленными серверами. На этот раз речь пойдет о чтении журналов.
Признайтесь, как часто вы просматриваете события журналов в windows? Всякий раз забываем это делать. А что если нам на почту будут приходить письма с “ошибками” в журнале? Ведь прочитать почту всегда легче, чем заходить на сервер и читать там. Тем более, что если серверов у нас много. На помощь может прийти PowerShell. У него есть замечательная команда

Get-EventLog

Вот с ее помощью и будем анализировать журналы.
Предлагаю готовый скрипт, который необходимо повесить в шедуллер и запускать с интервалом раз в час ну или раз в сутки, кому как нравиться. Все пояснения в комментариях. Файл “server_all.txt” должен иметь структуру, как я описывал в предыдущей статье.

<# 
Скрипт для сбора "Ошибок" и "Предупреждений" из журнала "System" на удаленных серверах, указанных в файле $srv
за последний час, и отправка результата на почту admin@mycompany.com
-------------------
настройки:
см: AddHours(-1) - время за какой промежуток собирать
см: -LogName "System" -EntryType "Error" , "Warning" - журнал, и типы сообщений
настройки почты - см. в самом конце.
#>
 
cls
 
$srv = Get-Content "c:\[path]\server_all.txt"
 
$dt = Get-Date
 
$outHTML = ""
$outHTML += '<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">'
$outHTML += '<html>'
$outHTML += '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'
$outHTML += '<h2 align="center">Отчет за ' + $dt.ToString('dd/MM/yyyy HH:mm') + '</h2>'
$outHTML += '<table width="100%" border="1" cellspacing="2" cellpadding="2"  align="center">'
$outHTML += '<tr><th>№</th><th>Date</th><th>Computer</th><th>Type</th><th>EventID</th><th>Source</th><th>User</th><th>Message</th></tr>'
 
$ok = 0
 
#Забиваем массивы с данными
foreach ($var in $srv) {
 
	# проверяем на комментарий, если есть в строке #- значит это комент. или пустую строку
	if (($var -notmatch "#") -and ($var.Length -ne 0)){
 
		$out = $var -split ";"
 
		$password = $out[1] | ConvertTo-SecureString 
		$cred = New-Object System.Management.Automation.PSCredential $out[0],$password
 
		$s = $out[2] -split ","
		$session = New-PSSession -ComputerName $s -Credential $cred
 
		# выполняем запрос
		Invoke-Command -Session $session {$dtNow = Get-Date}
		Invoke-Command -Session $session {$dtPrev = $dtNow.AddHours(-1)}
		Invoke-Command -Session $session {$EventLog = get-eventlog -LogName "System" -EntryType "Error" , "Warning"}
		$result = Invoke-Command -Session $session {$EventLog | Where-Object {$_.TimeWritten -le $dtNow -and $_.TimeWritten -ge $dtPrev} }
 
		# Обработаем результат
		if ($result.Count -ge 0){
			$ok = 1
 
			for ($i=0; $i -lt $result.Count; $i++){
 
				$outHTML += '<tr align="left">'
				$outHTML += '<td>' + $i + '</td>'
				$outHTML += '<td>' + $result.SyncRoot[$i].TimeWritten + '&nbsp;</td>'
				$outHTML += '<td>' + $result.SyncRoot[$i].PSComputerName + '&nbsp;</td>'
 
				if ($result.SyncRoot[$i].EntryType -eq 'Error'){
					$outHTML += '<td bgcolor="#FF0000"><b>' + $result.SyncRoot[$i].EntryType + '</b>&nbsp;</td>'				
				}else{
					$outHTML += '<td bgcolor="#FFFF00"><b>' + $result.SyncRoot[$i].EntryType + '</b>&nbsp;</td>'				
				}
				$outHTML += '<td>' + $result.SyncRoot[$i].EventID + '&nbsp;</td>'
				$outHTML += '<td>' + $result.SyncRoot[$i].Source + '&nbsp;</td>'
				$outHTML += '<td>' + $result.SyncRoot[$i].UserName + '&nbsp;</td>'
				$outHTML += '<td>' + $result.SyncRoot[$i].Message + '&nbsp;</td>'
				$outHTML += '</tr>'
			}
		}
 
		#Выходим из сессии.
		Remove-PSSession -Session $session
	}
}
 
$outHTML += '</table></html>'
 
if ($ok -eq 1){
	# отправляем почту
	$SMTPClient          = new-object System.Net.Mail.SMTPClient 
	$Msg                 = new-object System.Net.Mail.MailMessage 
	$Msg.From            = "robot@mycompany.com" 
	$Msg.Subject         = '[Event Log] ' + $dt.ToString('dd/MM/yyyy HH:mm')
	$Msg.IsBodyHTML      = 1 
	$Msg.BodyEncoding    = [System.Text.Encoding]::UTF8
	$Msg.Body            = $outHTML
	$SMTPClient.Host     = 'host.mycompany.com' 
	$SMTPClient.Port     = 25 
	$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("robot@mycompany.com", "Pa$SWorD")
	$Msg.To.Add('admin@mycompany.com') 
	$SMTPClient.Send($Msg) 
}

В итоге на почту будет приходить письмо, примерно такого содержания:

Отчет за 11.05.2012 13:00

Date Computer Type EventID Source User Message
0 05/11/2012 13:00:04  server10  Error  56  TermDD    Описание ошибки.
1 05/11/2012 13:00:15  server3 Error  56  TermDD    Описание ошибки.

 Posted by at 18:13

Как установить 1С ver 7.7 на Windows 7/ Vista

 , Windows  Комментарии выключены
Апр 062012
 
1c

Многие, наверное, сталкивались с проблемой установки конфигураций для платформы 1С 7.7 под Windows 7 или Windows Vista … Есть масса способов распаковать дистрибутив конфигурации 7.7 под этими ОС, XP Mode, VMWare с WinXP в ней, “недокументированный” метод с периодическим запуском Центра Управления Сетями и Общим Доступом во время установки конфигурации. В данной статье представлен способ позволяющий автоматизировать этот процесс, т.е. извлечь все файлы из дистрибутива конфигурации в один клик, как будто мы его установили.

Порядок действий следующий – помещаем папки DISKx и файлы скрипта в одну папку, т.е. так как показано на картинке:
После чего запускаем extract_1c.cmd. Когда скрипт отработает автоматически создастся папка UNP, где и будет распакованная конфигурация.
Оригинал статьи

 Posted by at 16:03
Фев 292012
 
PowerShell

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

$credential=Get-Credential
$credential.Password | ConvertFrom-SecureString

или

$out = "c:\password.txt"
$credential=Get-Credential
$credential.Password | ConvertFrom-SecureString | Add-Content $out

при выполнении этих двух скриптов (необходимо ввести в открывшимся окне логин и пароль) мы получим некую строку или на экран (первый скрипт) или в файл (второй скрипт). Данная строка будет не что иной как зашифрованный пароль, который вы ввели. Вот этот самый пароль мы и будем использовать далее. Теперь создадим файл и назовем его  server_all.txt с таким содержанием:

Administrator;01000000d08c9ddf011.....7adb2;server1,server2
Administrator;01000000d08c9ddf011.....8fa35;server3,server7,server10,srv2
Administrator;01000000d08c9ddf011.....dea73;srv1

В этом файле я “обрезал” пароль, т.к. приводить его в полном варианте нет смысла. Заметьте, что у сервера с одинаковым паролем я объединил в одну строку. Это сделано умышленно для того, чтобы можно было выполнять команды параллельно на этих серверах. Далее пишем скрипт, который читает файл и выполняет одинаковые команды на этих серверах.

cls
 
$srv = Get-Content "x:\[path]\server_all.txt";
 
# Скрипт, который будем выполнять на удаленных серверах
$script_txt = "Get-Process exp*"
# Переводим его в "ScriptBlock"
$script = $executioncontext.invokecommand.NewScriptBlock($script_txt)
 
#Забиваем массивы с данными
foreach ($var in $srv) {
 
	# проверяем на комментарий, если есть в строке #- значит это коментарий.
	# или пустую строку
	if (($var -notmatch "#") -and ($var.Length -ne 0)){
 
		# разделим строку
		$tmp = $var -split ";"
 
		# преобразуем пароль
		$pass = $tmp[1] | ConvertTo-SecureString
		$cred = New-Object System.Management.Automation.PSCredential $tmp[0],$pass
 
		$s = $tmp[2] -split ","
 
		# создаем сессию
		$session = New-PSSession -ComputerName $s -Credential $cred
 
		# выполняем запрос (найдем процесс "explorer")
		$result = Invoke-Command -Session $session -ScriptBlock $script
 
		# Обработаем результат
		for ($i=0; $i -lt $result.Count; $i++){
			Write-Host $result[$i].PSComputerName,"`t",$result[$i].Name
		}
 
		#Выходим из сессии.
		Remove-PSSession -Session $session
 
	}
}

Результат работы скрипта будет следующий:

server1   explorer
server2   explorer
server3   explorer
server7   explorer
server10   explorer
srv2   explorer
srv1   explorer

Вот собственно и все.
Единственное на что хотелось бы обратить внимание, так это на то, что если перенести этот скрипт на другой компьютер (или запустить под другой учетной записью), то это работать не будет, т.к. пароли “привязываются” к учетной записи и компьютеру. И в этом есть плюс!