• Запрет RDP для определённых пользователей с определённых IP?

    @sst_fanat
    xsash,
    $localnet = "1.1.*"
    $localnetvpn = "2.2.2.*"
    function userfail
    {
    $queryResults = (qwinsta $args[0] | foreach { (($_.trim() -replace "\s+",","))} | ConvertFrom-Csv) #запрашиваем инфо о сессии rdp пользователя, переводим полученное в таблицу
    logoff $queryResults.ID # Отключаем сеанс неугодных
    $usera = $args[0] #Первый аргумент ФУНуции
    $ipa = $args[1]

    Write-EventLog -logname rdpuserfail -source powershell.exe -message "Сессия RDP завершена`nUSER: $usera `nIP: $ipa пользователь отключен." -eventid 1 #Заносим попытку входа не с разрешенного IP в журнал
    $ObjUser = [ADSI]"WinNT://servername/$usera" #Кладем пользователя в ObjUser
    $objUser.userflags = $objUser.userflags[0] -bor 2 #ставим галочку что пользователь отключен
    $objUser.setinfo() #Записываем инфо в учетную запись
    }
    $eventuser = Get-EventLog -Logname security -message "*Тип входа:???10*" -Newest 1 #| ?{$_.eventid -eq 4624 } #получаем из журнала secyrity последнюю запись об успешном входе последнего пользователя rdp(тип входа 10)
    if ($eventuser -ne $null) {
    $message = $eventuser.message.substring($eventuser.message.indexof("Новый вход:"),($eventuser.message.indexof("Сведения о проверке подлинности:")-$eventuser.message.indexof("Новый вход:"))) #вырезаем из сообщения журнала только нужное от нового входа до сведений о проверке подлинности(в начале журнала дублируется имя пользователя неверное)
    #IP
    $StartstringIP = ($message.indexof("Сетевой адрес источника:"))+25 #находим позицию вхождения строки, добавляем длинну вхождения чтоб начать вырезать IP адрес а не начало строки
    $endstringIP = ($message.indexof("Порт источника:"))-3 #в журнале следующая строка отделяется 3 переводами строки
    $Ipstring = $message.substring($StartstringIP,$endstringIP-$StartstringIP) # режем только необходимое
    #USER
    $Startstringuser = ($message.indexof("Имя учетной записи:"))+21
    $endstringuser = ($message.indexof("Домен учетной записи:"))-3
    $userstring = $message.substring($Startstringuser,$endstringuser-$Startstringuser)

    #Проверка разрешений для пользователей

    switch ($userstring) {
    #Локальная сеть
    user1 {if ($Ipstring -notlike $localnet) {userfail $userstring $Ipstring}; break}

    }

    }

    Работает на windows server 2008r2