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

Расследование аварии и надёжная автоматизация

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант; близкие ответы различаются механизмом, порядком выполнения, областью действия или эксплуатационной границей. После завершения вы увидите общий результат, результаты по 6 тематическим шкалам и подробные объяснения.
Вопрос 1 из 30
Start-Transcript пишет сеанс в уникальный файл. Какая граница важна для автоматизации?
PowerShellStart-Transcript пишет сеанс в уникальный файл
$p=Join-Path $logDir ("transcript-{0:yyyyMMdd-HHmmss}-{1}.txt" -f (Get-Date),$PID)
Start-Transcript -Path $p
Вопрос 2 из 30
Stop-Transcript вызывается в finally. Что следует сделать до запуска в автоматизации?
PowerShellStop-Transcript вызывается в finally
$started=$false
try{Start-Transcript $p;$started=$true;Invoke-Work}finally{if($started){Stop-Transcript}}
Вопрос 3 из 30
Несколько процессов используют один transcript path. Какое условие нужно проверить отдельно?
PowerShellНесколько процессов используют один transcript path
$result = "$env:COMPUTERNAME-$PID-$([guid]::NewGuid()).log"
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Вопрос 4 из 30
В transcript попадает credential/токен. Какой подход выдержит повторный запуск?
Вопрос 5 из 30
Расследование опирается только на transcript. Какой вывод можно подтвердить?
Вопрос 6 из 30
Снимок состояния собирается до перезапуска службы. Где заканчивается гарантия этого механизма?
PowerShellСнимок состояния собирается до перезапуска службы
$snapshot=[pscustomobject]@{At=[datetimeoffset]::UtcNow;PS=$PSVersionTable.PSVersion.ToString();Processes=Get-Process|Select-Object Name,Id,CPU,WorkingSet64}
Вопрос 7 из 30
Команды диагностики сами могут зависнуть. Почему похожие команды дают разный контракт?
PowerShellКоманды диагностики сами могут зависнуть
$steps = @{ Processes={Get-Process}; Network={Get-NetTCPConnection}; Events={Get-WinEvent -LogName System -MaxEvents 20} }
$result = foreach($name in $steps.Keys){
  $job = Start-ThreadJob -ScriptBlock $steps[$name]
  if(Wait-Job $job -Timeout 10){ [pscustomobject]@{Step=$name;Status=$job.State;Data=Receive-Job $job} }
  else { Stop-Job $job; [pscustomobject]@{Step=$name;Status='Timeout'} }
  Remove-Job $job -Force
}
$result
Вопрос 8 из 30
Состояние сохраняется как Format-Table текст. Какой вывод можно подтвердить?
PowerShellСостояние сохраняется как Format-Table текст
$result = $snapshot|Export-Clixml .\snapshot.clixml
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 9 из 30
Снимок не содержит версии сценария и конфигурации. Какое утверждение верно для этого случая?
Вопрос 10 из 30
Дамп собирается на всех серверах одновременно. На каком правиле основан результат?
Вопрос 11 из 30
Операция помечается стабильным operation id. Какой вывод можно подтвердить?
PowerShellОперация помечается стабильным operation id
$operationId=[guid]::NewGuid().ToString("N")
Invoke-Step -OperationId $operationId
Вопрос 12 из 30
Сценарий сначала читает состояние, затем применяет только разницу. На каком правиле основан результат?
PowerShellСценарий сначала читает состояние, затем применяет только разницу
$result = & { if(-not(Test-DesiredState)){Set-DesiredState};Test-DesiredState }
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 13 из 30
Временные файлы имеют случайные имена, но не checkpoint. Как следует читать этот фрагмент?
PowerShellВременные файлы имеют случайные имена, но не checkpoint
$result = & { Set-Content "$work/step1.done.tmp" ok;Move-Item "$work/step1.done.tmp" "$work/step1.done" }
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 14 из 30
Retry повторяет любой exception. Какое объяснение точнее?
Вопрос 15 из 30
Повтор запускается после неизвестного частичного результата. Какое утверждение верно для этого случая?
Вопрос 16 из 30
Перед изменением сохраняется точный previous state. Какой принцип PowerShell здесь работает?
PowerShellПеред изменением сохраняется точный previous state
$before=Get-ItemProperty $path -Name Mode -ErrorAction SilentlyContinue
$valueType = if($null -eq $before){'<null>'}else{$before.GetType().FullName}
[pscustomobject]@{ Value=$before; Type=$valueType; Count=@($before).Count }
Вопрос 17 из 30
Изменение файла выполняется через temp и atomic replace. Что следует сделать до запуска в автоматизации?
PowerShellИзменение файла выполняется через temp и atomic replace
$tmp="$path.$PID.tmp"
$content|Set-Content $tmp
Move-Item $tmp $path -Force
Вопрос 18 из 30
Rollback вызывается после нескольких успешных шагов. Какой принцип PowerShell здесь работает?
PowerShellRollback вызывается после нескольких успешных шагов
$completed = [Collections.Generic.List[string]]::new()
try {
  Set-AppConfig; $completed.Add('Config')
  Restart-AppService; $completed.Add('Service')
  Test-AppHealth -ErrorAction Stop
}
catch {
  $undo = @($completed); [array]::Reverse($undo)
  foreach($step in $undo){ Undo-AppStep -Name $step -ErrorAction Continue }
  throw
}
Вопрос 19 из 30
Откат предполагает, что внешнее состояние никто не менял. Какой подход выдержит повторный запуск?
Вопрос 20 из 30
Откат не тестируется. Что точнее всего описывает поведение?
Вопрос 21 из 30
Сценарий сообщил success, но результат неполный. Какое решение здесь надёжнее?
PowerShellСценарий сообщил success, но результат неполный
$r=Invoke-Job 2>&1
[pscustomobject]@{Success=$?;LastExit=$LASTEXITCODE;Count=@($r).Count}
Вопрос 22 из 30
Ошибка исчезает при ручном запуске. Как следует читать этот фрагмент?
PowerShellОшибка исчезает при ручном запуске
$context = [pscustomobject]@{
    User       = [Environment]::UserName
    Host       = $Host.Name
    Profile    = $PROFILE.CurrentUserCurrentHost
    Location   = (Get-Location).Path
    Interactive = [Environment]::UserInteractive
}
$context | ConvertTo-Json -Depth 3
Вопрос 23 из 30
После retry появились дубли. Как поступить, чтобы поведение осталось предсказуемым?
PowerShellПосле retry появились дубли
# Сценарий для ревью: После retry появились дубли.
$operationId = [guid]::NewGuid().ToString('N')
$headers = @{ 'Idempotency-Key'=$operationId; Authorization="Bearer $env:API_TOKEN" }
foreach($attempt in 1..3){
  try { Invoke-RestMethod -Method Post -Uri $uri -Headers $headers -Body $body -TimeoutSec 5 -ErrorAction Stop; break }
  catch { if($attempt -eq 3){ throw }; Start-Sleep -Seconds $attempt }
}
Вопрос 24 из 30
Перезапуск восстановил сервис. Какой подход выдержит повторный запуск?
Вопрос 25 из 30
Как локализовать регрессию?
Вопрос 26 из 30
Диагностический пакет содержит секреты и персональные данные. Что остаётся непроверенным после успешного запуска?
PowerShellДиагностический пакет содержит секреты и персональные данные
# Сценарий для ревью: Диагностический пакет содержит секреты и персональные данные.
$context = [pscustomobject]@{ User=[Environment]::UserName; Host=$Host.Name; At=[datetimeoffset]::UtcNow }
$headers = @{ Authorization = "Bearer $env:API_TOKEN" }
Write-Information (ConvertTo-Json @{ Context=$context; Headers=$headers }) -InformationAction Continue
Invoke-RestMethod -Uri $uri -Headers $headers -ErrorAction Stop
Вопрос 27 из 30
Аварийный сценарий запускается от Domain Admin. Какой принцип PowerShell здесь работает?
PowerShellАварийный сценарий запускается от Domain Admin
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = [Security.Principal.WindowsPrincipal]::new($identity)
[pscustomobject]@{
    Name          = $identity.Name
    IsAdministrator = $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
    Endpoint      = $PSSenderInfo.ConfigurationName
}
Вопрос 28 из 30
Auto-remediation срабатывает на одном слабом сигнале. Какой принцип PowerShell здесь работает?
PowerShellAuto-remediation срабатывает на одном слабом сигнале
$signal = Get-Counter '\Processor(_Total)\% Processor Time'
$cpu = $signal.CounterSamples.CookedValue
if ($cpu -gt 80) {
    Restart-Service -Name 'Contoso.Api' -Force
}
[pscustomobject]@{ Cpu = [math]::Round($cpu,1); Action = ($cpu -gt 80) }
Вопрос 29 из 30
Откат удаляет новые данные пользователей. На каком правиле основан результат?
Вопрос 30 из 30
Пакет автоматизации обновляется во время инцидента без проверки. Какое скрытое допущение делает решение ненадёжным?

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

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

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

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