Метка «powershell»

В этой статье я расскажу о создании образа ВМ с Windows Server, его развертывании и создании тестовой среды для работы с Windows Server.

Я часто создаю ВМ с Windows для тестирования различных технологий. Со временем я частично автоматизировал этот процесс и хочу об этом расказать. Эта статья может быть интересна начинающим Windows администраторам. Затронуты будут следующие темы:

  1. Установка и базовая настройка Hyper-V в Windows 10
  2. Создание образа виртуальной машины
  3. Создание виртуальной машины из образа на базе разностного диска

Читать полностью »

В сети есть некоторое количество мануалов о том, как заставить Git работать в PowerShell. В основном все они про PoSh-git. Однако как я не пытался, самолёт не взлетел. Методом научного тыка был обнаружен простой способ завести Git в PS.

Зачем это вообще нужно, ведь есть Git-bash?

Уж не знаю, как вас, но меня просто выворачивает, когда я понимаю, что не могу сделать консоль шире 80 символов.

Читать полностью »

Добрый день! Каждый программист или системный администратор писал скрипты для взаимодействия с другим приложений с помощью технологии com(ole). Пример приведу банальный — работа с MS Office. Сейчас хочу немного поделиться, как это работает в программных продуктах Касперского. На примере будет взят Kaspersky Security Center 10 для корпоративных клиентов. Так же я буду пояснять, в каких случаях это будет использовано. Подключение к com будет осуществлять при помощи powershell 2.

Комплекс Kaspersky Security Center 10 поддерживает технологию «Kaspersky Security Center Automation 10». Эта технология предоставляет администратору сети возможность автоматизировать антивирусную защиту или управлять настройками сервера администрирования с помощью написания скриптов и сценариев запуска.
Читать полностью »

Предисловие

Недавно мой руководитель поставил задачу автоматизировать установку и настройку продукта Powerchute Business Edition на большом количестве серверов, с различным интерфейсом подключения UPS, USB, COM. Ранее занимался автоматизацией установки различного ПО, но с типом конфигурационных файлов которые использует данный продукт столкнулся впервые. Дело все в том что в качестве файла конфигурации задействованы бинарные файлы java, которые может изменять утилита с GIU интерфейсом, она не подходит для решения задачи.
Читать полностью »

В данной статье пойдет речь о сайт коллекциях SharePoint в контексте возможных вариантов начальных url-адресов.
И самое интересное, описан способ создания сайт коллекции на специфическом url на поддомене, отличном от основного приложения.
Итак, всем, кого интересует администрирование SharePoint, и тем, кто не знает курс 70-331 вдоль и поперек, добро пожаловать под кат.
Читать полностью »

image

Одним из наиболее существенных нововведений в Windows Server 2012 лично для меня является новая фича – DHCP Failover. Этот механизм предоставляет возможность балансировки нагрузки и создания избыточности для DHCP сервиса без применения каких-либо кластерных технологий. Но что если, по каким-либо причинам, у вас нет возможности использовать Windows Server 2012 в вашей среде, как и все возможные кластерные технологии? В этом случае к нам на помощь приходит PowerShell. Описанное ниже решение просто, эффективно и основано на следующих компонентах: PowerShell 2.0, встроенная в Windows утилита netsh и стандартный системный планировщик.

Читать полностью »

Всем привет!
Иногда возникает ситуация, когда надо пользователю изменить дату установки пароля в Active Directory. Представляю скрипт. Наверняка многим пригодится.

set-ADUserPswDate.ps1

# Основной скрипт изменения даты установки пароля по файлу или по учетной записи пользователя.
# Автор Лужин Кирилл
# luzhin.kirill@yandex.ru

Add-PSSnapin Quest.ActiveRoles.ADManagement;

$gsFilename = "c:scriptpsset-ADUserPswDate.txt";
$giRows = (Get-Content -LiteralPath $gsFilename).Count;
$giX = 0;
$giMinimumSleep = 218;
$giMaximumSleep = 884;
$gtBeginDay = "08:00:00";
$gtEndDay = "19:00:00";
$today_date = Get-date -Format "dd.MM.yyyy";

function set-password($lsAccount) {
	Set-QADUser $lsAccount -ObjectAttributes @{pwdLastSet=0} | Out-Null;
	Set-QADUser $lsAccount -ObjectAttributes @{pwdLastSet=-1} | Out-Null;
}

function get-password($lsAccount) {
	get-qaduser $lsAccount -IncludedProperties pwdLastSet | % {$lsPwdLastSet = $_.pwdLastSet;}
	$lsPwdLastSet = $lsPwdLastSet.AddHours(3);
	$lsPwdLastSetNorm = get-date -uformat '%d.%m.%Y %R' -Date $lsPwdLastSet;
	return $lsPwdLastSetNorm;
}

function send-eMail($to,$toCc,$text="",$subject="Изменение даты установки пароля",$toBcc="admin3@domain.com") {
	write-host "Кому: $to | тема: $subject | текст: $text";
	$Enc = [Text.Encoding]::UTF8;
	Send-MailMessage -to $to -from "admin1@domain.com" -Bcc $toBcc -Cc $toCc -subject $subject -smtpServer MAIL-SRV -BodyAsHtml $text -Encoding $Enc;
}

function get-sleepRandom($liMinimum, $liMaximum) {
	$giSleep = Get-Random -minimum $liMinimum -maximum $liMaximum
	# $giSleep = 30;
	$giSleepS = $giSleep % 60;
	$giSleepM = $giSleep - $giSleepS;
	$giSleepM = $giSleepM / 60;
	$gdFuture = (Get-Date).AddSeconds($giSleep);
	write-host "Ждем"$giSleepM" минут "$giSleepS" секунд (будет выполнен "$gdFuture")...";
	Start-Sleep -Seconds $giSleep
}

function isAtWork($ltBegin, $ltEnd) {
	$lbAtWork = $FALSE;
	
	$giDayOfWeek = (get-date).DayOfWeek.ToString('d');
		
	if (($giDayOfWeek -gt 0) -and ($giDayOfWeek -lt 6)) {
		$today_date_full = $today_date + " " + $ltBegin;
		$today_date_full2 = $today_date + " " + $ltEnd;
		write-host $today_date_full" - "$today_date_full2;
		$a=[datetime]::parse($today_date_full);
		$c=[datetime]::parse($today_date_full2);
		$b = get-date;
		
		if (($b -gt $a) -and ($b -lt $c)) {
			write-host $b". Время позже 8:00 и раньше 19:00, пользователь может поменять пароль!";
			$lbAtWork = $TRUE;
		} else {
			write-host "Время раньше 8:00 или позже 19:00, пользователь не может поменять пароль.";
		}
	} else {
		write-host "Сегодня выходной, пользователя нет на работе.";
	}
	
	return $lbAtWork;
}

function update-password_wReport($lsAccount) {
	write-host " ";
	write-host "*"$lsAccount;
	$gbAtWork = isAtWork $gtBeginDay $gtEndDay;
	if ($gbAtWork) {
		$gsPwdLastSet = get-password $lsAccount;
		$lsText = "<tr><td style='border:1px solid RGB(200,200,200);'><strong>" + $lsAccount + "</strong></td><td style='border:1px solid RGB(200,200,200);'>" + $gsPwdLastSet + "</td>";
		set-password $lsAccount;
		$gsPwdLastSet = get-password $lsAccount;
		$lsText = $lsText + "<td style='border:1px solid RGB(200,200,200);'>" + $gsPwdLastSet + "</td></tr>";
	} else {
		$lsText = "<tr><td style='border:1px solid RGB(200,200,200);'><strong>" + $lsAccount + "</strong></td><td style='border:1px solid RGB(200,200,200);'>Нет на работе</td><td style='border:1px solid RGB(200,200,200);'></td></tr>";
	}
	return $lsText;
}

$gsText = $gsText + "<table style='border-collapse:collapse; width:500px; font-family:Tahoma,Arial,Calibri;font-size:10pt;'>";
$gsText = $gsText + "<tr><td style='width:40%; border:1px solid RGB(200,200,200); text-align:center;'>Учетная запись</td>";
$gsText = $gsText + "<td style='width:130px; border:1px solid RGB(200,200,200); text-align:center;'>Было</td><td style='width:130px; border:1px solid RGB(200,200,200); text-align:center;'>Стало</td></tr>";

if ($ARGS[0] -ne $Null) {
	$gsText = $gsText + (update-password_wReport $ARGS[0]);
} else {
	Get-Content -LiteralPath $gsFilename | 
		% {
			$gsText = $gsText + (update-password_wReport $_);
			
			$giX = $giX + 1;
			if ($giX -lt $giRows) {
				get-sleepRandom $giMinimumSleep $giMaximumSleep;
			}
		}
}
$gsText = $gsText + "</table>";
if ($ARGS[1] -ne $Null) {
	send-eMail $ARGS[1] "admin1@domain.com" $gsText;
} else {
	send-eMail "admin1@domain.com" "admin2@domain.com" $gsText;
}

Под катом описание, использование и особенности.
Читать полностью »

Управление правами доступа к WMI через Puppet

В качестве предисловия

Основной задачей моей работы является поддержка парка железных и vm хостов — уже под 200 (а приходил было менше 100, эх, время бежит...) Поддерживаю все железо, а также сеть. Также на мне весь мониторинг (используем Opsview — сделан на ядре nagios), аггрегация логов (я внедрил Logstash, обалденное opensource решение за место ну ооочень дорогого Splunk), configuration management (puppet), бекапы, поддержка баз данных и прочих систем тоже на мне (MongoDB, MySQL, Redis, ElasticSearch, etc). В общем — все самое интересное). Стоит отметить что у нас достаточно тонкая грань между поддержкой и разработкой, и разработчики часто говорят что они хотят, а я уже занимаюсь внедрением. Хочется рассказать обо всем что происходит интересного и какие технологии удается использовать. Какие прижились, а какие по каким-то причинам нет.

В свободное от решения проблем время перевожу инфраструктуру на Infrastructure-as-a-code (IaaC), выбрал puppet для этого из-за неоднородности нашей инфраструктуры. В моей сети зоопарк из Windows Server 2008, Windows Server 2012, CentOS 5.5, CentOS 6.4. Ах, да, пару дедушек на 2003 — пора их на пенсию отправлять скоро…

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

Задача

Возникла необходимость автоматизировать конфигурацию WMI на серверах Windows 2008 / 2012. Ключевой необходимостью стало добавление сервисного пользователя (назовем его «domainservice-user») в локальные группы сервера, которые разрешают удаленное использование WMI, а также доступ к Performance Counters, Performance Logs, в общем ко всему что нужно чтобы удаленно мониторить сервер. Сами группы определились достаточно быстро, оставалось найти удобный и быстрый способ это сделать. Также необходимо было дать права пользователю domainservice-user на доступ к корневым неймспейсам WMI. Так же все это должно быть частью общей концепции IaaC, что должно означать как минимум проверку текущего состояния, и пропускать выполнение если пользователь уже добавлен куда нужно в любом варианте присутствия-отсутствия пользователя в группах. Т.е. решение должно быть максимально автоматизированным, а точнее полностью. После небольшого гугления стало ясно что для моего случая нужно, а мне предстояло:
Читать полностью »

Столкнулся с проблемой: при просмотре некоторых роликов на youtube звук идет только на левый спикер. При прослушивании через наушники это доставляет некоторые неудобства. Существует простое и достаточно эффективное решение: вставить коннектор в гнездо не полностью. Но это решение не подошло и пришлось искать другое.

Предлагаю решение проблемы для Windows 7 с использованием powershell и библиотеки для работы со звуком NAudio:
Читать полностью »

В данной планируемой статье из нескольких частей я попытаюсь рассказать о PowerShell и о том, как написать расширение для этой оболочки. Мы применим несколько технологий:

  • вспомним, что огромная часть Windows API реализована COM-объектами;
  • вспомним про C++/CLI, который поможет нам связать unmanaged- и manager-миры;
  • и наконец напишем расширение (.NET Framework 4.5, C#).

И начну я с небольшого введения, прочитав которое, вы сможете понять, о чём всё-таки идёт речь, если вы вдруг что-то запамятовали.Читать полностью »