PS PowerShell  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Кроссплатформенный PowerShell

Кроссплатформенный PowerShell: практический тест по PowerShell с чтением кода, поиском причины ошибки и выбором надёжного решения. Темы: Windows PowerShell и pwsh, Провайдеры PowerShell, Пути, Платформенные команды, Диагностика: переносимость, Безопасная эксплуатация: переносимость. Базовая линия — PowerShell 7.6.3; Windows-зависимые команды и отличия Windows PowerShell 5.1 отмечены в условиях.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 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 }
Вопрос 2 из 30
powershell.exe и pwsh.exe запускают разные движки. Какой принцип PowerShell здесь работает?
PowerShellpowershell.exe и pwsh.exe запускают разные движки
$result = Get-Command powershell,pwsh -ErrorAction SilentlyContinue | Select-Object Name,Source
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 3 из 30
Windows-совместимый модуль импортируется через -UseWindowsPowerShell. Как поведёт себя фрагмент в указанном условии?
PowerShellWindows-совместимый модуль импортируется через -UseWindowsPowerShell
$result = Import-Module SomeLegacyModule -UseWindowsPowerShell
$summary = [ordered]@{ IsNull=($null -eq $result); Count=@($result).Count }
if($null -ne $result){$summary.Type=$result.GetType().FullName};[pscustomobject]$summary
Вопрос 4 из 30
Сценарий полагается на отсутствующий Windows PowerShell 5.1 на Linux. Какое утверждение верно для этого случая?
Вопрос 5 из 30
Одинаковый номер модуля означает одинаковое поведение. На каком правиле основан результат?
Вопрос 6 из 30
FileSystem и Environment доступны на нескольких платформах. Какой вывод был бы слишком сильным?
PowerShellFileSystem и Environment доступны на нескольких платформах
$result = Get-PSProvider | Select-Object Name,Drives
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 7 из 30
Env: переменные чувствительны к регистру на Unix. Какое действие не создаст новой скрытой зависимости?
PowerShellEnv: переменные чувствительны к регистру на Unix
$env:Demo="x"
$env:DEMO
Вопрос 8 из 30
Alias-провайдер изменяется в профиле. Почему локальный успех ещё ничего не доказывает?
PowerShellAlias-провайдер изменяется в профиле
$result = Get-ChildItem Alias: | Select-Object -First 3
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Вопрос 9 из 30
Сценарий принимает путь любого provider. Какой подход выдержит повторный запуск?
Вопрос 10 из 30
Пользовательский модуль добавляет PSDrive. Что остаётся непроверенным после успешного запуска?
Вопрос 11 из 30
Join-Path строит путь с правильным разделителем. Где заканчивается гарантия этого механизма?
PowerShellJoin-Path строит путь с правильным разделителем
$result = Join-Path $HOME ".config/powershell"
$items = @($result)
[pscustomobject]@{ Count=$items.Count; First=$items | Select-Object -First 1; IsNull=($null -eq $result) }
Вопрос 12 из 30
[IO.Path]::Combine используется для файлового пути. Какой принцип PowerShell здесь работает?
PowerShell[IO.Path]::Combine используется для файлового пути
$result = [IO.Path]::Combine($HOME,"data","x.json")
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Вопрос 13 из 30
Сравнение пути выполняется как строка. Как поступить, чтобы поведение осталось предсказуемым?
PowerShellСравнение пути выполняется как строка
$result = Resolve-Path -LiteralPath $path | Select-Object -ExpandProperty Path
$items = @($result)
[pscustomobject]@{ Count=$items.Count; First=$items | Select-Object -First 1; IsNull=($null -eq $result) }
Вопрос 14 из 30
Путь начинается с ~. Какой вывод был бы слишком сильным?
Вопрос 15 из 30
Двоеточие используется как разделитель PATH. Какое утверждение верно для этого случая?
Вопрос 16 из 30
Get-CimInstance Win32_OperatingSystem вызывается только на Windows. Какое решение здесь надёжнее?
PowerShellGet-CimInstance Win32_OperatingSystem вызывается только на Windows
$result = & { if($IsWindows){Get-CimInstance Win32_OperatingSystem}else{Get-Content /etc/os-release} }
$summary = [ordered]@{ IsNull=($null -eq $result); Count=@($result).Count }
if($null -ne $result){$summary.Type=$result.GetType().FullName};[pscustomobject]$summary
Вопрос 17 из 30
Внешняя команда получает аргументы массивом. Какой принцип PowerShell здесь работает?
PowerShellВнешняя команда получает аргументы массивом
$args=@("--format","json",$path)
& tool @args
Вопрос 18 из 30
$LASTEXITCODE проверяется после native command. Какое объяснение точнее?
PowerShell$LASTEXITCODE проверяется после native command
& git status --porcelain
if($LASTEXITCODE -ne 0){throw "git failed: $LASTEXITCODE"}
Вопрос 19 из 30
which/where заменяются Get-Command. Что точнее всего описывает поведение?
Вопрос 20 из 30
Сценарий парсит локализованный текст системной утилиты. Какой подход выдержит повторный запуск?
Вопрос 21 из 30
Тест падает только на Linux. На каком правиле основан результат?
PowerShellТест падает только на Linux
$result = & { $PSVersionTable;Get-PSProvider;[Text.Encoding]::Default.WebName }
$items = @($result)
[pscustomobject]@{ Count=$items.Count; First=$items | Select-Object -First 1; IsNull=($null -eq $result) }
Вопрос 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 }
Вопрос 23 из 30
Native command видит другие аргументы. На каком правиле основан результат?
PowerShellNative 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
Вопрос 24 из 30
Кодировка файла различается. Какое объяснение точнее?
Вопрос 25 из 30
Модуль импортируется только в Windows PowerShell. Как поступить, чтобы поведение осталось предсказуемым?
Вопрос 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
Вопрос 27 из 30
Сценарий повышает права через sudo с пользовательской строкой. Какой вывод был бы слишком сильным?
PowerShellСценарий повышает права через sudo с пользовательской строкой
# Сценарий для ревью: Сценарий повышает права через sudo с пользовательской строкой.
$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
Вопрос 28 из 30
Windows ACL считаются эквивалентом chmod. Что меняется из-за области выполнения?
PowerShellWindows ACL считаются эквивалентом chmod
# Сценарий для ревью: Windows ACL считаются эквивалентом chmod.
$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
Вопрос 29 из 30
Скачанный бинарник выбирается только по имени ОС. Какое действие не создаст новой скрытой зависимости?
Вопрос 30 из 30
Кроссплатформенный fallback молча отключает защиту. На каком правиле основан результат?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу