Это не работает для меня, почему? Какой тут правильный сепаратор?

Идея заключается в следующем вопросе:как заставить get-childitem фильтровать файлы разных типов?

$Jetzt = Get-Date
$Alterung = "14"
$Cache = "D:\SCANS\"
$Aenderung = $Jetzt.AddDays(-$Alterung)
$Files = Get-Childitem $Cache -Force -Include ('*.docx', '*.pdf') | Where {$_.LastWriteTime -le "$Aenderung"}
""
"Alle Dateien aelter als $Alterung_DIR Tage werden geloescht."
""
foreach ($File in $Files)
{
    if ($File -ne $NULL)
    {
            "Am $Jetzt GELOESCHT--> $File"
            Remove-Item $File.FullName -Force -recurse | out-NULL
    }
    else
    {
        "Keine Datei geloescht!"
    }
}

""
"Skriptende"

Выход:

Alle Dateien aelter als 14 Tage werden geloescht.

Keine Datei geloescht!

Skriptende

1 ответ1

0

Несколько вещей, чтобы исправить здесь.

  1. Параметр -Include требует, чтобы вы также использовали параметр -Path . Из Get-Help Get-ChildItem -full ,

Msgstr "Значение этого параметра квалифицирует параметр Path. Введите элемент пути или шаблон, например, «* .txt». Подстановочные знаки разрешены. "

  1. $Cache должен заканчиваться звездочкой. Больше от Get-Help Get-ChildItem -full ,

«Параметр Include действует только в том случае, если команда включает параметр Recurse или путь ведет к содержимому каталога, например C:\Windows *, где подстановочный знак указывает содержимое каталога C:\Windows».

  1. Вам не нужны скобки или одинарные кавычки вокруг этих расширений, так как они не содержат пробелов или специальных символов.

Ваши изменения должны быть,

$Files = Get-Childitem -Path $Cache -Force -Include *.docx, *.pdf
$Cache = "D:\SCANS\*"

Не связано, но также может быть предпочтительнее заменить if ($File -ne $NULL) на if (!$File) .

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