我们有很多服务器需要从每个服务器的多个文件夹中复制日志文件,并转储到具有相应服务器名称的文件夹中, 我们需要来自这些文件夹的最后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'
我需要在具有不同文件夹的服务器列表上运行它。这就是我被困住的地方。
答案 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]