Если производительность имеет значение, я бы избавился от каналов и не использовал бы gci (используйте типы более низкого уровня из System.IO). Если есть миллионы файлов, я бы также записал их в c# и вызывал бы методы только из среды выполнения ps. Ниже приведен пример удаления файлов старше N дней:
Add-Type -TypeDefinition @"
public static class LogCleaner {
public static void Clean(string dirName, int age)
{
foreach (string file in System.IO.Directory.GetFiles(dirName))
{
var fi = new System.IO.FileInfo(file);
if (fi.LastWriteTime < System.DateTime.Now.AddDays(-age))
{
fi.Delete();
}
}
}
}
"@
[LogCleaner]::Clean("C:\Temp\demo", 10)
Вы также можете проверить, как это сделать, используя windows собственные утилиты (например, dir), или, возможно, установите git bash и попробуйте для этого linux способ (например, с помощью команды find)