У меня есть список каталогов, которые отформатированы как номера версий и хотели бы найти N старых каталогов и удалить их. Например:Удалить самые старые версии каталога в PowerShell
/1.2.3.4
/1.2.3.5
/1.2.3.6
Я пробовал несколько вещей, но я не могу, похоже, добраться туда, где мне нужно идти.
Моя первая попытка была такова:
ls directory | sort Name | select -first 5 | rm -r
Однако я не уверен, что это будет работать при любых обстоятельствах, потому что это (я предполагаю) сделать естественный вид. Это всегда вернет правильные результаты?
Моя следующая мысль заключалась в том, что я мог бы использовать System.Version
, чтобы выполнить мою сортировку. Так что я в конечном итоге с этим:
ls directory | %{[System.Version]$_.Name } | sort | select -first 5 | ???
Проблема заключается в том, что я не уверен, как связать результат каталога с сортировкой ... Какой самый лучший способ сделать это?
gci \\directory
производит
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/19/2011 5:19 PM 1.0.1052.54849
d---- 12/19/2011 5:29 PM 1.0.1053.54850
d---- 12/19/2011 5:36 PM 1.0.1054.54851
d---- 12/20/2011 2:11 PM 1.0.1056.54875
d---- 12/12/2011 10:39 AM 1.0.991.54625
d---- 12/12/2011 12:08 PM 1.0.992.54627
d---- 12/12/2011 12:22 PM 1.0.993.54628
d---- 12/12/2011 1:15 PM 1.0.994.54630
d---- 12/12/2011 2:45 PM 1.0.996.54636
d---- 12/12/2011 3:34 PM 1.0.997.54640
d---- 12/12/2011 3:48 PM 1.0.998.54641
gci \\directory | Sort-Object { $_Name -as [Version] }
производит
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/12/2011 1:15 PM 1.0.994.54630
d---- 12/12/2011 12:22 PM 1.0.993.54628
d---- 12/12/2011 2:45 PM 1.0.996.54636
d---- 12/12/2011 3:48 PM 1.0.998.54641
d---- 12/12/2011 3:34 PM 1.0.997.54640
d---- 12/12/2011 12:08 PM 1.0.992.54627
d---- 12/19/2011 5:29 PM 1.0.1053.54850
d---- 12/19/2011 5:19 PM 1.0.1052.54849
d---- 12/19/2011 5:36 PM 1.0.1054.54851
d---- 12/12/2011 10:39 AM 1.0.991.54625
d---- 12/20/2011 2:11 PM 1.0.1056.54875
это Имеет ли значение, что это сетевой ресурс? Я смущен, почему это не работает ... Я проверил быструю проверку работоспособности и выполнил Array.Sort
в версиях, которые я создал в модульном тесте, отсортированы правильно.
Похоже, что вам не хватает. : Sort-Object {$ _. Name -as [version]}, а не Sort-OBject {$ _Name -as [Version]} –
Я заметил, что только после публикации этого, извините мои толстые пальцы. Из интереса, почему это не вызвало ошибку? Это просто попытка найти переменную $ _Name и не найти ее и попытаться передать null в конструктор? – jonnii
Доступ к свойствам в PowerShell никогда не выдает ошибок (они записывают в $ error), но вместо этого просто возвращают значения null. Это значит, что когда вы показываете объект, где некоторые свойства не работают, вы не чередуете ошибку и вывод. Вы можете переключить способ использования PowerShell, включив строгий режим: Set-StrictMode -Version Latest. –