💡 Инструкция: Выберите один ответ из пяти. На 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.
Инициализацию, не зависящую от объекта, следует вынести в begin, чтобы не повторять её для каждого элемента.
Связывание по значению выбирает совместимый тип входа; Stop-Process способен принимать объекты Process непосредственно из конвейера.
Trace-Command -Name ParameterBinding показывает попытки ByValue и ByPropertyName и причины отказа преобразования.
Вопрос 10 из 25
Функция принимает pipeline input, но тяжёлая инициализация находится в process. Какой вариант точнее выражает контракт?
Инициализацию, не зависящую от объекта, следует вынести в begin, чтобы не повторять её для каждого элемента.
Если связывание по значению не подошло, PowerShell может сопоставить имя свойства входного объекта с параметром, помеченным ValueFromPipelineByPropertyName.
Связывание по значению выбирает совместимый тип входа; Stop-Process способен принимать объекты Process непосредственно из конвейера.
Связывание учитывает наборы, типы, преобразования и имена; неоднозначность должна устраняться интерфейсом функции, а не надеждой на порядок.
Begin выполняется один раз до входа, Process — для каждого объекта, End — один раз после завершения; это позволяет потоковый подсчёт.
Вопрос 21 из 25
Как увидеть, что реально приходит на вход следующей команды?
PowerShell Нужно увидеть, что реально приходит на вход следующей команды Копировать
Get-Process | Tee-Object -Variable sample | Select-Object -First 1 Name
$sample[0].GetType().FullName
ForEach-Object -MemberName или синтаксис свойства может извлечь член без явного scriptblock, но сложная логика требует Process.
Следует измерить буферизующие команды, число объектов и память; маленькая выборка не выявляет цену Sort-Object, Group-Object и накопления массивов.
Tee-Object или ForEach-Object с GetType/Get-Member помогает снять образец объекта, не заменяя его форматированной строкой.
Проверка PSTypeNames и Get-Member на каждом переходе быстрее находит место, где данные были отформатированы, сериализованы или преобразованы.
Надёжный тест утверждает типы и свойства объектов, а форматирование проверяет отдельно, если оно действительно часть интерфейса.