none
Сохранение системного лога удалённого компьютера. RRS feed

  • Вопрос

  • Всем привет!

    Помогите со скриптом - нужно с нескольких компов удалённо сохранить системный лог Security.

    Как это реализовать? И можно ли удалённо сохранить средствами PoSh лог в формате *.evtx???

    Все компы в домене. Уровень домена 2012 R2.

    Всем заранее спасибо!

    15 августа 2016 г. 6:15

Ответы

  • $plog = "C:\Logs"
    md $plog | Out-Null
    "pc1","pc2","pc3" | Foreach {
    	$ComputerName = $_
    	$log = get-wmiobject win32_nteventlogfile -filter "logfilename = 'security'" -ComputerName $ComputerName
    	$file = "{0}_{1}_{2}.evtx" -f (get-date -f "yyyyMMdd"),$log.CSName,$log.FileName.Replace(" ","")
    	$path = Join-Path (Split-Path $log.Name) $file
    	$npath = "\\$ComputerName\" + $path.replace(":",'$')
    	if($log) {
    		$result = $log.BackupEventlog($path)
    		If($result.ReturnValue -eq 0) {
    			Copy-Item $npath $plog
    			Remove-Item $npath
    		}
    	}
    }


    • Изменено KazunEditor 15 августа 2016 г. 7:17
    • Помечено в качестве ответа Igor3000 15 августа 2016 г. 7:43
    15 августа 2016 г. 7:14
    Отвечающий
  • if($log) {
    		$result = $log.BackupEventlog($path)
    		If($result.ReturnValue -eq 0) {
    			Copy-Item $npath $plog
    			Remove-Item $npath
    		}
    	}
    	else {
    		$ComputerName | Out-File "$plog\errors.txt" -Append
    	}

    • Помечено в качестве ответа Igor3000 15 августа 2016 г. 7:43
    15 августа 2016 г. 7:23
    Отвечающий

Все ответы

  • $log = "C:\Logs"
    md $log | Out-Null
    "PC1","PC2","PC3" | Foreach {
    	$ComputerName = $_
    	$log = get-wmiobject win32_nteventlogfile -filter "logfilename = 'security'" -ComputerName $ComputerName
    	$file = "{0}_{1}_{2}.evtx" -f (get-date -f "yyyyMMdd"),$log.CSName,$log.FileName.Replace(" ","")
    	$path = Join-Path (Split-Path $log.Name) $file
    	$npath = "\\$ComputerName\" + $path.replace(":",'$')
    	if($log) {
    		$result = $log.BackupEventlog($path)
    		If($result.ReturnValue -eq 0) {
    			Copy-Item $npath $log
    			Remove-Item $npath
    		}
    	}
    }

    15 августа 2016 г. 6:42
    Отвечающий
  • пишет:

    md : An item with the specified name C:\Log already exists.
    At line:2 char:1
    + md $log | Out-Null
    + ~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ResourceExists: (C:\Log:String) [New-Item], IOException
        + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
     
    Copy-Item : Illegal characters in path.
    At line:12 char:4
    +             Copy-Item $npath $log
    +             ~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Copy-Item], ArgumentException
        + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.CopyItemCommand

    15 августа 2016 г. 6:52
  • Вывод переменной $npath.
    15 августа 2016 г. 6:54
    Отвечающий
  • \\dom-N-793\C$\Windows\System32\Winevt\Logs\20160815_dom-N-793_Security.evtx
    15 августа 2016 г. 6:57
  • \\dom-N-793\C$\Windows\System32\Winevt\Logs\20160815_dom-N-793_Security.evtx

    Корректно указан путь в $log?

    Test-Path $npath

    15 августа 2016 г. 6:59
    Отвечающий
  • пишет False. Хотя по пути \\dom-n-793\c$\Windows\System32\Winevt\Logs заходит и там есть логи
    15 августа 2016 г. 7:14
  • $plog = "C:\Logs"
    md $plog | Out-Null
    "pc1","pc2","pc3" | Foreach {
    	$ComputerName = $_
    	$log = get-wmiobject win32_nteventlogfile -filter "logfilename = 'security'" -ComputerName $ComputerName
    	$file = "{0}_{1}_{2}.evtx" -f (get-date -f "yyyyMMdd"),$log.CSName,$log.FileName.Replace(" ","")
    	$path = Join-Path (Split-Path $log.Name) $file
    	$npath = "\\$ComputerName\" + $path.replace(":",'$')
    	if($log) {
    		$result = $log.BackupEventlog($path)
    		If($result.ReturnValue -eq 0) {
    			Copy-Item $npath $plog
    			Remove-Item $npath
    		}
    	}
    }


    • Изменено KazunEditor 15 августа 2016 г. 7:17
    • Помечено в качестве ответа Igor3000 15 августа 2016 г. 7:43
    15 августа 2016 г. 7:14
    Отвечающий
  • ай спасибо! Как всегда помогли!!!!

    А можно попросить добавить в скрипт проверку компа на доступность и вывод в файл компов где не удалось полцсить???

    Извените если слишком наглею....

    15 августа 2016 г. 7:21
  • if($log) {
    		$result = $log.BackupEventlog($path)
    		If($result.ReturnValue -eq 0) {
    			Copy-Item $npath $plog
    			Remove-Item $npath
    		}
    	}
    	else {
    		$ComputerName | Out-File "$plog\errors.txt" -Append
    	}

    • Помечено в качестве ответа Igor3000 15 августа 2016 г. 7:43
    15 августа 2016 г. 7:23
    Отвечающий
  • ай спасибо! Как всегда выручили!!!
    15 августа 2016 г. 7:43