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
}
powershell
Michael Munyon
quelle
quelle
-recurse -force
,Remove-Item
aber 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.-Confirm:$false
stattdessen versucht ?Antworten:
Das Problem ist hier:
Während Sie angegeben haben
-Recurse
und-Force
aufGet-ChildItem
, dass nicht die später beeinflussenRemove-Item
Aufruf. EinGet-ChildItem
,-Force
schließt nur versteckte und Systemelemente ein.Normalerweise würde dies die Bestätigung unterdrücken, und für mich ist es so:
Angesichts der Tatsache, dass Sie anscheinend immer noch um Bestätigung gebeten werden, scheint es, dass Sie ein
$ConfirmPreference
anderes als High haben. Um-Confirm:$false
dies 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:quelle