PowerShell-Skript löscht keine untergeordneten Elemente

2

Beim Ausführen eines PowerShell-Skripts wird eine Fehlermeldung angezeigt. Es besagt

Das Element unter Microsoft.Powershell.Core \ FileSystem :: \ [Pfad zum Verzeichnis] ​​weist untergeordnete Elemente auf, und der Parameter Recurse wurde nicht angegeben.

In meinem PowerShell-Skript habe ich es angegeben. Ist es am falschen Ort?

# 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
}
Michael Munyon
quelle
1
Ohne mich selbst zu testen, frage ich mich, ob Sie sehen können, ob Ihnen eine schließende geschweifte Klammer fehlt? Schauen Sie sich ss64.com/ps/foreach-object.html
Pimp Juice IT am
Apolgien. Es gibt einen im Skript. Ich habe es ursprünglich nicht in meinen Beitrag eingefügt.
Michael Munyon
Remove-item hat ein -recurse und -force. Hast du es versucht? msdn.microsoft.com/en-us/powershell/reference/3.0/…
Tim Haintz
Vielen Dank, Tim. Ich habe die hinzugefügt -recurse -force, Remove-Itemaber nach dem Ausführen wird immer noch eine Bestätigungsaufforderung angezeigt, in der ich gefragt werde, ob ich die untergeordneten Elemente löschen möchte.
Michael Munyon
Hast du es -Confirm:$falsestattdessen versucht ?
FastEthernet

Antworten:

3

Das Problem ist hier:

$_ | Remove-Item

Während Sie angegeben haben -Recurseund -Forceauf Get-ChildItem, dass nicht die später beeinflussen Remove-ItemAufruf. Ein Get-ChildItem, -Forceschließt nur versteckte und Systemelemente ein.

Normalerweise würde dies die Bestätigung unterdrücken, und für mich ist es so:

$_ | Remove-Item -Recurse -Force

Angesichts der Tatsache, dass Sie anscheinend immer noch um Bestätigung gebeten werden, scheint es, dass Sie ein $ConfirmPreferenceanderes als High haben. Um -Confirm:$falsedies zu umgehen , können Sie der Entfernungszeile hinzufügen, um zu sagen, dass Sie definitiv nicht um Bestätigung bitten, oder Sie können diese Zeile weiter oben in Ihrem Cmdlet hinzufügen:

$ConfirmPreference = 'High'
Ben N
quelle