пятница, 27 января 2012 г.

PowerShell. Обновление шаблонов рабочих элементов во множестве проектов TFS


Пример скрипта, который обновляет во множестве проектов TFS шаблоны рабочих элементов.


cls
# Путь к команде witadmin
cd 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE'

# Рабочие элементы, которые необходимо обновить
$wits=@('Bug','Change Request','Issue','Requirement','Risk','Shared Steps','Task','Test Case')


# Имя сервера
$srv='http://tfs:8080/tfs/infotecstc1'


# Проекты
$projects=@('Project1','Project2','Project3')

# Путь к шаблонам рабочих элементов
$fld='C:\TFS Template\Company Template v1.00\WorkItem Tracking\TypeDefinitions'

# Служебная переменная (общее время выполнения)
$gen_sec=0

foreach ($p in $projects)
{
    $prj_sec=0
    write-host ' '
    write-host '---------- '          
    write-host 'Проект ' -nonewline
    write-host $p -nonewline -foregroundcolor Red
    write-host '... '
    write-host ' '
    foreach ($w in $wits)
    {
        write-host 'Загрузка рабочего элемента ' -nonewline
        write-host $w -nonewline -foregroundcolor Red
        write-host  ': ' -nonewline
     
        $sec=(measure-command {$outtext=.\witadmin importwitd /collection:$srv /p:$p /f:$fld'\'$w'.xml'}).totalseconds
        }          
     
        $sec_f= "{0:N2}" -f $sec
        write-host $outtext  -nonewline
        write-host ' |' $sec_f '| '      
     
        # Время загрузки для всего проекта
        $prj_sec += $sec
    }
    $gen_sec += $prj_sec
    $prj_sec = "{0:N2}" -f $prj_sec
    #$prj_sec = new-timespan -seconds $prj_sec  
    write-host
    write-host  'Время загрузки: ' -nonewline                    
    write-host $prj_sec -nonewline -foregroundcolor Red
    write-host ' сек.'
 
}
    $gen_min = "{0:N2}" -f (new-timespan -seconds $gen_sec).totalminutes
    write-host
    write-host 'Общее время загрузки: ' -nonewline
    write-host $gen_min -nonewline -foregroundcolor Red
    write-host ' мин.'

PowerShell. Просмотр всех доменных групп пользователя


# Пользователи, доменные группы которых необходимо просмотреть
$usrs=@('Ivanov', 'Petrov','Mikhaylov')

foreach ($usr in $usrs)
{
    write-host ' '
    write-host '--[' -nonewline
    write-host $usr  -nonewline -foregroundcolor Red
    write-host ']-------- '        
    write-host 'Доменные группы: '

    # В следующей строке необходимо ввести имя домена: Domain='сюда'
    $query = "ASSOCIATORS OF {Win32_Account.Name='"+$usr+"',Domain='ИмяДомена'} WHERE ResultRole=GroupComponent ResultClass=Win32_Account"
    Get-WMIObject -Query $query | Select Name
    write-host '-------------------- '            
}

PowerShell. Пример отправки почтового сообщения

$emailFrom = "me@domen.ru"
$emailTo = "user@domen.ru"
$subject = "Пример тестового сообщения"
$body = "Тестовое сообщение, отправленное через PowerShell"
$smtpServer = "mailserver.ru"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body)