💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант; близкие ответы различаются механизмом, порядком выполнения, областью действия или эксплуатационной границей. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 7 из 25
PSCustomObject с Name передаётся команде, принимающей -Name ByPropertyName. Какой вывод был бы слишком сильным?
PowerShell PSCustomObject с Name передаётся команде, принимающей -Name ByPropertyName Копировать
$result = [pscustomobject]@{Name="Spooler"} | Get-Service
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Если связывание по значению не подошло, PowerShell может сопоставить имя свойства входного объекта с параметром, помеченным ValueFromPipelineByPropertyName.
Связывание учитывает наборы, типы, преобразования и имена; неоднозначность должна устраняться интерфейсом функции, а не надеждой на порядок.
Trace-Command -Name ParameterBinding показывает попытки ByValue и ByPropertyName и причины отказа преобразования.
Связывание по значению выбирает совместимый тип входа; Stop-Process способен принимать объекты Process непосредственно из конвейера.
Инициализацию, не зависящую от объекта, следует вынести в begin, чтобы не повторять её для каждого элемента.
Вопрос 10 из 25
Функция принимает pipeline input, но тяжёлая инициализация находится в process. Какой вариант точнее выражает контракт?
Связывание учитывает наборы, типы, преобразования и имена; неоднозначность должна устраняться интерфейсом функции, а не надеждой на порядок.
Если связывание по значению не подошло, PowerShell может сопоставить имя свойства входного объекта с параметром, помеченным ValueFromPipelineByPropertyName.
Связывание по значению выбирает совместимый тип входа; Stop-Process способен принимать объекты Process непосредственно из конвейера.
Begin выполняется один раз до входа, Process — для каждого объекта, End — один раз после завершения; это позволяет потоковый подсчёт.
Инициализацию, не зависящую от объекта, следует вынести в begin, чтобы не повторять её для каждого элемента.
Вопрос 21 из 25
Как увидеть, что реально приходит на вход следующей команды?
PowerShell Нужно увидеть, что реально приходит на вход следующей команды Копировать
Get-Process | Tee-Object -Variable sample | Select-Object -First 1 Name
$sample[0].GetType().FullName
Tee-Object или ForEach-Object с GetType/Get-Member помогает снять образец объекта, не заменяя его форматированной строкой.
Следует измерить буферизующие команды, число объектов и память; маленькая выборка не выявляет цену Sort-Object, Group-Object и накопления массивов.
ForEach-Object -MemberName или синтаксис свойства может извлечь член без явного scriptblock, но сложная логика требует Process.
Надёжный тест утверждает типы и свойства объектов, а форматирование проверяет отдельно, если оно действительно часть интерфейса.
Проверка PSTypeNames и Get-Member на каждом переходе быстрее находит место, где данные были отформатированы, сериализованы или преобразованы.