![Powershell 脚本不删除子项](https://linux22.com/image/1518478/Powershell%20%E8%84%9A%E6%9C%AC%E4%B8%8D%E5%88%A0%E9%99%A4%E5%AD%90%E9%A1%B9.png)
运行 PowerShell 脚本时出现错误。它指出
Microsoft.Powershell.Core\FileSystem::\[目录路径] 处的项有子项,并且未指定 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
除 High 之外的选项。要解决这个问题,您可以-Confirm:$false
在删除行中添加“绝对不要求确认”,或者您可以在 cmdlet 中添加此行:
$ConfirmPreference = 'High'