Код работает немного по-разному между powershell.exe и powershell ise - поведение sort-object

У меня есть небольшой код для получения гиперссылок с веб-страницы http - найдите все элементы, соответствующие критериям, затем найдите самые новые, отсортировав их и используя InnerText в качестве источника для загрузки. Всем гиперссылкам присваивается семизначный номер в конце их имени с большим номером для новых файлов.

Код:

$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 и «стандартным»? Заранее спасибо! Хотя это может быть вопрос новичка, я не нашел - или не понял - причины разницы.

@lit: Вы правы - я отредактировал вопрос, чтобы исправить это.

mklement0 14.09.2018 00:02
3
1
289
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Разве тогда не должен код вообще не работать? Потому что в моем случае это определенно работает - файл загружается, просто есть другое поведение PS ISE и PS

user10359907 13.09.2018 21:28

Командлет Sort-object не будет вызывать ошибок, если свойство не существует. Он просто пропускает предметы. Сортируйте по бла-бла-бла, если хотите протестировать. Вот почему первое поведение непоследовательно. Сомневаюсь, что это связано с ISE.

Jordan 13.09.2018 21:34
Ответ принят как подходящий

В дополнение к Полезный ответ Джордана, который решает вашу конкретную проблему:

Как сказано, Sort-Objectспокойно принимает несуществующие свойства для сортировки.

К сожалению, начиная с Windows PowerShell v5.1, при попытке сортировки по несуществующему свойству приводит к кажущемуся случайному порядку вывода:

WinPS> 1, 2, 3, 4 | Sort-Object -Property Foo
3
4
1
2

К счастью, эта проблема была исправлена ​​в PowerShell Основной, где порядок ввода в этом случае сохраняется.

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