PowerShell — AD GPO — PcDescription

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

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

Сегодня я расскажу о двух более простых вариантах:

Читать далее

Реклама

PowerShell — Дата и Время

DateTime: The truth is out there…

Так, у меня есть 30 дней для оплаты штрафа. А какое сегодня число? Ой, а месяц-то какой? Кажется февраль… А год не високосный ли?

Да, наплевать! Есть же (Get-Date).AddDays(30) !!

Далее небольшая история и много примеров работы с классом [DateTime], которые вам обязательно пригодятся, раз вы сюда попали 🙂

Когда я только начинал изучать PowerShell, я увидел много интересных и непонятных вещей, но именно класс [DateTime] был самым непонятным, поэтому я долго пытался обходить его стороной. Наверное, это связано с тем, что для написания PowerShell скриптов какое-то время совсем необязательно знать что такое методы и функции, но [DateTime] просто заставляет в это погрузиться и оказывается, все не так сложно…

Читать далее

Subnet contains IP? Вот в чем вопрос!

Доброго!

Сегодня маленький скриптик, который поможет вычислять входит ли IP в подсеть.

Код скрипта

Function Compare-IPinSubnet {
param (
	[string]$CIDR,
	[string]$IP
)

	[int]$PrefixLength = $CIDR -replace '^[\d\.]+(\\|\/)',''
	[string]$Subnet = $CIDR -replace '(\\|\/)\d+$',''
	$SplitSubnetBin = $Subnet -split '\.' -match '\d' | % {[convert]::ToString($_,2).PadLeft(8,'0')}
	$SubnetBin = $SplitSubnetBin -join ''
	$SplitIPBin = $IP -split '\.' -match '\d' | % {[convert]::ToString($_,2).PadLeft(8,'0')}
	$IPBin = $SplitIPBin -join ''
	[bool]$Result = $true
	for ($i = 0; $i -lt $PrefixLength; $i += 1) {
		[bool]$diff = [convert]::ToInt32(($SubnetBin[$i]),2) -eq [convert]::ToInt32(($IPBin[$i]),2)
		if ($diff -eq $false) {
			$Result = $diff
		}
	}

	$Result
}

Читать далее

PowerShell — Mac Address Vendor Database IEEE

Долгое время у меня не получалось написать этот скрипт так, чтоб самому было приятно пользоваться, предыдущая попытка называлась Resolve-MacAddress и была вполне рабочая, но там были неприятные моменты:

Перед первым использованием с сайта стандартов скачивалась база, что могло напугать неподготовленного пользователя, и скрипт не поддерживал конвейер, т.к. в нем было много много разного функционала, который вызывался через разные параметры. Нужно было как-то разнести обновление/импорт базы и саму функцию поиска мака в базе. Так появился модуль MacAddressVendorDatabaseIEEE, который включает в себя функции (Update-MacAddressDatabase, Import-MacAddressDatabase, Get-MacAddressVendor) и саму базу.

Читать далее

PowerShell — Zabbix Agent Deployment Script GPO

Предлагаю вашему вниманию скрипт для автоматизированного разворачивания zabbix-agent на доменные компьютеры с помощью gpo.

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

Все комментарии внесены в сам скрипт, который находится в самом конце инструкции.

Статья в стиле «краткая инструкция».

Читать далее

PowerShell Script Shadowing

О чем речь

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

Показания к применению
Скрыть окно пошика бывает необходимо чтоб не пугать пользователей всякими админскими штуками, стартующими по расписанию. Да и действительно, когда каждые 15 минут всплывает синее окно, это может и не страшно, но точно неудобно, ведь оно может задуматься секунд на 5, а это уже мешает работе.

Почему именно так

Исторически так сложилось, что и cmd и powershell в отличие от vbs являются прежде всего оболочками и потому выполняются в скрытом режиме только в виде logon-скриптов, которые стартуют не сразу при входе, а с какой-то задержкой. Если мы хотим выполнять скрипт сразу при входе или периодически, то нам нужен планировщик заданий, но после появления в интернете большого количества статей о получении пароля из файлов netlogon, мелкомягкие пофиксили возможность задания паролей для назначенных заданий или для сетевых дисков через групповые политики. Получается что при настройке назначенных заданий через групповые политики мы можем использовать либо встроенные учетные записи типа System, или учетку вошедшего пользователя, но без сохранения пароля, а если скрипт выполняется для пользователя, вошедшего в систему, то он будет видеть мигание оболочки, запускаемой из планировщика.

Почему vbs

Я не знаю и не люблю vbs, но у него есть несколько причин жить и одна из них — это возможность запускаться в скрытом режиме, то есть без окон, без дверей

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

За дело!

Читать далее

PowerShell 5

Сегодня 29 июля и все осведомленные люди из ИТ-сообщества отмечают день системного администратора, а я хочу рассказать вам один баян, недавно поразивший меня до глубины души и хочу сделать это сегодня, т. к. вдохновение уже плещется в моем стакане.
Нет, это не то…
Наступила зима…
Не, ну реально 🙂
Ладно, о чем я хотел сказать.
Вышла новая версия PowerShell и если не все это заметили, то очень жаль, так как новая версия содержит настолько важный функционал, что я даже какое-то время не мог понять о чем писать тут теперь.
Раньше с выходом новых версий мы получали небольшие улучшения синтаксиса, обновление и добавление командлетов, и вот наконец-то мы получили возможность пользоваться репозиториями.
Читать далее