Код работает немного по-разному между 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, где порядок ввода в этом случае сохраняется.

Объекты ссылок не имеют свойства "Имя", поэтому сортировка по имени не будет работать.

Другие вопросы по тегам