Script do Powershell não excluindo itens filhos

1

Estou recebendo um erro ao executar um script do PowerShell. Está afirmando

The item at Microsoft.Powershell.Core\FileSystem::\[path to directory] has children and the Recurse parameter was not specified.

No meu script do PowerShell, eu especifico. Está no local errado?

# 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
}
    
por Michael Munyon 12.01.2017 / 20:55

1 resposta

3

O problema está aqui:

$_ | Remove-Item

Embora você tenha especificado -Recurse e -Force on Get-ChildItem , isso não afeta a última invocação de Remove-Item . Em Get-ChildItem , -Force inclui apenas itens ocultos e de sistema.

Normalmente, isso suprime a confirmação e, para mim, é:

$_ | Remove-Item -Recurse -Force

Como aparentemente ele ainda está pedindo confirmação, parece que você tem um $ConfirmPreference diferente de Alta. Para contornar isso, você pode adicionar -Confirm:$false à linha de remoção para dizer "definitivamente, não solicitar confirmação" ou pode adicionar essa linha mais adiante em seu cmdlet:

$ConfirmPreference = 'High'
    
por 15.01.2017 / 21:12

Tags