2

Я получаю сообщение об ошибке при запуске сценария 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 ответ1

3

Проблема здесь:

$_ | Remove-Item

Хотя вы указали -Recurse и -Force в Get-ChildItem , это не влияет на последующий вызов Remove-Item . В Get-ChildItem -Force включает только скрытые и системные элементы.

Обычно это подавляет подтверждение, и для меня это:

$_ | Remove-Item -Recurse -Force

Учитывая, что он все еще запрашивает у вас подтверждение, похоже, у вас есть $ConfirmPreference кроме High. Чтобы обойти это, вы можете добавить -Confirm:$false к строке удаления, чтобы сказать "определенно не запрашивать подтверждение", или вы можете добавить эту строку далее в свой командлет:

$ConfirmPreference = 'High'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .