Powershell ошибка попытка выполнить несанкционированную операцию

При расследовании различных инцидентов администратору необходимо получить информацию кто и когда заходил на определенный компьютер Windows. Историю входов пользователя в доменной сети можно получить из журналов контроллеров домена. Но иногда проще получить информацию непосредсвенно из логов компьютера. В этой статье мы покажем, как получить и проанализировать историю входа пользователей на компьютер/сервер Windows. Такая статистика поможет вам ответить на вопрос “Как в Windows проверить кто и когда использовал этот компьютере”.

Содержание:

  • Настройка политики аудита входа пользователей в Windows
  • Поиск событий входа пользователей в журнале событий Windows
  • Анализ событий входа пользователей в Windows с помощью PowerShell

Настройка политики аудита входа пользователей в Windows

Сначала нужно включить политик аудита входа пользователей. На отдельностоящем компьютере для настройки параметров локальной групповой политики используется оснастка gpedit.msc. Если вы хотите включить политику для компьютеров в домене Active Directorty, нужно использовать редактор доменных GPO (
gpmc.msc
).

  1. Запустите консоль GPMC, создайте новую GPO и назначьте ее на Organizational Units (OU) с компьютерами и / или серверами, для которых вы хотите включить политику аудита событий входа;
  2. Откройте объект GPO и перейдите в раздел Computer Configuration -> Policies -> Windows Settings -> Security Settings –> Advanced Audit Policy Configuration -> Audit Policies -> Logon/Logoff;
  3. Включите две политики аудита Audit Logon и Audit Logoff. Это позволит отслеживать как события входа, так и события выхода пользователей. Если вы хотите отслеживать только успешные события входа, включите в настройках политик только опцию Success; груповая политика - аудит событий входа на компьютеры windows
  4. Закройте редактор GPO и обновите настройки политик на клиентах.

Поиск событий входа пользователей в журнале событий Windows

После того как вы включили политики аудита входа, при каждом входе пользователя в Windows в журнале Event Viewer будет появляться запись о входе. Посмотрим, как она выглядит.

  1. Откройте оснастку Event Viewer (
    eventvwr.msc
    );
  2. Разверните секцию Windows Logs и выберите журнал Security;
  3. Щелкните по нему правой клавишей и выберите пункт Filter Current Log;
  4. В поле укажите ID события 4624 и нажмите OK; фильтр событий event viewer
  5. В окне события останутся только события входа пользователей, системных служб с описанием
    An account was successfully logged on
    ;
  6. В описании события указано имя и домен пользователя, вошедшего в систему:
    New Logon:
    Security ID: WINITPROa.khramov
    Account Name: a.khramov
    Account Domain: WINITPRO

событие eventid 4626 - локальный вход пользователя в windows

Ниже перечислены другие полезные EventID:

Event ID Описание
4624 A successful account logon event
4625 An account failed to log on
4648 A logon was attempted using explicit credentials
4634 An account was logged off
4647 User initiated logoff

Если полистать журнал событий, можно заметить, что в нем присутствуют не только события входа пользователей на компьютер. Здесь также будут события сетевого доступа к этому компьютеру (при открытии по сети общих файлов или печати на сетевых принтерах), запуске различных служб и заданий планировщика и т.д. Т.е. очень много лишний событий, которые не относятся ко входу локального пользователя. Чтобы выбрать только события интерактивного входа пользователя на консоль компьютера, нужно дополнительно сделать выборку по значению параметра Logon Type. В таблице ниже перечислены коды Logon Type.

Код Logon Type Описание
0 System
2 Interactive
3 Network
4 Batch
5 Service
6 Proxy
7 Unlock
8 NetworkCleartext
9 NewCredentials
10 RemoteInteractive
11 CachedInteractive
12 CachedRemoteInteractive
13 CachedUnlock

При удаленном подключении к рабочему столу компьютера по RDP, в журнале событий появится записи с Logon Type 10 или 3. Подробнее об анализе RDP логов в Windows.

В соответствии с этой таблицей событие локального входа пользователя на компьютер должно содержать Logon Type: 2.

Для фильтрации события входа по содержать Logon Type лучше использовать PowerShell.

Анализ событий входа пользователей в Windows с помощью PowerShell

Допустим, наша задача получить информацию о том, какие пользователи входили на этот компьютер за последнее время. Нам интересует именно события интерактивного входа (через консоль) с
LogonType =2
. Для выбора события из журналов Event Viewer мы воспользуемся командлетом Get-WinEvent.

Следующий PowerShell скрипт выведет история входа пользователей на текущий компьютер и представит ее в виде графической таблицы Out-GridView.

$query = @'
<QueryList>
<Query Id='0' Path='Security'>
<Select Path='Security'>
*[System[EventID='4624']
and(
EventData[Data[@Name='VirtualAccount']='%%1843']
and
EventData[Data[@Name='LogonType']='2']
)
]
</Select>
</Query>
</QueryList>
'@
$properties = @(
@{n='User';e={$_.Properties[5].Value}},
@{n='Domain';e={$_.Properties[6].Value}},
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='LogonType';e={$_.Properties[8].Value}}
)
Get-WinEvent -FilterXml $query | Select-Object $properties|Out-GridView

poweshell скрипт для получения списка пользователей, которые входили на этот компьтер

Если нужно выбрать события входа за последние несколько дней, можно добавить pipe с таким условием:

|Where-Object {$_.TimeStamp -gt '5/10/22'}

Командлет Get-WinEvent позволяет получить информацию с удаленных компьютеров. Например, чтобы получить историю входов с двух компьютеров, выполните следующий скрипт:

'msk-comp1', 'msk-comp2' |
ForEach-Object {
Get-WinEvent -ComputerName $_ -FilterXml $query | Select-Object $properties
}

Если протокол RPC закрыт между компьютерами, вы можете получить данные с удаленных компьютеров с помощью PowerShell Remoting командлета Invoke-Command:

Invoke-Command -ComputerName 'msk-comp1', 'msk-comp2' {Get-WinEvent -FilterXml $query | Select-Object $properties}

  • Remove From My Forums
  • Вопрос

  • Коллеги, приветствую.

    Ситуацию такая: написан скрипт (ПоверШел), который ищет на контроллере домена в журнале Security определенные события. При запуске этого скрипта от имени администратора, все ОК, а вот при запуске от имени пользователя входящего в группу Администраторы домена
    получаю ошибку в консоли:

    Get-WinEvent : Не удалось получить сведения о журнале Security. Ошибка: Попытка выполнить несанкционированную операцию..

    Ясно, что отсутствует доступ к данному журналу. 

    Собственно вопрос: как дать доступ пользователю или группе доступ к данному журналу? Желательно только на чтение

Ответы

  • есть такая группа, Event Log Readers, лучше использовать ее — запускать скрипты из под админа очень плохо.

    • Помечено в качестве ответа

      29 октября 2012 г. 6:16

  • Такая же группа есть и в домене. Смотрите внимательнее.

    • Помечено в качестве ответа
      Евгений86749
      29 октября 2012 г. 3:33

После моего комментария:

На самом деле это не проблема PowerShell, а ваша ошибка. Будь то из-за обновления, с которым мы не можем помочь с устранением неполадок, если с этим не столкнулись. Аналогично данным, полученным при поиске ниже.

‘get-eventlog: попытка выполнить несанкционированную операцию’

Почему вы это делаете?

$after = Get-Date -Date $startDate

Это просто присвоение StartDate новой переменной, а затем использование новой переменной позже, а не просто использование исходной переменной, что делает одну или другую избыточной.

# Refactored code using Get-WinEvent instead

$StartDate = (Get-Date)

'power','error' | 
ForEach {
    switch ($PSItem) 
    { 
        power 
        {
            "Getting $PSItem data"
            Get-WinEvent -FilterHashtable @{
                LogName     = 'System'
                Id          = 1, 42
                StartTime   = $StartDate
            } | 
            Select-Object -Property LogName, TimeCreated, Id, Level | 
            Export-Csv -Path "D:Temp$($PSItem)Report.Csv"   
        } 
        error 
        {
            "Getting $PSItem data"
            Get-WinEvent -FilterHashtable @{
                LogName     = 'System'
                Id          = 17
                StartTime   = $StartDate
            } | 
            Select-Object -Property LogName, TimeCreated, Id, Level | 
            Export-Csv -Path "D:Temp$($PSItem)Report.Csv"         
        } 
        default {Write-Warning -Message 'No records which meet the criteria provided.'}
    }
}
# Results
<#
Getting power data
Getting error data
#>

'power','error' | 
ForEach {
    "`nShowing report for System log $PSItem data"
    Import-Csv -Path "D:Temp$($PSItem)Report.Csv"
}
# Results
<#
Showing report for System log power data

LogName TimeCreated        Id Level
------- -----------        -- -----
System  03-Aug-20 13:44:49 1  4    
System  03-Aug-20 13:44:42 1  4    
System  03-Aug-20 01:53:27 42 4    

Showing report for System log error data
System  01-Aug-20 15:13:27 17 4    
System  01-Aug-20 15:13:21 17 4    
System  01-Aug-20 15:13:20 17 4 
#>

Что это делает и почему это часть вашего сообщения? Нет никакого контекста того, какие данные установлены вашим опубликованным запросом.

'Populate MySQL tables'
.sessions

(У меня пока недостаточно репутации, чтобы комментировать…)

Когда вы запускаете его как служебную учетную запись на вашем компьютере, повышается ли приглашение Powershell?

Я получал эту ошибку (доступ к реестру не разрешен) при запуске Powershell в приглашении без повышенных прав на моем компьютере.

Знаете ли вы, что такое политика выполнения на удаленных машинах? Я не уверен, имеет ли это значение, так как командлет удален сам, но, возможно, стоит проверить.

Также, к вашему сведению:

Труба в любом случае является естественным разрывом линии, вам не нужны обратные черты (просто не оставляйте пробелов после трубы).

Например:

cmdlet1 |
 cmdlet2 |
  cmdlet 3

Я эквивалентен администратору домена, я пытался работать в консоли с повышенными правами (щелкните правой кнопкой мыши> запустить от имени администратора), и я постоянно получаю ошибки при выполнении

get-winevent -logname application | where {$_.message -match "Faulting application"} | `
                                    select TimeCreated,message

Я получу три строки результата, тогда

Get-WinEvent : Attempted to perform an unauthorized operation.
At line:1 char:13 Get-WinEvent : Attempted to perform an unauthorized operation.
 + CategoryInfo          : NotSpecified: (:) [Get-WinEvent], UnauthorizedAccessException
 + FullyQualifiedErrorId : Attempted to perform an unauthorized operation.,Microsoft.PowerShell.Commands.GetWinEventCommand

Похоже, что это новая разработка, ранее не было таких ошибок.

Это согласуется — если я запускаю его с -computername с другого сервера, шаблон все равно отправляет 3 строки OK, затем X ошибок, затем 5 строк OK и т. Д.

Понравилась статья? Поделить с друзьями:
  • Powershell вывод в консоль ошибок
  • Powershell все ошибки в файл
  • Prinfix ошибка файл не найден обратитесь к администратору
  • Prince of persia warrior within ошибка русский язык ввода
  • Prince of persia the warrior within синтаксическая ошибка