Загрузка данных


# ================= НАСТРОЙКИ DIRECTUM 5.2 =================
\$Server   = "192.168.1.100"       # IP-адрес или имя сервера
\$Database = "DirectumDB"          # Имя базы данных
\$User     = "ИвановИИ"            # Ваш логин
\$Password = "ВашПароль"           # Ваш пароль
\$Interval = 10                    # Интервал между попытками в секундах

# Стандартный путь к программе
\$DirectumPath = "C:\Program Files (x86)\NPO Computer\Directum\sbmain.exe"
# ==========================================================

Clear-Host
Write-Host "=== Автоматический штурм лицензий DIRECTUM 5.2 запущен ===" -ForegroundColor Cyan
Write-Host "Мониторинг запущен для пользователя: \$User" -ForegroundColor Gray

# Создаем объект для имитации нажатий клавиш и управления окнами
\$wshell = New-Object -ComObject WScript.Shell

while (\$true) {
    Write-Host "[\$(Get-Date -Format 'HH:mm:ss')] Попытка подключения..." -ForegroundColor White
    
    # 1. Запускаем DIRECTUM (без пароля, только сервер, база и логин)
    \$Arguments = "-S=`"$Server`" -D=`"$Database`" -U=`"$User`""
    \$Process = Start-Process -FilePath DirectumPath -ArgumentList Arguments -PassThru
    
    # 2. Ждем появления окна ввода пароля (максимум 5 секунд)
    \$Timeout = 5
    WindowFound = false
    
    for (i = 0; i -lt Timeout; i++) {
        # Пытаемся сделать окно DIRECTUM активным
        if (\$wshell.AppActivate("Вход в систему DIRECTUM")) {
            WindowFound = true
            break
        }
        Start-Sleep -Milliseconds 500
    }
    
    if (\$WindowFound) {
        Start-Sleep -Milliseconds 300 # Короткая пауза для стабильности
        
        # 3. «Печатаем» пароль и нажимаем Enter
        \$wshell.SendKeys(\(Password)\)wshell.SendKeys("{ENTER}")
        
        # 4. Ждем, чтобы понять: пустило нас или выскочила ошибка «Нет лицензий»
        Start-Sleep -Seconds 3
        
        # Проверяем, существует ли еще процесс. 
        # Если лицензии нет, DIRECTUM выведет ошибку или закроется.
        if (\$Process.HasExited) {
            Write-Host "   [Результат]: Мест нет. Окно закрылось." -ForegroundColor Yellow
        } else {
            # Если окно ошибки «Превышено число лицензий» открылось, у него будет другой заголовок.
            # Нам нужно закрыть DIRECTUM, чтобы запустить его заново на следующем круге.
            if (\$wshell.AppActivate("DIRECTUM")) {
                Write-Host "   [Результат]: Обнаружено окно ошибки. Закрываем..." -ForegroundColor Yellow
                \$wshell.SendKeys("{ENTER}") # Закрываем нажатием ОК на ошибке
                Start-Sleep -Milliseconds 500
                Stop-Process -Id \$Process.Id -Force -ErrorAction SilentlyContinue
            } else {
                # Если процесс активен и окон ошибок нет — значит мы успешно зашли!
                Write-Host "   [Успех]: Лицензия поймана! Приятной работы." -ForegroundColor Green
                break
            }
        }
    } else {
        Write-Host "   [Ошибка]: Окно авторизации не появилось. Проверьте параметры запуска." -ForegroundColor Red
        Stop-Process -Id \$Process.Id -Force -ErrorAction SilentlyContinue
    }
    
    Write-Host "Ожидание \$Interval сек перед следующей попыткой..." -ForegroundColor Gray
    Start-Sleep -Seconds \$Interval
}