Ещё небольшое дополнение к Certificate Management Pack, который я сейчас пишу. Данный код позволяет запускать и останавливать службу Certification Authority на сервере. Поскольку я для решения этой задачи использую WMI, то ремотинг будет обеспечен. Следует учесть, что все команды по управлению службой CA будут расположены за конвейером после команды Get-CertificationAuthority. Это было сделано в рамках удобства и стандартизации. Когда мы хотим что-то настроить в CA, то сначала должны указать его имя/объект. Поскольку у нас уже есть готовое решение для этого, то почему бы его и не использовать? Код на самом деле очень простой и в нём разберётся даже новичок:
##################################################################### # Start-Stop CA.ps1 # Version 1.0 # # Starts and stops Certification Authority service on specified CA # Requires Get-CertificationAuthority cmdlet: # http://www.sysadmins.lv/PermaLink,guid,947401b2-312a-4129-860b-4296dfe46cb2.aspx # # Usage: # Get-CertificationAuthority "CAName" | Stop-CertificationAuthority # stops CA service on CA named CAName # Get-CertificationAuthority | Start-CertificationAuthority # starts all Enterprise CAs in current forest # # Vadims Podans (c) 2009 # http://www.sysadmins.lv/ ##################################################################### function Start-CertificationAuthority ($CA) { process { $status = (gwmi Win32_Service -ComputerName $CA.Computer -Filter "Name = 'CertSvc'").StartService() if ($status.ReturnValue -eq 0) { Write-Host $CA.CAName Certificate Services successfully started on $CA.Computer -ForegroundColor Green } else { Write-Warning "Unable to start $($CA.CAName) certificate services" } } } function Stop-CertificationAuthority ($CA) { process { $status = (gwmi Win32_Service -ComputerName $CA.Computer -Filter "Name = 'CertSvc'").StopService() if ($status.ReturnValue -eq 0) { Write-Host $CA.CAName Certificate Services successfully stopped on $CA.Computer -ForegroundColor Green } else { Write-Warning "Unable to stop $($CA.CAName) certificate services" } } }
Можно сказать, что выносить данные команды в отдельные функции излишне, ведь это можно и самому дописать в свой скрипт. Но можно и не сказать так, ведь представьте, насколько удобно, когда нужная функция у вас уже есть под рукой, и её не надо писать с нуля.
Update: хочу ещё раз отметить на одну из частых ошибок, которые допускают при написании скриптов в PowerShell. Вы можете просто использовать переменные в двойных кавычках и при использовании этой строки в неё будет подставляться содержимое переменной. Но этого не будет, если вы используете свойство объекта, который хранится в этой переменной, поскольку переменные экспандятся только 1 раз. Этого достаточно для простой переменной, но недостаточно для извлечения содержимого свойста объекта в этой переменной. Ведь сначала нужно извлечь содержимое переменной, а потом прочитать содержимое указанного свойства. Чтобы экспандить такие вещи, переменные в двойных кавычках следует заключать в подвыражение $().
Comments: