cmdlets/Stop-1C.ps1
. $PSScriptRoot\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 = завершить процессы не спрашивая ) $LinesSearch = $Search.Split(",") foreach ($LineFind in $LinesSearch) { Write-Verbose "Search = $LineFind" $Line = $LineFind.Replace(":","%").Replace("\","%").Replace("/","%").Replace("%%","%").Trim() Write-Verbose "Search_Replaced = $Line" $Filter = "Name LIKE '%1cv8%'" if($IncludeServer1C) {$Filter = "CommandLine LIKE '%1cv8%'"} if ($Line -ne "") {$Filter += "and CommandLine LIKE '%$Line%'"} Write-Verbose "IncludeServer1C = $IncludeServer1C" Write-Verbose "Filter = $Filter" Write-Verbose "Force = $Force" $Process = Get-WmiObject Win32_Process -Filter $Filter Write-Verbose "Process = $Process" if($Process -ne $null){ '' $Result = $false if ($Force) { $Result = Terminate-Process $Process -Force } else { $Result = Terminate-Process $Process if (Get-Permission "Завершить"){'';$Result = Terminate-Process $Process -Force} } } } #Return $Result }# 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 if ($Force){$Proc.Terminate() | Out-Null; $Result = $true} Write-Host ("PID = {0}; CommandLine = {1}" -f $Proc.ProcessID, $Proc.CommandLine) -ForegroundColor $Color } Return $Result }# end Terminate-Process |