Код работает немного по-разному между Powershell.exe и Powershell ISE - поведение Sort-Object
У меня есть немного кода для получения гиперссылок с веб-страницы http - найдите все элементы, соответствующие критериям, затем найдите самые новые, отсортировав их, и используйте его InnerText в качестве источника для загрузки. Всем гиперссылкам присваивается 7-значный номер в конце их имени с большим номером для новых файлов.
Код:
$Web = ((Invoke-WebRequest "http://serveraddress/Export/").Links |
Where-Object {$_.href -like “xx_yyyyyy_auto_standard*”} |
Sort Name –Desc | Select –Last 1).innertext
Start-BitsTransfer -Source http://serveraddress/Export/$Web -Destination C:\autoreports\
Теперь, когда я запускаю выше в Powershell.exe (например, при запуске файла.ps1 правой кнопкой мыши и "Запускать с Powershell"), я получаю самый старый загруженный файл. Когда я запускаю выше в Powershell ISE, я получаю новейший файл. Когда я изменил -Last на -First в Powershell.exe, код работает как положено.
Я легко могу изменить это, но так как я очень новичок в Powershell - почему существует такая разница между Powershell ISE и "стандартом"? Заранее спасибо! Хотя это может быть новичком, я не нашел - или не понял - причины разницы.
2 ответа
В дополнение к полезному ответу Джордана, который решает вашу конкретную проблему:
Как указано, Sort-Object
спокойно принимает несуществующие свойства для сортировки.
К сожалению, в Windows PowerShell v5.1 попытка сортировки по несуществующему свойству приводит к, по-видимому, случайному порядку вывода:
WinPS> 1, 2, 3, 4 | Sort-Object -Property Foo
3
4
1
2
К счастью, эта проблема была исправлена в PowerShell Core, где порядок ввода в этом случае сохраняется.
Объекты ссылок не имеют свойства "Имя", поэтому сортировка по имени не будет работать.