cmdlets/Stop-1C.ps1
. $PSScriptRoot\CommonUtils\CommonUtils.ps1 New-Alias -Name 'Kill-1C' -Value 'Stop-1C' #---------------------------------------------------------------------------------------- # Завершает процессы платформы 1С function Stop-1C { <# .SYNOPSIS Завершает процессы платформы 1С. .DESCRIPTION Выводит список всех запущенных процессов платформы 1С и ожидает подтверждения пользователя для завершения. Если передана строка поиска, то будут найдены все процессы платформы 1С содержащие в своей командной строке запуска переданную строку. Псевдоним: Kill-1C .PARAMETER Search Фрагмент строки запуска (или фрагменты через запятую) содержание которого будет определяться в командной строке запуска платформы 1С. Псевдонимы: s, filter, f .PARAMETER IncludeServer1C Включить процессы сервера 1С в список к удалению. По умолчанию процессы сервера 1С в список к удалению не включаются. .PARAMETER Force Завершить все найденные процессы без вопросов. .EXAMPLE #Завершить все запущенные процессы в режиме предприятия: Stop-1C ENTERPRISE .EXAMPLE #Завершить все процессы к конкретной базе: Stop-1C '/IBName"ИмяБазы"' #> [CmdletBinding()] param( [Alias("s", "filter", "f")][string]$Search, # строка поиска в командной строке запуска процесса [Parameter(HelpMessage="IncludeServer1C = false")][switch]$IncludeServer1C, # По умолчанию процессы сервера 1С исключены из удаления [switch]$Force # True = завершить процессы не спрашивая ) if ($IncludeServer1C){ $Process1C = Get-Process -Name 1cv8*,ragent,rmngr,rphost,dbda }else{ $Process1C = Get-Process -Name '1cv8*' } $LinesSearch = $Search.Split(",") foreach ($LineFind in $LinesSearch) { $Filter = "*$LineFind*" if ($IncludeServer1C){ $Process = $Process1C | Where-Object {$_.CommandLine -Like $Filter -or $_.CommandLine -Like ""} }else{ $Process = $Process1C | Where-Object {$_.CommandLine -Like $Filter} } Write-Verbose "Process = $Process" if($Process){ '' if ($Force) { $Result = Terminate-Process $Process -Force } else { $Result = Terminate-Process $Process if (Get-Permission "Завершить"){ '' $Result = Terminate-Process $Process -Force } } } } # foreach $LinesSearch }# end of Stop-1C #---------------------------------------------------------------------------------------- # Завершает переданные процессы function Terminate-Process { [CmdletBinding()] param( $Process, # массив процессов [switch]$Force ) $Result = $false $Force = $Force -and $DebugPreference -eq 'SilentlyContinue' $Text="Будет завершен процесс:"; $Color='White' if($Force){$Text="Завершен процесс:"; $Color='Yellow'} foreach($Proc in $Process) { Write-Host $Text -ForegroundColor DarkGray Write-Host ("{0} PID = {1}; CommandLine = {2}" -f $Proc.Name, $Proc.Id, $Proc.CommandLine) -ForegroundColor $Color if ($Force){ Get-Process -Id $Proc.Id | ForEach-Object{$_.Kill()} } } Return $Result }# end Terminate-Process |