Прямая ссылка на свойства в Powershell 2.0

Я обнаружил ошибку в сценарии, который написал сегодня утром, когда я не получал вывода из выражения Select-String. Немного поиграв, я понял, что это выражение не вернет значение моего совпадения в версии 2.0, но вернет значение в версии 4.0, где я его изначально написал.

($log | Select-String "\[CIsoCreator\] Creating iso file" -AllMatches | Select-Object -ExpandProperty line -Last 1 | Select-String "([A-Z]\:)(.*\\)*.*\.iso").matches.value

Попробовав несколько вещей, я получил это, что вернулось, как и ожидалось.

($log | Select-String "\[CIsoCreator\] Creating iso file" -AllMatches | Select-Object -ExpandProperty line -Last 1 | Select-String "([A-Z]\:)(.*\\)*.*\.iso").matches | select -expandproperty value

Мне кажется, что в версии 2.0 есть несколько других правил, которые определяют, когда вы можете напрямую ссылаться на свойства, но я не смог найти упоминания об этом.

Кто-нибудь знает, как это работает между версиями?

См. Сообщение в блоге Новые возможности языка V3 относительно перечисления участников.

Bill_Stewart 01.05.2018 16:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
275
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это связано с изменением языкового поведения, введенным в PowerShell версии 3.0 - из Примечания к выпуску «Что нового в PowerShell 3.0»:

Windows PowerShell Language Enhancements

Windows PowerShell 3.0 includes many features that are designed to make its language simpler, easier to use, and to avoid common errors. The improvements include property enumeration, count and length properties on scalar objects, new redirection operators, the $Using scope modifier, PSItem automatic variable, flexible script formatting, attributes of variables, simplified attribute arguments, numeric command names, the Stop-Parsing operator, improved array splatting, new bit operators, ordered dictionaries, PSCustomObject casting, and improved comment-based help.

(Emphasis added by me)

Перечисление свойств позволяет оператору ссылки . разрешать свойства отдельных членов выражения массива, даже если сам массив не имеет такого свойства:

$Things = 1..3 |%{ New-Object psobject -Property @{Prop = $_} }
$Things.Prop   # Starting with version 3.0, this outputs the array 1,2,3 
               # In PowerShell version 2.0, this will throw an error 
               # because [Object[]] ($Things) has no such property

Я прочитал это, и в то время это не имело смысла. Я просто вернулся и дважды проверил, и мне возвращают массив длиной 1, так что это действительно проблема.

Vek17 01.05.2018 16:35

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