PowerShell-ActiveDirectory: @(Get-ADUser admin).Count -eq 1 и другие косяки модуля ActiveDirectory

Начну цитатой

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

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

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

Так вот, хочу описать небольшую проблемку, на решение которой я когда-то потратил целый рабочий день: Мои коллеги сказали, что скрипт, который я запулил в планировщик, работает не всегда корректно. К вечеру было ясно, что при работе с модулем ActiveDirectory нужно очень аккуратно пользоваться методом Count

Читать далее

Реклама

PowerShell — Массовая загрузка данных в ActiveDirectory

Часто мне задавали вопрос: «Как правильно выгрузить данные из AD, поправить и загрузить обратно?»

Обычно на этот вопрос я нехотя отвечал Get-ADUser>Set-ADUser, но недавно мне задал аналогичный вопрос один оочень дотошный товарищ, который оочень боялся за свою AD, и оочень плохо знает PowerShell. Тогда мне пришлось написать скрипт самому и тут я понял что это делается не в 2 строчки.

Вся проблема в пустых полях, но как же быть без них…

Читать далее

PowerShell — AD GPO — PcDescription

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

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

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

Читать далее

PowershellGallery — гдеж ты был все эти годы?

Сегодня не будет картинок, инструкций или разбора скриптов.

Сегодня я еще раз хочу напомнить всем о том, что не так давно windows начал свое путешествие назад в будущее и произошло непоправимое: разрыв простра́нственно-временно́го конти́нуума! Теперь всем Windows-администраторам придется возвращаться к консоли, а те, кто не сделают этого, вероятно, должны будут сменить проф. ориентацию.

Мы возьмем с собой в поход…
Нет, не так.
Мы возьмем с собой назад в будущее PowerShell!
Спасибо 🙂

Итак, сегодня я расскажу, какие же консольные инструменты у нас есть теперь.

Я уже писал про самое существенное, на мой взгляд,  нововведение в PowerShell 5, но тогда я только начал использовать PowershellGallery и, при этом, я ни разу не использовал technet scriptcenter gallery для того, чтоб с кем-то чем-то поделиться, а пользовался им только для поиска скриптов.

ScriptCenter — хорошая штука… была бы… лет 15-20 назад…

А сейчас это морально устаревшее УГ!

Читать далее

PowerShell, PowerShell, сколько мне лет?

Как и обещал, эта шуточная статья написана про то, как рассчитать ваш возраст, в продолжение предыдущей статьи о времени.

Я часто забываю сколько мне лет и не я один, и пусть скрипт шуточный, но шутка настолько забавная, что этот скрипт я выложил на powershellgallery, посмотрим, сколько еще ITшников забывают, сколько им лет 🙂

Кстати, для тех, кто не знает про powershellgallery, установить скрипт можно так:

Install-Script Get-MyAge -Force

Читать далее

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
}

Читать далее