Скрипт 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'
Другие вопросы по тегам