Архив

Archive for the ‘PowerShell’ Category

SCCM; PS; И очень медленная работа Add-CMDeviceCollectionDirectMembershipRule

… или простая задача но много букв.

Время от времени возникает вопрос — «Надо добавить в коллекцию пару сотен девайсов, а командлет Add-CMDeviceCollectionDirectMembershipRule делает это ну оооочень медленно». И приводят пример вроде этого:

$Names = "a*"
$CollName = "Test collection"
Get-CMDevice -Name $Names | Foreach-Object {
    Add-CMDeviceCollectionDirectMembershipRule -CollectionName $CollName -ResourceId $_.ResourceID
}

Смотрим описание командлета:

Тег «Далее»

Рубрики:PowerShell, SCCM, Tricks

PS; Get-ContentFromSCUPCatalog; Скачиваем MSI-файлы Adobe Flash Player и прочее из SCUP-Catalog

«Сначала прикололся, потом загнался»

Набор функций для скачивания файлов полученных из метаданных SCUP-Каталога.

Тег «Далее»

Рубрики:PowerShell, Updates

C#; PS; Очистка StandBy памяти; no RAMMap

Когда люди городят что-то подобное http://infostart.ru/public/237919/, меня немного передергивает. Как демонстрация работы с AutoIT — очень даже, но как решение задачи — костыль (Хотя все это и есть один большой костыль). А тут еще и коллега скинул данную ссылку, мол — «скажи, что можно сделать по нормальному, не так…».

Попросил Александра Короткова набросать мне соответствующий код на C#, а сам его бесцеремонно скопипастил и завернул в PowerShell.

Тег «Далее»

Рубрики:PowerShell, Tricks

SCCM; CI/CB; Уведомление пользователей о необходимости перезагрузки через CCM/CB и SCToastNotification;

В качестве демонстрации возможностей SCCM — «Configuration baselines», будем дополнительно напоминать пользователю о необходимости перезагрузки, вот таким вот образом:

image

В качестве проверки на необходимость перезагрузиться я взял готовый скрипт «Get-PendingReboot.ps1» за авторством Brian Wilhite.

Тег «Далее»

Рубрики:PowerShell, SCCM, Tricks

PS; Get-LevenshteinDistance; Нечеткое сравнение строк; Расстояние Левенштейна;

Реализация на Microsoft PowerShell функции нечёткого сравнения строк.

Что это и для чего, а так же реализации на всех языках можно почитать в оригинале: https://ru.wikipedia.org/wiki/Расстояние_Левенштейна

https://ru.wikibooks.org/wiki/Реализации_алгоритмов/Расстояние_Левенштейна

Обратите внимание на реализацию на «Haskell». Я это называю — «Когда инструмент выбран правильно» :)

Function Get-LevenshteinDistance {
	param(
		[string]$string1,
		[string]$string2
	)
	Function Get-PSMin { param ( [int[]] $ints ) ($ints | Measure-Object -Minimum).Minimum }

	$diff = 0
	$m = New-Object "object[,]" ($string1.Length + 1),($string2.Length + 1)
	for($i = 0; $i -le $string1.Length; $i++) { $m[$i, 0] = $i }
	for($j = 0; $j -le $string2.Length; $j++) { $m[0, $j] = $j }

	for($i = 1; $i -le $string1.Length; $i++) {
		for($j = 1; $j -le $string2.Length; $j++) {
			if( $string1[($i-1)] -eq $string2[($j-1)] ) {$diff = 0} else {$diff = 1}
			$m[$i,$j] = Get-PSMin (Get-PSMin ($m[($i-1),$j]+1), ($m[$i,($j-1)]+1)), ($m[($i-1),($j-1)] + $diff)
		}
	}
	return $m[$string1.Length, $string2.Length]
}

Как пользоваться:

Тег «Далее»

Рубрики:PowerShell