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

Захотелось тут одному начинающему “автоматизатору” получить данные об установленном на компьютерах сети программном обеспечении, для последующей обработке в 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"            
Реклама

UsersView.ps1

В PowerShell 2.0 много превосходных нововведений (о некоторых из которых уже было рассказано например тут или тут), но не стоит откладывать изучение PowerShell до выхода второй версии. Даже PS 1.0 обладает отличным функционалом, что и доказывает следующий пример 🙂

Это скрипт-утилитка для отображения объектов из AD (в данном случае контактов, но можно подставить что угодно) в красивом списке, с возможностью быстрого поиска, и выводом дополнительной информации. Мне показалось что это удобнее настроенной консоли MMC, да и установки adminpack не требует 😉

Searcher

Правда текст скрипта вместе с обильными комментариями для блога IMHO несколько великоват, так что на всякий случай вот ссылка на файл — UsersView.ps1.

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

Опубликовано в Active Directory, Learn, PowerShell, Practice, Scripting, Tips. Комментарии к записи UsersView.ps1 отключены

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.

Комбинированный запрос AD и Exchange\WMI

Станислав Булдаков подкинул интересную задачку. Ему надо было объеденить данные доступные только из Active Directory, и данные которые можно получить лишь выполненив WMI запрос к Exchange.

И вот что я намалевал в результате 🙂

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