2015-04-29 4 views
0

Мы пытаемся запустить скрипт с кучей удаленных компьютеров, чтобы проверить штампы даты файлов в фиксированной папке, которая старше 12 часов и вернуть результаты в CSV. Диапазон дат должен быть гибким, так как это установленное время в 18:00 вчера, которое будет двигаться с течением времени.Проверьте файлы на удаленных компьютерах на отметку времени старше X часов и экспортируйте результаты в CSV

$computers = Get-Content -Path computers.txt 
$filePath = "c:\temp\profile" 
$numdays = 0 
$numhours = 12 
$nummins = 5 
function ShowOldFiles($filepath, $days, $hours, $mins) 
{ 
    $files = $computers @(get-childitem $filepath -include *.* -recurse | where {($_.LastWriteTime -lt (Get-Date).AddDays(-$days).AddHours(-$hours).AddMinutes(-$mins)) -and ($_.psIsContainer -eq $false)}) 
    if ($files -ne $NULL) 
    { 
     for ($idx = 0; $idx -lt $files.Length; $idx++) 
     { 
      $file = $files[$idx] 
      write-host ("Old: " + $file.Name) -Fore Red 
     } 
    } 
} 

Write-output $computers, $numdays, $numhours, $nummins >> computerlist.txt 
+0

В какой именно момент времени? Всегда 6 часов. предыдущего дня? Всегда за 12 часов до этого? Что-то другое? –

+0

Время возврата в основном 18:00 28 апреля 2015 года, но когда мы перенаправляем задание, мы хотим изменить это время на перенесенное время. @ Код Чарда дает мне информацию каким-то образом. Мне нужно просто вывести машины, у которых DONT есть обновленные файлы. На данный момент он возвращает все машины. –

ответ

0

Вы можете запустить сценарий последующего на все ваши удаленные машины:

$computers = Get-Content -Path computers.txt 
$logFile = "\\ServerName\C$\Logfile.txt" 

$date = "12/03/2002 12:00" 
$limit = Get-Date $date 

$computers | %{ 
    $filePath = "\\$_\C$\temp\profile" 

    $files = $null 
    $files = Get-ChildItem -Path $filePath -Recurse -Force | ` 
       Where-Object {$_.CreationTime -lt $limit } 

    If($files -ne $null){ 
     "-------------------------[$($_)]------------------------">> $logFile 
     $files | Foreach {$_.FullName >> $logFile} 
    } 
} 

Это будет проверять папку заданной ($filePath) для файлов, которые старше, чем указанный предел. Файлы, превышающие лимит, будут иметь полный путь к файлу, зарегистрированный в данном сетевом каталоге $logFile.

+0

К сожалению, wirth 1700 машин, работающих на удаленной машине, нецелесообразно. мы можем сгенерировать список машин в TXT-файл и вам нужно запустить этот PS с конкретной машины в этом правом Vlan. –

+0

Вы все равно можете использовать этот скрипт. Вам просто нужно написать сценарий для удаленного запуска его на всем компьютере с сервера. – Richard

+0

Проблема с запуском скрипта. мы, похоже, не получаем скриптов для удаленного запуска на машинах. (UAC и GPO предотвращают это) Я надеюсь, что больше запросов к этим машинам будет генерировать csv. –

0

с небольшим изменением кода более раннего кода. Мне удалось получить работоспособное решение.
Выходной файл журнала возвращает только файлы, которые старше даты в коде. это можно использовать в Excel с другими выходами для наших нужд.

Я попробую обновленный код выше.

$computers = Get-Content -Path "C:\temp\computers.txt" 
$logFile = "\\SERVER\logs\output.txt" 

$numdays = 3 
$numhours = 10 
$nummins = 5 

$limit = (Get-Date).AddDays(-$numdays).AddHours(-$numhours).AddMinutes(-$nummins) 

$computers | %{ 
    $filePath = "\\$_\C$\temp\profile\runtime.log" 

    Get-ChildItem -Path $filePath -Recurse -Force | ` 
       Where-Object {$_.LastWriteTime -lt $limit } | 
       foreach {"$($_)">> $logFile} 
} 
+0

нашел еще одну проблему, нам нужно адаптировать скрипт для поиска. любые машины, у которых DONT есть файл журнала, также должны быть перечислены. –

Смежные вопросы