Автор Тема: как отследить вкл и выкл компов в сети  (Прочитано 35767 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: как отследить вкл и выкл компов в сети
« Ответ #30 : 05 ноября 2010, 11:30:03 »
File C:\Documents and Settings\user\My Documents\WindowsPowerShell\logInlogOff.ps1 cannot be loaded because the execution o
f scripts is disabled on this system. Please see "get-help about_signing" for more details.

ЗЫ Нашел еще одну ошибку в своем скрипте. Пофиксю - выложу новую версию.
« Последнее редактирование: 05 ноября 2010, 11:36:14 от shs »

Оффлайн risc

  • Модератор
  • Старожил
  • *****
  • Сообщений: 848
  • Рейтинг: 7
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: раша
Re: как отследить вкл и выкл компов в сети
« Ответ #31 : 05 ноября 2010, 11:31:51 »
мне кажется вариант дарка самый оптимальный:
Цитировать
так при аудите в эвенты в безопасность падают события входа\выхода (540\538) пользователя
а от туда потом можно вытягивать в какой то отчет события с этим кодом
имхо
Кто понял жизнь, тот не торопится...

Оффлайн Xiatsu

  • Постоялец
  • ***
  • Сообщений: 116
  • Рейтинг: 0
    • Просмотр профиля
Re: как отследить вкл и выкл компов в сети
« Ответ #32 : 05 ноября 2010, 11:35:53 »
risc
ага, устраивает вполне, только вот в poweShell я совсем новичок ???

Оффлайн Kazun

  • Пользователь
  • **
  • Сообщений: 73
  • Рейтинг: 9
    • Просмотр профиля
  • Откуда: Иваново
Re: как отследить вкл и выкл компов в сети
« Ответ #33 : 05 ноября 2010, 12:33:26 »
установил PowerGUI
вставил туда ваш скрипт, поставил свой домен в скрипте
при запуске идут ошибки:
File C:\Documents and Settings\user\My Documents\WindowsPowerShell\logInlogOff.ps1 cannot be loaded because the execution o
f scripts is disabled on this system. Please see "get-help about_signing" for more details.
At line:1 char:2
+ . <<<<  'C:\Documents and Settings\user\My Documents\WindowsPowerShell\logInlogOff.ps1'
    + CategoryInfo          : NotSpecified: ( : ) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException
Установите политику выполнения скриптов (подробнее get-help about_signing).
Set-ExecutionPolicy RemoteSigned

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: как отследить вкл и выкл компов в сети
« Ответ #34 : 05 ноября 2010, 13:46:18 »
Вот, этот вариант должен работать правильно(тьфу-тьфу-тьфу)

<# Функция Get-LogonLogoffEvts предназначена для получения массива объектов,
    содержащих информацию о событиях входа/ выхода на заданном компьютере
#>
Function Get-LogonLogoffEvts ($CompName, $Before=(Get-Date).AddDays(1).Date, $After=(Get-Date).Date) {
    #массив, в который будем собирать информацию входа/выхода для заданного компьютера
    $arrLogOnOffEvts=@()
    #Перебираем все события с EventID равными 528|538 в заданном диапазоне даты/времени
    Get-EventLog -ComputerName $CompName -InstanceId 528,538 -LogName Security -After $After -Before $Before|%{
        #создадим новый объект, в который будем записывать информацию об очередном событии входа/выхода
        $objLogOnOffEvt=New-Object PSObject -Property @{
            CompName=$CompName;
            TimeGenerated=$null;
            User=$null;
            Domain=$null;
            LogonType=$null;
        }
        #и сохраняем всю полезную информацию о событии в объете $objLogOnOffEvt
        $objLogOnOffEvt.TimeGenerated=$_.TimeGenerated
        switch -regex ($_.Message) {
            "Пользователь:\s+(\w+(?:\s\w+)*)" {$objLogOnOffEvt.User=$Matches[1]}
            "Домен:\s+(\w+(?:\s\w+)*)"       {$objLogOnOffEvt.Domain=$Matches[1]}
            "Тип входа:\s+(\d+)"  {$objLogOnOffEvt.LogonType=$Matches[1]}
        }
        #добавляем информацию об очередном событии в массив
        #$objLogOnOffEvt
        $arrLogOnOffEvts+=$objLogOnOffEvt
    }
    #возвращаем, как результат работы функции, информацию о всех собранных событиях
    $arrLogOnOffEvts
}
#
#====================================== Точка входа скрипта ==================================
#
#Полное имя файла отчета
$ReportFileName="c:\temp\Report.csv"
#Массив, в который будем собирать информацию о событиях входа/выхода, собранную со всех опрашиваемых компьютеров
$arrReport=@()
#Зададим корневое OU, с которого будет начат поиск компьютеров
$SearchRoot="domain.local/Workstations"
#Выбираем из заданной ветки все неотключенные учетные записи компьютеров
$arrComps = Get-QADComputer -ErrorAction SilentlyContinue -SearchRoot $SearchRoot -SizeLimit 0 |
    select name, @{Name="Disabled"; Exp={$_.useraccountcontrol -band 2}}|
   ?{$_.Disabled -eq 0}| select -ExpandProperty name
#можно было бы и далше продолжать передавать данные по конвейеру, но мы не будем этого делать
#(чтобы упростить отладку и облегчить восприятие)
#для каждого компьютера из списка...
$arrComps|foreach {
    ##...если компьютер доступен (пингуется)...
    if (Test-Connection $_ -Count 1 -Quiet) {
        Write-Host $_
        ###...добавляем информацию о событиях входа/выхода текущего компьютера к общему отчету
        $arrReport+=Get-LogonLogoffEvts $_
        #$arrReport
    }
}
#Выгружаем сформированный отчет в файл-csv, который удобно обрабатывать в excel
$arrReport|Export-Csv -Path $ReportFileName -UseCulture -Encoding Default

Исправлена была ошибка в функции Get-LogonLogoffEvts, которая заключалась в следующем:
объекты (впрочем, как и массивы) в PoSh присваиваются по ссылке (о чем я очередной раз позабыл).
 
Проще всего это продемонстрировать на примере:
 
PS(1)> $a=New-Object PSObject -Property @{
>> Prop1="1"
>> ;
>> Prop2="2"}
>>
PS(2)> $a
Prop2                                                       Prop1
-----                                                       -----
2                                                           1

PS(3)> $b=$a
PS(4)> $b
Prop2                                                       Prop1
-----                                                       -----
2                                                           1

PS(5)> $a.Prop1="3"
PS(6)> $a
Prop2                                                       Prop1
-----                                                       -----
2                                                           3

PS(7)> $b
Prop2                                                       Prop1
-----                                                       -----
2                                                           3
Как видите после того, как объект $a был изменен, меняется и объект $b (для которорого мы ранее выполняли присвоение $b=$a)
 
ЗЫ Скорость работы, конечно, оставляет желать... Посему, возможно потребуется реализация альтернативных вариантов. Каковы они?
Использование уже упоминавшегося snmp (минусы: большое кол-во подготовительной работы, которую придется проделать перед использованием).
Вместо использования snmp создание тригеров, реагирующих на возникновение нужнах нам событий средствами windows. Например, использование встроенных команд eventtriggers /? или использование PowerShell, наприме так "Hey, PowerShell Guy ! How Can I Monitor Event Log Messages for Specific Words?" или как-то аналогично.
« Последнее редактирование: 05 ноября 2010, 14:56:22 от shs »

Оффлайн Xiatsu

  • Постоялец
  • ***
  • Сообщений: 116
  • Рейтинг: 0
    • Просмотр профиля
Re: как отследить вкл и выкл компов в сети
« Ответ #35 : 05 ноября 2010, 14:02:48 »
shs
ошибка выскакивает таже
cannot be loaded because t
he execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
подскажите где исправить настройки?

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: как отследить вкл и выкл компов в сети
« Ответ #36 : 05 ноября 2010, 14:17:10 »
ошибка выскакивает таже
Давайте прочитаем уже сообщение об ошибке, ок? Что же там говорится? Что нам советует PowerShell?

Оффлайн Xiatsu

  • Постоялец
  • ***
  • Сообщений: 116
  • Рейтинг: 0
    • Просмотр профиля
Re: как отследить вкл и выкл компов в сети
« Ответ #37 : 05 ноября 2010, 14:19:09 »
так я уже писал
вот:
File C:\Documents and Settings\user\Local Settings\Temp\abb6a0e1-5ea1-4502-83ec-cd799a9b3f5a.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
At line:1 char:2
+ . <<<<  'C:\Documents and Settings\user\Local Settings\Temp\abb6a0e1-5ea1-4502-83ec-cd799a9b3f5a.ps1'
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: как отследить вкл и выкл компов в сети
« Ответ #38 : 05 ноября 2010, 14:23:30 »
я уже прочитал и понял, о чем идет речь. Теперь хочу добиться от вас того же (если не понимания, то, хотя бы, самостоятельного прочтения. понять я вам помогу).
Вы сами прочитали сообщение об ошибке?
Что там написано? Почему не хочет работать скрипт? Расскажите мне.

Оффлайн Xiatsu

  • Постоялец
  • ***
  • Сообщений: 116
  • Рейтинг: 0
    • Просмотр профиля
Re: как отследить вкл и выкл компов в сети
« Ответ #39 : 05 ноября 2010, 14:26:17 »
ну конечно понял :)
только не знаю где исправить
политика выполнения запрещает запуск неподписанных сценариев. либо надо подписать сценарий, либо установить разрешающую политику
так?

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: как отследить вкл и выкл компов в сети
« Ответ #40 : 05 ноября 2010, 14:30:34 »
так?
Правильно. А вы выполнили команду,  которую рекомендует вам PoSh? get-help about_signing ???

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: как отследить вкл и выкл компов в сети
« Ответ #41 : 05 ноября 2010, 14:32:53 »
если бы выполнили, то смогли бы прочитать следующее:
Цитировать
Для выполнения неподписанных скриптов, созданных на локальном
компьютере, и подписанных скриптов других пользователей, нужно
использовать следующую команду для изменения политики исполнения на
RemoteSigned:

    set-executionpolicy remotesigned

Оффлайн Xiatsu

  • Постоялец
  • ***
  • Сообщений: 116
  • Рейтинг: 0
    • Просмотр профиля
Re: как отследить вкл и выкл компов в сети
« Ответ #42 : 05 ноября 2010, 14:35:36 »
при выполнении указанных команд, таже самая ошибка :(

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: как отследить вкл и выкл компов в сети
« Ответ #43 : 05 ноября 2010, 14:38:00 »
при выполнении указанных команд, таже самая ошибка :(
не верю

Оффлайн Xiatsu

  • Постоялец
  • ***
  • Сообщений: 116
  • Рейтинг: 0
    • Просмотр профиля
Re: как отследить вкл и выкл компов в сети
« Ответ #44 : 05 ноября 2010, 14:41:46 »
у меня при запуске powergui
пишет
AuthorizationManager check failed.
At line:1 char:2
+ . <<<<  'C:\Documents and Settings\user\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1'
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException