PowerShell: завершить все сеансы 1С на сервере через COM
PowerShell
$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)
{
break
}
$platformVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($serviceExecPathRagent).FileVersion
$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;
$serverSessionsData | ForEach-Object {
$itemSession = $_;
$serverAgent.TerminateSession($cluster, $itemSession)
$userName = $itemSession.userName
$sessionId = $itemSession.SessionID
Write-Host "Завершен сеанс $sessionId. Пользователь: $userName" -ForegroundColor Green
}
}
}
$COMConnector = $null
}
catch {
Write-Host "Ошибка при выполнении скрипта." -ForegroundColor Red;
Write-Host "Подробно:" -ForegroundColor Red
Write-Host $Error[0] -ForegroundColor Red
}
}
✍️ @odin1C_rus