我有这个脚本试图删除超过7天的所有文件夹。所有文件夹都位于名为“BackupPath”的特定目录下
这是剧本:
$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”参数调用“Delete”的异常:“目录不是 空。 “ 在C:\ Users \ x \ Desktop \ power.ps1:18 char:14 + $ i.Delete<<<< () + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException使用“0”参数调用“Delete”的异常:“目录不为空。” 在C:\ Users \ x \ Desktop \ power.ps1:18 char:14 + $ i.Delete<<<< () + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException
有没有办法强行删除这些文件夹及其内容? 我不知道是否有现成的方法来执行此操作,因为我是PowerShell的新手。
由于
答案 0 :(得分:1)
-Directory
开关只获取文件夹
Where-object根据日期条件过滤这些文件夹
最后remove-item删除它们。(删除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"}
表示如果表达式的计算结果为false,则“执行某些操作”,否则为“无”