Сравнение даты PowerShell необходимо удалить файл - PullRequest
0 голосов
/ 30 октября 2018

Мне нужно создать файл powershell, в котором мне нужно сравнить 2 даты и удалить папку, которая похожа на более чем 10 дней последней записи. как сегодня 30 октября мне нужно удалить папку, где сравнение дат дает 11 12 и 13 дней

     #ChildItem "\\server\Backup" -Recurse | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays.(-30) }
#$fulllist =Get-ChildItem "\\server\Backup\SharePoint Backup\"| Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays.(5) }
$fulllist =Get-ChildItem "\\server\Backup\SharePoint Backup\"
#$fulllist =Get-ChildItem "\\server\Backup\SharePoint Backup\" -Recurse | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays.(-20) }

foreach ($fileitem in $fulllist)
{
    $filename_big = $fileitem.FullName
    #write-host $filename_big  
    $d = [datetime](Get-ItemProperty -Path $filename_big -Name LastWriteTime).lastwritetime
    $d1=(get-date)
    #write-host   $d
   #write-host   $d1
   $ts = New-TimeSpan -Start $d -End $d1
   $ts.Days # Check results\
  write-host $ts
   if($ts -gt 10)
   {
    write-host "inside"
    }
     # Move-Item -Path $filename_big -Destination "\\DBORION\d$\backup"

}

Я сравниваю две даты $ d & d1 и дни больше 10, что папки должны быть удалены. но с выводом iam, который идет внутрь для всех папок, будь то 10 дней или 5 дней, пожалуйста, найдите вывод

    0
00:58:29.2923431
inside
0
13:33:32.4388907
inside
0
07:02:28.0900378
inside
0
03:52:35.3425970
inside
0
00:58:29.4017400
inside
13
13.08:49:05.4930775
inside
12
12.08:49:06.3403154
inside
11
11.08:48:31.4681438
inside
10
10.08:48:18.6859604
inside
9
9.08:49:01.2220544
inside
8
8.08:39:56.7230423
inside
7
7.08:48:15.3242000
inside
6
6.08:49:03.6123002
inside
5
5.08:49:08.5439345
inside
4
4.08:49:06.6188386
inside
3
3.08:49:07.2066345
inside
2
2.08:49:06.2290185
inside
1
1.08:45:07.0454477
inside
0
08:47:24.1939025
inside

хорошо, так что я получил это

$fulllist = Get-ChildItem "\\Server\Backup\SharePoint Backup\" 

$Days = 12

foreach ($fileitem in $fulllist)
{
    $filename_big = $fileitem.FullName

    $deletedate = (Get-Date).AddDays(-$Days)
    $Folderdate = [datetime](Get-ItemProperty -Path $filename_big -Name LastWriteTime).lastwritetime


   if($Folderdate -le $deletedate)
   {

        $filename_big
        Remove-Item -Path  $filename_big -Force -Confirm:$false
   }


}

теперь моя единственная забота - запрос подтверждения удаления, я не хочу, чтобы всплывающее окно показывало, как обойти это

1 Ответ

0 голосов
/ 30 октября 2018

Я думаю, проблема в том, что ваша переменная $ts является временным интервалом. Время не может быть больше 10, потому что это число. В вашем предложении if вы должны использовать:

 if($ts.Days -gt 10)

И некоторые другие, возможно, необходимые советы, чтобы сэкономить байт:

  • когда вы определяете переменную $ d, это можно сделать намного короче: $d = $fileitem.lastwritetime - сама переменная $ fileitem имеет свойство lastwritetime.
  • при присвоении функции переменной нет необходимости в круглых скобках: просто используйте $d1 = Get-Date. Скобки нужны только в том случае, если вы хотите назначить свойство функции, например $d = (Get-Date).DayOfWeek.
  • Вы можете избежать создания временного интервала следующим образом: if($d -gt $d1.addDays(-10)). Это сравнивает временную метку вашего файла $d с текущим временем минус 10 дней, то есть момент времени ровно 10 дней назад.

И чтобы обойти подтверждение при удалении файлов: используйте параметр -force.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...