Примеры скриптов PowerShell для 1С - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

Примеры скриптов PowerShell для 1С

Данные > Статьи и инструкции > Администрирование
👨‍💻 АДМИНИСТРИРОВАНИЕ 1С 8 перейти в меню [СТАТЬИ И ИНСТРУКЦИИ]
Практическая коллекция скриптов для PowerShell, созданных для автоматизации, администрирования и оптимизации инфраструктуры 1С. Каждый скрипт протестирован в реальных сценариях и адаптирован под типовые задачи системных администраторов и разработчиков. Цель - сократить рутину, повысить стабильность и упростить управление серверной частью 1С.
1. Скрипт PowerShell предназначен для автоматического завершения всех активных сеансов пользователей на сервере 1С:Предприятие, работающем через ragent.exe. Он определяет версию платформы, подключается к кластеру через COMConnector, завершает сеансы и записывает все действия в лог-файл.
  • На первом этапе скрипт получает список служб Windows и фильтрует те, которые запускают ragent.exe. Затем он извлекает путь к исполняемому файлу агента и анализирует параметры командной строки, переданные при запуске службы. Эти параметры включают путь к кластеру, порты регистрации и подключения, а также диапазон портов.
  • После этого скрипт проверяет наличие файла агента и извлекает версию платформы 1С. В зависимости от версии создается COM-объект V82.COMConnector или V83.COMConnector, который используется для подключения к агенту по адресу tcp://localhost:<порт>.
  • Скрипт получает список кластеров, аутентифицируется (поля имени и пароля администратора пока пустые), получает список активных сеансов и завершает каждый из них. При завершении сеанса выводится информация о пользователе и идентификаторе сеанса.
Все ключевые действия, включая запуск скрипта, найденные сеансы, завершение каждого сеанса и возможные ошибки, записываются в лог-файл по пути C:\Logs\1C_Session_Termination.log. Каждая запись содержит отметку времени и уровень сообщения (информация или ошибка), что позволяет отслеживать выполнение скрипта и диагностировать проблемы.
Завершения всех активных сеансов пользователей на сервере 1С
$logFile = "C:\Logs\1C_Session_Termination.log"

function Write-Log {
   param (
       [string]$message,
       [string]$level = "INFO"
   )
   $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
   "$timestamp [$level] $message" | Out-File -FilePath $logFile -Append -Encoding UTF8
}

Write-Log "Запуск скрипта завершения сеансов 1С"

$services1C = Get-WmiObject win32_service | ?{$_.Name -like '*'} |
   Select Name, DisplayName, State, PathName |
   Where-Object { $_.PathName -Like "*ragent.exe*" }

$services1C | % {
   $serviceInfo = $_
   $serviceExecPath = $services1C.PathName
   $serviceExecPathRagent = $services1C.PathName.split('"')[1]

   $hash = [ordered]@{}
   $serviceExecPath.Split("-").Trim() | Where-Object { $_.Contains(" ") } | ForEach-Object {
       $name, $value = $_ -split '\s+', 2
       $hash[$name] = $value
   }

   if([System.IO.File]::Exists($serviceExecPathRagent) -ne $true) {
       Write-Log "Файл агента не найден: $serviceExecPathRagent" "ERROR"
       break
   }

   $platformVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($serviceExecPathRagent).FileVersion
   Write-Log "Версия платформы: $platformVersion"

   $clusterPath = $hash.d -replace '"', ''
   $clusterRegPort = $hash.regport
   $clusterPort = $hash.port
   $clusterPortRange = $hash.range
   $clusterRegPath = "$clusterPath\reg_$clusterRegPort"

   $agentPort = $clusterPort
   $agentAddress = "localhost"
   $clusterAdminName = "" # Имя администратора кластера
   $clusterAdminPassword = "" # Пароль администратора кластера
   $fullAgentAddress = "tcp://" + $agentAddress + ":" + $agentPort

   $COMConnector = $null
   try {
       if($platformVersion -like "8.2.*") {
           $COMConnector = New-Object -COMObject "V82.COMConnector"
       }
       if($platformVersion -like "8.3.*") {
           $COMConnector = New-Object -COMObject "V83.COMConnector"
       }

       if($null -ne $COMConnector) {
           $serverAgent = $COMConnector.ConnectAgent($fullAgentAddress)
           $clusterList = $ServerAgent.GetClusters()
           foreach ($cluster in $clusterList) {
               $serverAgent.Authenticate($Cluster, $clusterAdminName, $clusterAdminPassword)

               $serverSessionsData = $serverAgent.GetSessions($cluster)
               $serverSessions = $serverSessionsData.Count
               Write-Log "Найдено $serverSessions сеансов"

               $serverSessionsData | ForEach-Object {
                   $itemSession = $_
                   $serverAgent.TerminateSession($cluster, $itemSession)

                   $userName = $itemSession.userName
                   $sessionId = $itemSession.SessionID
                   $msg = "Завершен сеанс $sessionId. Пользователь: $userName"
                   Write-Host $msg -ForegroundColor Green
                   Write-Log $msg
               }
           }
       }

       $COMConnector = $null
   }
   catch {
       Write-Host "Ошибка при выполнении скрипта." -ForegroundColor Red
       Write-Host "Подробно:" -ForegroundColor Red
       Write-Host $Error[0] -ForegroundColor Red
       Write-Log "Ошибка при выполнении скрипта: $($Error[0])" "ERROR"
   }
}

Write-Log "Скрипт завершён"
2. Скрипт предназначен для поиска установленных приложений 1С:Предприятие на компьютере с операционной системой Windows. Он обращается к системному реестру, чтобы получить информацию о всех установленных программах, и фильтрует только те, в названии которых содержится "1C:Предприятие" или "1C:Enterprise".
  • Сначала скрипт определяет два пути в реестре, где хранятся сведения об установленных приложениях - для 64-битных и 32-битных программ. Затем он перебирает все записи по этим путям, извлекая свойства, такие как название, версия, издатель, дата установки и путь установки. Если дата установки указана в формате "yyyyMMdd", она преобразуется в объект даты.
  • Результат сохраняется в виде списка объектов PowerShell, который затем сортируется по версии приложения в порядке убывания. В финальной части скрипт выводит таблицу с основными характеристиками найденных установок 1С.
Поиск установленных приложений 1С
function Get-1CInstalledApps {
   $registryPaths = @(
       'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*',
       'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
   )

   $apps = @()

   foreach ($path in $registryPaths) {
       Get-ItemProperty $path -ErrorAction SilentlyContinue |
       Where-Object {
           $_.DisplayName -and (
               $_.DisplayName -like "*1C:Предприятие*" -or
               $_.DisplayName -like "*1C:Enterprise*"
           )
       } |
       ForEach-Object {
           $installDate = $_.InstallDate
           if ($installDate -match '^\d{8}$') {
               $installDate = [datetime]::ParseExact($installDate, 'yyyyMMdd', $null)
           }

           $apps += [PSCustomObject]@{
               DisplayName     = $_.DisplayName
               DisplayVersion  = $_.DisplayVersion
               Publisher       = $_.Publisher
               InstallDate     = $installDate
               InstallLocation = $_.InstallLocation
           }
       }
   }

   return $apps
}

# Получение и вывод
$installedApps = Get-1CInstalledApps | Sort-Object DisplayVersion -Descending
$installedApps | Format-Table DisplayName, DisplayVersion, Publisher, InstallDate, InstallLocation -AutoSize

Примерные результаты выполнения скрипта, отображающие найденные установки 1С:Предприятие:

DisplayName                                       DisplayVersion    Publisher             InstallDate    InstallLocation
------------                                              --------------           ---------                  ------------       ----------------
1C:Предприятие 8.3 (8.3.22.1709)    8.3.22.1709        1C Company        13.06.2024    C:\Program Files\1cv8\8.3.22.1709\
1C:Предприятие 8.3 (8.3.20.1863)    8.3.20.1863        1C Company        02.11.2023    C:\Program Files (x86)\1cv8\8.3.20.1863\
1C:Enterprise 8.3 (8.3.18.1208)          8.3.18.1208        1C Company        25.03.2023    C:\Program Files\1cv8\8.3.18.1208\

0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 01.08.2025
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Назад к содержимому