cmdlets/Set-DebugServer1C.ps1
. $PSScriptRoot\CommonUtils\CommonUtils.ps1 New-Alias -Name 'Dbg-Srv1C' -Value 'Set-DebugServer1C' #---------------------------------------------------------------------------------------- # запускает платформу 1С с переданными ключами командной строки function Set-DebugServer1C { <# .SYNOPSIS Включает/выключает режим отладки на сервере приложений 1С. .DESCRIPTION Запуск без параметров добавляет ключ отладки в строку запуска сервера 1С в реестре Windows и перезапускает службу сервера 1С. Псевдоним: Dbg-Srv1C .PARAMETER Off Отключает отладку на сервере 1С. Если указан, то ключ отладки будет удален из строки запуска сервера. .PARAMETER NotRestart Не перезапускать службу сервера 1С. .PARAMETER Wait Для завершения работы ждать подтверждения от пользователя. #> [CmdletBinding()]# реагирует на стандартные параметры такие как -Verbose Param( [switch]$Off, # Выключить отладку [switch]$NotRestart, # Не перезапускать службу [switch]$Wait # Ожидать нажатия любой клавиши ) $Servers1C = @() # Массив - имен служб серверов 1С $Servers1C += "1C:Enterprise 8.3 Server Agent" $Servers1C += "1C:Enterprise 8.3 Server Agent (x86-64)" foreach($NameService in $Servers1C) {SetDebug $NameService (-not $Off)} if ($Wait) { Wait-PressAnyKey } } #---------------------------------------------------------------------------------------- function SetDebug($ServiceName, $OnDebug=$True) { $ServicePath = "HKLM:\SYSTEM\CurrentControlSet\services\" + $ServiceName if (-not(Test-Path $ServicePath)) {Return} $Service = Get-Item -path ($ServicePath) $ImagePath = $Service.GetValue("ImagePath") Write-Verbose "ImagePath = $ImagePath" if ($ImagePath -eq $null) { Write-Warning ('Не обнаружен путь к файлу запуска службы "{0}"' -f $ServiceName) Return } $CurrentDebugON = $ImagePath -match "-debug" # текущее состояние отладки $NewImagePath = "" $Message = "" # Если надо включить и нет в реестре - добавим в ключ if ($OnDebug -and !$CurrentDebugON) { $NewImagePath = $ImagePath -replace "-srvc", "-DEBUG -srvc" # НЕ чувствителен к регистру $Message = "`n`tОтладка включена" } # Если надо выключить и есть в реестре - удалим из ключа elseif (!$OnDebug -and $CurrentDebugON) { $NewImagePath = ($ImagePath -replace "-debug ") -replace "-debug" # оператор -replace не чувствителен к регистру в отличие от метода .Replace() $Message = "`n`tОтладка отключена" } # Текущий статус elseif ($CurrentDebugON) {$Message = "`n`tОтладка включена"} else {$Message = "`n`tОтладка отключена"} #Если были изменения - запишем их if ($NewImagePath) { Set-ItemProperty -Path $ServicePath -Name "ImagePath" –Value $NewImagePath #Если нет запрета на перезапуск - перезапустим сервер if (!$NotRestart) { Restart-Service -Name $ServiceName $Message = $Message + "`n`tПерезапущен сервер" } } #Cообщим о результатах "{0}{1}" -f $ServiceName, $Message } |