2015-10-04 2 views
1

У меня есть этот скрипт, который пытается удалить все папки старше 7 дней. Все папки расположены под конкретный каталог под названием «BackupPath»удалить объект каталога и его содержимое в powershell

Это сценарий:

$date=Get-Date -UFormat "%d-%m-%y" 
$BackupPathday="C:\"+$env:computername+"GPOBackup\$date" 
$BackupPath="C:\"+$env:computername+"GPOBackup" 

if ((Test-Path $BackupPathday) -eq 0) { 
New-Item -ItemType Directory -Force -Path $BackupPathday 
} 
else { 
Write-Host "Today´s backup already exists" 
} 

$Folders=Get-ChildItem $BackupPath 

foreach ($i in $Folders) { 
    $Days=((Get-Date) - $i.CreationTime).Days 
    #PSISContainer is true means that $i is a folder, ohterwise is a file 
    if ($Days -ge 7 -and $i.PsISContainer -eq $True) {  
    $i.Delete() 
    } 
} 

Когда я бегу, я получаю сообщение об ошибке:

Исключение призывающую «Удалить» с "0" аргумент (ы): "каталог не пустым." В C: \ Users \ х \ Desktop \ power.ps1: 18 символ: 14 + $ i.Delete < < < <() + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException Exception, вызывающий «Удалить» с аргументами «0»: «Каталог не пуст. " В C: \ Users \ х \ Desktop \ power.ps1: 18 символ: 14 + $ i.Delete < < < <() + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException

есть ли способ силы удаления этих папок и его содержание? Я не знаю, есть ли существующий метод, чтобы сделать это как I'm новый с помощью PowerShell.

Благодаря

+0

я подумал о том, что до этого тоже и это делать esn't work: Remove-Item: Не удается найти путь 'C: \ Users \ x \ Desktop \ 26-09-15', потому что его не существует ... – miticoluis

+0

К сожалению, он тоже не работает. Remove-Item: Невозможно связать аргумент с параметром «Путь», потому что он равен нулю. – miticoluis

+0

Возможно, вам придется использовать 'GCI $ path -Recurse | Remove-Item' – user4317867

ответ

1

Переключатель -Directory получает только папки, а затем Где-объект фильтрует эти папки на основе критериев, даты и окончательно удалить-элемент удаляет их. (Удалить Whatif применить команду)

Get-ChildItem -Path $BackupPath -Directory | 
    Where-Object { ((get-date) - $_.CreationTime).days -ge 7} | 
     Remove-Item -Recurse -WhatIf 

Кроме того, при тестировании для несуществующий каталог использует

if(-not (Test-path c:\temp)) {"Do something"}else { "nothing"} 

означает, что если выражение имеет значение ложь, то «не делать что-то» другое «ничего»

+0

Он все еще не работает; Get-ChildItem: параметр не может быть найден, который соответствует имени параметра «Directory». – miticoluis

+0

Пробовал это и отлично работает Get-ChildItem -Path $ BackupPath | Where-Object {(((get-date) - $ _. CreationTime) .days -ge 7) -and ($ _. PsISContainer -eq $ True)} | Remove-Item -Recurse – miticoluis

+0

Отлично! .... Я думаю, у вас есть версия powershell, у которой dosent есть параметр '-directory'. – Kiran

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