TechEd 2008 — IT Professionals

Послезавтра я отправляюсь в славный город Барселону, на конференцию Teched — EMEA, IT Pro. Скорее всего привезу оттуда много новой и интересной информации которой поделюсь в блоге, и возможно на встречах московского MCP клуба или на Платформе 🙂 А пока, так как ноутбук я с собой не беру, новых постов в блоге видимо не будет.

Связаться со мной и задать вопросы можно будет всё так-же по e-mail. Еще рекомендую следить за блогом Паши Нагаева (MVP Exchange), он намеревался писать там отчеты о TechEd 🙂

Реклама
Опубликовано в News. 3 комментария »

Windows 7, Windows 2008 R2 и 574 командлета

На этой неделе, на PDC2008, Microsoft обнародовала множество информации о новых версиях операционных систем — Window 7 и Windows Server 2008 R2 (или Windows 7 Server). В этих ОС будет много новых возможностей и немало улучшений, но самым главным для меня является несомненно то что начиная с этих версий PowerShell будет включен в состав ОС и установлен по умолчанию 🙂 Более того, будет добавлено множество командлетов для управления различными функциями системы. Вот сводка по количеству командлетов из разных оснасток:

Roles installed:                  13/16

Role services installed: 94/101

Features installed:           40/40

 

CORE POWERSHELL

·         Microsoft.PowerShell.Core 37 Cmdlets

·         Microsoft.PowerShell.Utility 87 Cmdlets

·         Microsoft.PowerShell.Host 2 Cmdlets

·         Microsoft.PowerShell.Management 80 Cmdlets

·         Microsoft.PowerShell.Security 10 Cmdlets

·         Total: 216

ADDITIONAL

·         Microsoft.PowerShell.Diagnostics 4 Cmdlets

·         Microsoft.WSMan.Management 13 Cmdlets

·         ADRMS.PS.Admin 15 Cmdlets

·         Microsoft.Windows.ServerManager 3 Cmdlets

·         Microsoft.Windows.ServerManager.Migration 5 Cmdlets

·         Windows.ServerBackup 30 Cmdlets

·         activedirectory 76 Cmdlets

·         BestPractices 4 Cmdlets

·         DiagPack 2 Cmdlets

·         FailoverClusters 66 Cmdlets

·         FileTransfer 8 Cmdlets

·         GroupPolicy 25 Cmdlets

·         NetworkLoadBalancingClusters 35 Cmdlets

·         PSDiagnostics 10 Cmdlets

·         RemoteDesktopServices  0 Cmdlets (?? – I think they’re just doing a provider)

·         WebAdministration 62 Cmdlets

·         Total: 358

Net Total 574

Взято отсюда.

Причем тут установлены еще не все роли, не присутствует информация о провайдерах, и не учитывается то что один командлет может выполнять огромное количество функций 🙂

Кстати, на сайте PDC можно посмотреть записи трансляций, нужен только SilverLight и неплохой канал 🙂

Опубликовано в News, PowerShell, Scripting, Windows 7. Комментарии к записи Windows 7, Windows 2008 R2 и 574 командлета отключены

Скрипт для мониторинга включения/выключения компьютеров

По мотивам темы на форуме. Скриптик для мониторинга когда какой комп включился, когда выключился, и записи в лог. На основе пингов.

Для использования надо подправить параметры под себя (список компьютеров, файлы логов и состояния), и запихать в планировщик, для запуска с интервалом например в 10 минут. При старте скрипт будет проверять наличие файла состояния, и если он существует — подгружать, и писать в логфайл все изменения состояния.

# Функция для проверки доступности хоста. В данном случае используется ping.exe
# Как вариант можно взять версию на .Net у меня из блога:
# https://xaegr.wordpress.com/2008/09/16/test-host_where-online/
Function Test-Host ($HostName)
{
    [bool]((ping.exe $HostName -n 1) -match "получено = 1")
}

# Файл в котором будем сохранять состояние компьютеров между запусками скрипта
$StateFile = "c:\temp\pinger.xml"

# Файл в который будут писаться изменения состояния компьютеров
$LogFile = "c:\temp\pinger.log"

# Если файл сохраненного состояния уже существует...
If ( Test-Path $StateFile )
{
    # Загружаем таблицу состояния компов из файла
    $Table = Import-Clixml $StateFile
}
else # Иначе - создаем новую.
{
    Write-Warning "Выполняется инициализация таблицы состояний"
    $Computers = Get-Content c:\computers.txt
    # $Computers = Get-QADComputer | foreach {$_.DnsName}
    
    #Создаем пустую хэш-таблицу. Ключем будут имена компьютеров, значением - состояние.
    $Table = @{}
    #Заполняем её именами компьютеров, и состоянием $False.
    $Computers | Foreach {$Table[$_] = $False}
}

#Проверяем состояние каждого хоста...
Foreach ($Key in @($Table.Keys))
{
    # Получаем состояние хоста в переменную $State
    $State = Test-Host $Key
    
    #Если состояние не равно предыдущему состоянию...
    if ($State -ne $Table[$Key])
    {
        #Обновляем состояние
        $Table[$Key] = $State
        #Записываем в лог
        if ($State) {$Message = "$(Get-Date) Компьютер $Key был включен."}
        else {$Message = "$(Get-Date) Компьютер $Key был выключен."}
        Add-Content -Path $LogFile -Value $Message
        Write-Host $Message
    }
}

# Записываем состояние хостов в файл
$Table | Export-Clixml $StateFile

В планировщике выполнять например следующую команду:

powershell -noprofile -command c:\scripts\MonitorHost.ps1

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

Время запуска PowerShell.exe

Как известно PowerShell 1.0 стартует не очень шустро. Разумеется какое то время уходит на непосредственный запуск оболочки, а затем на выполнение команд из профиля. Мне было интересно замерить эти значения, и в результате получилось вот что:

MeasureProfile

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

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

Запуск программы или скрипта при включении компьютера

Как оказалось задачка из заголовка не так то просто реализуется. Вроде было бы логично если бы программы из HKLM:\Software\Microsoft\Windows\CurrentVersion\Run или RunOnce запускались бы при включении компьютера, ан нет — они стартуют при входе под учетной записью с административными полномочиями. Так что приходится искать другие пути.

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

Опубликовано в Scripting, Tips. 1 Comment »

Get-PrimaryGroup

По мотивам темы в форуме, и просто чтобы не забыть 🙂

Скрипт получает Primary Group пользователя. В отличии от остальных групп, primary содержится не в атрибуте пользователя MemberOf, а в PrimaryGroupId. Более того, в отличии от MemberOf в котором указываются DN групп, в PrimaryGroupID указывается лишь номер группы. Узнать какая группа соответствует какому номеру можно из свойства группы PrimaryGroupToken. В итоге с использованием AD Cmdlets получается вот такая конструкция:

Function Get-PrimaryGroup ($User)
{
    $groups = @{}
    Get-QADGroup -IncludedProperties PrimaryGroupToken | foreach {$groups[$_.PrimaryGroupToken]=$_.name}
    
    Get-QADUser $User -IncludedProperties PrimaryGroupId | 
    foreach {
        $_ | Add-Member -Type "NoteProperty" -Name "PrimaryGroup" -Value ($groups[$_.primaryGroupId]) -PassThru 
    }
}

На выходе из функции будут объекты пользователей полученные с помощью Get-QADUser, но с добавленным свойством — PrimaryGroup:

[PS <40> C:\Root] Get-PrimaryGroup -User Иванов| Format-List name, prim*

Name           : Иванов Иван
PrimaryGroup   : Domain Users
PrimaryGroupId : 513


[PS <42> C:\Root] Get-PrimaryGroup -User Ив* | Format-Table name, logonname, prim*

Name             LogonName   PrimaryGroup PrimaryGroupId
----             ---------   ------------ --------------
Иванов Иван      Ivanov      Domain Users            513
Иванищенко Фёдор Ivanichenko Domain Users            513

Разумеется при большом количестве групп имеет смысл не получать таблицу соответствий PrimaryGroupToken каждый раз, а закешировать её, или применять запрос LDAP для того чтобы отбор нужной группы выполнялся уже с помощью ресурсов Active Directory.

Книга о PowerShell на русском языке

Итак, оно свершилось 🙂 Первая книга на русском языке, о PowerShell издана 🙂 Благодарить за это нужно её автора — Андрея Попова, который не поленился, и выбрал самое лучшее из книг разработчиков языка (таких как PowerShell in Action или PowerShell Cookbook), добавил немало своих примеров практического применения языка, и в конце концов уложил всё это в книгу на русском языке 🙂

Я вчера получил 2 штуки этих книжек, с удовольствием полистал — пока не нашел к чему придраться 🙂 Более того некоторые места наверняка с интересом почитаю сам 🙂 Желающие могут ознакомиться с содержанием тут, или почитать отрывок из книги в формате pdf.

Один экземпляр книги остаенется у меня, а вот второй я хочу во время TechEd’а в Ноябре передать Джеффри Сноверу, для достройки его Tower of Power 😉

ЗЫ: Тираж книжки не слишком то велик, всего лишь 2000 экземпляров, так что рекомендую поспешить с приобретением.

Опубликовано в Learn, News, PowerShell, Scripting. 4 комментария »