有人可以帮助 Powershell 脚本复制带有最后 24 小时时间戳的日志文件吗
Can some one help in Powershell script to copy log files with last 24 hour time stamp
我们有一堆服务器,我们需要从每个服务器的多个文件夹中复制日志文件,并转储到具有各自服务器名称的文件夹中,
我们需要这些文件夹中最近 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'
我需要它在服务器列表中 运行,具有不同的文件夹。那就是我被困的地方。
如果我没看错你的问题,把你的代码改成这样就足够了:
...
$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
}
如果每个服务器的源文件夹不同,您可能需要在哈希表中创建服务器名到源文件夹的映射:
$sourcePath = @{
'server_a' = 'foo\bar'
'server_b' = 'baz\something'
...
}
并改变
$source = "\$server\Temp\test"
到
$source = '\{0}\{1}' -f $server, $sourcPath[$server]
我们有一堆服务器,我们需要从每个服务器的多个文件夹中复制日志文件,并转储到具有各自服务器名称的文件夹中, 我们需要这些文件夹中最近 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'
我需要它在服务器列表中 运行,具有不同的文件夹。那就是我被困的地方。
如果我没看错你的问题,把你的代码改成这样就足够了:
...
$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
}
如果每个服务器的源文件夹不同,您可能需要在哈希表中创建服务器名到源文件夹的映射:
$sourcePath = @{
'server_a' = 'foo\bar'
'server_b' = 'baz\something'
...
}
并改变
$source = "\$server\Temp\test"
到
$source = '\{0}\{1}' -f $server, $sourcPath[$server]