有人可以帮助Powershell脚本复制最近24小时时间戳的日志文件

时间:2017-03-18 05:11:43

标签: powershell-v3.0

我们有很多服务器需要从每个服务器的多个文件夹中复制日志文件,并转储到具有相应服务器名称的文件夹中,  我们需要来自这些文件夹的最后24小时的时间戳日志。我们需要把它放在计划任务中。

最近24小时来自事件查看器的Windows日志,应用程序日志,安全日志,系统日志

提前感谢您的帮助。

以下是代码:

$ScriptStart = Get-Date
$PreviousTime = $ScriptStart.AddHours(-24)
$source = '\\Servername\Temp\test'
$destination = '\\Servername\Temp'
gci $source -Recurse -File | ? {
  $_.LastWriteTime -lt $ScriptStart -and
  $_.LastWriteTime -gt $PreviousTime
} | Copy-Item -Destination $destination
$temp = Get-EventLog -LogName Application -After $PreviousTime -Before $ScriptStart -ComputerName servername
$temp | select EventID, MachineName, message |
  Export-Csv '\\Servername\Temp\event1.csv'

我需要在具有不同文件夹的服务器列表上运行它。这就是我被困住的地方。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,那么将代码更改为以下内容就足够了:

...
$servers = 'server_a', 'server_b', 'server_c', ...

foreach ($server in $servers) {
  $source = "\\$server\Temp\test"
  $destination = "C:\central\folder\$server"

  if (-not (Test-Path -LiteralPath $destination)) {
    New-Item -Type Directory -Path $destination | Out-Null
  }

  Get-ChildItem $source -Recurse -File | Where-Object {
    $_.LastWriteTime -lt $ScriptStart -and
    $_.LastWriteTime -gt $PreviousTime
  } | Copy-Item -Destination $destination

  Get-EventLog -LogName Application -After $PreviousTime -Before $ScriptStart -Computer $server |
    Select-Object EventID, MachineName, Message |
    Export-Csv 'C:\path\to\events.csv' -Append -NoType
}

如果每个服务器的源文件夹不同,您可能需要在哈希表中创建servername到source文件夹的映射:

$sourcePath = @{
  'server_a' = 'foo\bar'
  'server_b' = 'baz\something'
  ...
}

并更改

$source = "\\$server\Temp\test"

$source = '\\{0}\{1}' -f $server, $sourcPath[$server]