Data라는 폴더를 제외한 가장 최근의 X 폴더를 제외한 모든 PowerShell 스크립트를 삭제합니다. 내 문은 다음과 같습니다를 삭제하려면 폴더를 수집합니다 : 나는 시작 디렉토리 $parentFolderName
의 폴더의 수보다 적은 수있는 $numberOfFoldersToKeep
을 통과 할 때이 위대한 작품을PowerShell Get-ChildItem 및 Skip
$folders1 = Get-ChildItem $parentFolderName |
? { $_.PSIsContainer -and $_.Name -ne "Data" } |
sort CreationTime -desc |
select -Skip $numberOfFoldersToKeep
foreach ($objItem in $folders1) {
Write-Host $webServerLocation\$objItem
Remove-Item -Recurse -Force $parentFolderName\$objItem -WhatIf
}
.
myScript.ps1 C:\StartingFolder 3
을하지만 건너 뛸 폴더의 높은 숫자를 전달한다면, 내 문은 $parentFolderName
자체의 값을 반환하는 것 같다 예를 들어, 내 대상 폴더에 5 개 하위 디렉토리와이 예상대로 작동합니다! 그래서이 작동하지 않습니다 건너 뛰기 변수가 Get-ChildItem
컬렉션의 항목 수를 초과
myScript.ps1 C:\StartingFolder 15
때문에, 스크립트는 내가 전혀 기대했던 아니었다 C:\StartingFolder\
을 삭제하려고합니다.
내가 뭘 잘못하고 있니?
왜 foreach를 IF 문으로 묶지 않을까요? if ($ folder1 -neq $ null) {...} ... '또는 단순히'remove-item $ objectItem.fullname'을 사용하십시오 –
재현 할 수 없습니다 이. '$ numberOfFoldersToKeep'을'? '를 통해 파이프 된'gci' 결과보다 큰 수로 전달하면'$ null'이 리턴됩니다 (따라서'foreach'도 실행되지 않습니다). 정확히 내가 기대했던 것. – alroc
@alroc 그가 파일을 어떻게 제거하는지보십시오.) –