Active Setup

Вы наверняка не раз замечали при первом входе в систему на компьютере с Windows XP или 2003, такие окошки?

AS

На Windows Vista/2008 и выше, этот процесс выглядит иначе:

AS_2008R2

Это происходит только при первом входе, зайдя в систему во второй раз под этим же пользователем, вы их уже не увидите. Но зато если на этот компьютер зайдет другой пользователь, для него весь процесс повторится заново. Что же это такое, и как оно может быть полезно системным администраторам? Smile

Читать далее…

Опубликовано в Tips, Utility. Метки: . 9 комментариев »

Интересные примеры на PowerShell

perl Недавно натолкнулся вот на этот пост. В нём приведено несколько интересных примеров того “как в Perl одна-две строчки кода могут сделать больше, чем десять строк в каком-нибудь другом языке программирования” 😉 Мне показалось что будет интересно сравнить как эти примеры выглядели бы на PowerShell 😉 И главное – это может быть полезно тем кто уже знает Perl но сейчас изучает PS.

Как известно PowerShell очень молодой язык, и разумеется он унаследовал множество элементов других языков, и следовательно местами схож с многими из них. Я часто слышу о коде PowerShell фразы типа “О, да они же украли PHP!”, “Это же C# с более простым синтаксисом”. Но по-моему больше всего PowerShell похож на Perl. Это и не удивительно – Perl был одним из любимых языков авторов PS, и это здорово — многим хорошим особенностям в PS мы обязанны именно Perl’у.

Hats off to superstar Larry Wall and Perl, very few people and technologies that have had the level of (positive 🙂 ) impact these 2 have had on the industry.  The world is a better place because that guy was born!

Jeffrey Snover

Читать далее…

Опубликовано в PowerShell, Tips. Метки: . 26 комментариев »

Создание локального пользователя и мешающее ничто

Недавно ко мне обратились с вопросом о странном поведении достаточно простой функции. Она создаёт локального пользователя с заданным именем и паролем, и должна возвращать в качестве результата объект с двумя свойствами: UserName и Password (Ну на самом деле функция была чуть сложнее, но нам интересна только эта часть 🙂 ). Читать далее…

Опубликовано в Learn, PowerShell, Scripting, Tips. Метки: . 3 комментария »

Как создать свой объект в PowerShell

Пост чтоб ссылаться на него, а то часто спрашивают 🙂

Самый красивый и правильный способ – использовать командлеты New-Object, и Add-Member:

$obj = New-Object psobject            
$obj | Add-Member -type noteproperty -name Prop1 -Value "Abc"            
$obj | Add-Member -type noteproperty -name Prop2 -Value 123

К сожалению этот способ относительно громоздкий, и при написании “ad-hoc” скриптов, или в интерактивной консоли, часто используют командлет Select-Object. Он оставляет от переданного ему объекта только указанные свойства. Причем свойства можно указывать даже отсутствующие у объекта раньше 🙂 А вместо имён свойств можно использовать специальные хеш-таблицы в которых еще и указывать их значения 🙂

$o = 0 | Select-Object @{name="Prop1";expression={"Abc"}}, @{n="Prop2";e={123}}

Мы передаём на Select-Object объект 0 (ноль), впрочем можно использовать и любой другой, например "" (пустую строку). Ни одно из свойств исходного объекта мы не указываем и они удаляются. Зато добавляем пару новых 🙂

Ну и до кучи – хэш-таблицы (hashtable). Это не объекты, но ведут себя в некоторых случаях довольно похоже.

$h = @{prop1="Abc";prop2=123}            
$h["prop3"]=456            
$h.prop1 = "Def"

Обратите внимание на такую фичу – к свойствам хеш-таблиц можно обращаться как к массивам по индексу — $h["свойство"], так и как к объектам: $h.свойство.

Upd: Спасибо Вадиму за напоминание, в PowerShell 2.0 можно еще вот так легко создать свой класс с помощью кода C#, и затем его экземпляр:

Add-Type @'
public class MyClass
{
    public string prop1 = "blabla";
    public bool prop2 = true;
}
'@            
            
$Object = New-Object MyClass

Аналогично можно сделать и в 1.0, но там вызывать C# код уже несколько сложнее.

Пишем в журнал событий из скрипта

Итак, на большие записи к сожалению не хватает времени, поэтому попробую пока писать хотя бы маленькие, по мотивам задаваемых вопросов 🙂

Итак, избавляемся от этих вредных файликов с текстовыми логами 🙂

$Source="My Script"
$Message="Работа завершена успешно"
$Type=4
$EventID=1234
[System.Diagnostics.EventLog]::WriteEntry($Source,$Message,$Type,$EventID)

Типы могут быть следующими: 1 — Error; 2 Warning; 4 Info. События пишутся в журнал Application. Работает на всех версиях PS, на всех ОС.

А в PS 2.0 появилась отдельный командлет – Write-EventLog.

Опубликовано в PowerShell, Scripting, Tips. Метки: . 1 Comment »

Process Monitor – мониторинг включения системы

Те кто серьезно занимались внедрением Software Restriction Policy у себя в компании, наверняка задумывались что неплохо было бы не оставлять включенным стандартное правило разрешающее запуск любых программ из папки Windows. Ведь некоторые из этих программ могут предоставлять чрезмерно большие возможности пользователям. А то и чем черт не шутит – дадут возможность обойти SRP… Но чтобы убрать это правило, надо понять, какие же программы действительно необходимы для загрузки системы и для работы пользователя. Для того чтобы это узнать, можно воспользоваться утилитой Process Monitor от Microsoft Sysinternals.

 

Читать далее…

Простенькая инвентаризация ПО на компьютерах

Захотелось тут одному начинающему “автоматизатору” получить данные об установленном на компьютерах сети программном обеспечении, для последующей обработке в Excel 🙂

Если для получения списка компьютеров применить Quest AD Cmdlets, а для проверки их доступности Where-Online то всё будет очень просто 🙂

Function Get-ComputerSoftware ($Name = "*")            
{            
    foreach ($comp in (Get-QADComputer $Name | foreach {$_.dnsname} | Where-Online))            
    {            
        Write-Host "Enumerating software for $comp...`t" -NoNewline            
        Get-WmiObject win32_product -ComputerName $comp | select name, vendor, version, @{name="Computer"; expression={$Comp}}            
        Write-Host "Done"            
    }            
}            
            
Get-ComputerSoftware -Name "Scenic*" | Export-Csv -Encoding "Unicode" -Path "c:\Report.csv"