Скрипт Powershell не удаляет дочерние элементы
Я получаю сообщение об ошибке при запуске сценария PowerShell. Это заявляет
Элемент в Microsoft.Powershell.Core\FileSystem::\[path to directory] имеет дочерние элементы, и параметр Recurse не был указан.
В моем скрипте PowerShell он указан. Это не в том месте?
# Add CmdletBinding to support -Verbose and -WhatIf
[CmdletBinding(SupportsShouldProcess=$True)]
param
(
# Mandatory parameter including a test that the folder exists
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType 'Container'})]
[string]
$Path,
# Optional parameter with a default of 60
[int]
$Age = 60
)
# Identify the items, and loop around each one
Get-ChildItem -Path $Path -Recurse -Force | where {$_.lastWriteTime -lt (Get-Date).addDays(-$Age)} | ForEach-Object {
# display what is happening
Write-Verbose "Deleting $_ [$($_.lastWriteTime)]"
# delete the item (whatif will do a dry run)
$_ | Remove-Item
}
1 ответ
Проблема здесь:
$_ | Remove-Item
Пока вы указали -Recurse
а также -Force
на Get-ChildItem
, это не влияет на позже Remove-Item
призывание. На Get-ChildItem
, -Force
просто включает в себя скрытые и системные элементы.
Обычно это подавляет подтверждение, и для меня это:
$_ | Remove-Item -Recurse -Force
Учитывая, что он, по-видимому, все еще просит у вас подтверждения, похоже, у вас есть $ConfirmPreference
кроме высокого Чтобы обойти это, вы можете добавить -Confirm:$false
на строку удаления, чтобы сказать "определенно не запрашивать подтверждение", или вы можете добавить эту строку далее в свой командлет:
$ConfirmPreference = 'High'