💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант; близкие ответы различаются механизмом, порядком выполнения, областью действия или эксплуатационной границей. После завершения вы увидите общий результат, результаты по 6 тематическим шкалам и подробные объяснения.
Вопрос 1 из 30
$PSVersionTable.PSEdition различает Desktop и Core. На каком правиле основан результат?
PowerShell $PSVersionTable.PSEdition различает Desktop и Core Копировать
$result = $PSVersionTable | Select-Object PSVersion,PSEdition,Platform,OS
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Они могут иметь разные .NET, module paths, encoding и syntax; задача должна явно выбирать исполняемый файл.
Windows PowerShell 5.1 обычно имеет Desktop, PowerShell 7 — Core; версия и edition проверяются до использования несовместимого модуля.
Проверка PSEdition должна приводить к поддерживаемой альтернативе или понятной ошибке, а не попытке установить Windows-компонент.
Проверяют CompatiblePSEditions, зависимые сборки и реальный вызов через compatibility session, включая потерю методов.
Compatibility session возвращает десериализованные объекты и требует Windows PowerShell; это мост, а не полная нативная совместимость.
Вопрос 22 из 30
Путь работает локально, но не в контейнере. Как исправить причину, а не только симптом?
PowerShell Путь работает локально, но не в контейнере Копировать
# Сценарий для ревью: Путь работает локально, но не в контейнере.
$path = '.\incoming\data.csv'
$hashBefore = (Get-FileHash -LiteralPath $path).Hash
$rows = Import-Csv -LiteralPath $path
$hashAfter = (Get-FileHash -LiteralPath $path).Hash
[pscustomobject]@{ Rows=$rows.Count; Stable=($hashBefore -eq $hashAfter); Culture=[cultureinfo]::CurrentCulture.Name }
Явно задают -Encoding utf8 и тестируют байты/BOM там, где это часть протокола; системная default encoding не переносима.
Собирают PSVersionTable, $IsWindows/$IsLinux, provider, culture, encoding, filesystem case sensitivity и наличие native tools.
Используют безопасно созданный уникальный каталог, проверяют владельца/права и удаляют его в finally, защищаясь от symlink attack.
Проверяют HOME, текущий каталог, mount, пользователя, symlink и права; жёсткий C:\ или /tmp выдаёт скрытую зависимость.
Логируют массив аргументов без секретов, версию программы и значение PSNativeCommandArgumentPassing; не сравнивают только собранную строку.
Вопрос 23 из 30
Native command видит другие аргументы. На каком правиле основан результат?
PowerShell Native command видит другие аргументы Копировать
# Сценарий для ревью: Native command видит другие аргументы.
$context = [pscustomobject]@{ Platform=$PSVersionTable.Platform; Home=$HOME; User=[Environment]::UserName; Current=(Get-Location).Path }
$path = Join-Path $HOME 'app/data'
[pscustomobject]@{ Context=$context; Path=$path; Exists=(Test-Path -LiteralPath $path); Provider=(Get-Item $HOME).PSProvider.Name }
$context | ConvertTo-Json -Depth 4
Проверяют HOME, текущий каталог, mount, пользователя, symlink и права; жёсткий C:\ или /tmp выдаёт скрытую зависимость.
Явно задают -Encoding utf8 и тестируют байты/BOM там, где это часть протокола; системная default encoding не переносима.
Оператор & с отдельными аргументами безопаснее сборки строки; синтаксис самой программы всё равно платформенный.
Собирают PSVersionTable, $IsWindows/$IsLinux, provider, culture, encoding, filesystem case sensitivity и наличие native tools.
Логируют массив аргументов без секретов, версию программы и значение PSNativeCommandArgumentPassing; не сравнивают только собранную строку.
Вопрос 24 из 30
Кодировка файла различается. Какое объяснение точнее?
Проверяют CompatiblePSEditions, зависимые сборки и реальный вызов через compatibility session, включая потерю методов.
Явно задают -Encoding utf8 и тестируют байты/BOM там, где это часть протокола; системная default encoding не переносима.
Собирают PSVersionTable, $IsWindows/$IsLinux, provider, culture, encoding, filesystem case sensitivity и наличие native tools.
Они могут иметь разные .NET, module paths, encoding и syntax; задача должна явно выбирать исполняемый файл.
Проверяют HOME, текущий каталог, mount, пользователя, symlink и права; жёсткий C:\ или /tmp выдаёт скрытую зависимость.
Вопрос 25 из 30
Модуль импортируется только в Windows PowerShell. Как поступить, чтобы поведение осталось предсказуемым?
Compatibility session возвращает десериализованные объекты и требует Windows PowerShell; это мост, а не полная нативная совместимость.
Проверяют CompatiblePSEditions, зависимые сборки и реальный вызов через compatibility session, включая потерю методов.
Проверяют HOME, текущий каталог, mount, пользователя, symlink и права; жёсткий C:\ или /tmp выдаёт скрытую зависимость.
Собирают PSVersionTable, $IsWindows/$IsLinux, provider, culture, encoding, filesystem case sensitivity и наличие native tools.
Логируют массив аргументов без секретов, версию программы и значение PSNativeCommandArgumentPassing; не сравнивают только собранную строку.
Вопрос 26 из 30
Временный файл создаётся предсказуемым именем в общем /tmp. Как поступить, чтобы поведение осталось предсказуемым?
PowerShell Временный файл создаётся предсказуемым именем в общем /tmp Копировать
# Сценарий для ревью: Временный файл создаётся предсказуемым именем в общем /tmp.
$context = [pscustomobject]@{ Platform=$PSVersionTable.Platform; Home=$HOME; User=[Environment]::UserName; Current=(Get-Location).Path }
$path = Join-Path $HOME 'app/data'
[pscustomobject]@{ Context=$context; Path=$path; Exists=(Test-Path -LiteralPath $path); Provider=(Get-Item $HOME).PSProvider.Name }
$context | ConvertTo-Json -Depth 4
Если безопасный механизм недоступен, сценарий должен завершиться с ясной ошибкой, а не переходить на небезопасный режим.
Проверяют архитектуру, хеш/подпись, источник и права файла перед запуском.
Проверяют HOME, текущий каталог, mount, пользователя, symlink и права; жёсткий C:\ или /tmp выдаёт скрытую зависимость.
Используют безопасно созданный уникальный каталог, проверяют владельца/права и удаляют его в finally, защищаясь от symlink attack.
Аргументы передают отдельно и ограничивают разрешённые действия; оболочечная интерполяция создаёт инъекцию.
Вопрос 29 из 30
Скачанный бинарник выбирается только по имени ОС. Какое действие не создаст новой скрытой зависимости?
Они могут иметь разные .NET, module paths, encoding и syntax; задача должна явно выбирать исполняемый файл.
Аргументы передают отдельно и ограничивают разрешённые действия; оболочечная интерполяция создаёт инъекцию.
Проверяют архитектуру, хеш/подпись, источник и права файла перед запуском.
Используют безопасно созданный уникальный каталог, проверяют владельца/права и удаляют его в finally, защищаясь от symlink attack.
Проверяют HOME, текущий каталог, mount, пользователя, symlink и права; жёсткий C:\ или /tmp выдаёт скрытую зависимость.