생산 수준의 PowerShell 프로그램에 사용하는 poshcode (http://poshcode.org/3270)에 게시 한 Write-Log
함수를 작성했습니다. 또는 Start-Transcript
을 사용하여 콘솔에 표시된 거의 모든 것을 파일에 기록 할 수 있습니다. 당신이 Out-Host
같은 ping.exe localhost | Out-Host
에 파이프하여 호스트 출력 API를 통해 강제하지 않는 한 외부 프로그램 출력을 기록하지 않습니다
- -
Start-Transcript
에 대해 몇 개는있다.
- 모든 호스트에서 지원되지는 않습니다. 예를 들어 PowerGUI에서는 지원하지 않으므로
$host
을 사용하여 호스트 검사를 추가해야합니다.
일반적으로 오류 처리에 사용하는 패턴은 모든 것을 try/catch로 래핑하는 것입니다. 예외 개체는 catch 블록에 $_
으로 사용할 수 있습니다. 오류, 메시지, 줄 및 열 번호 등에 관한 모든 내용이 포함됩니다.
$ErrorActionPreference
~ Stop
또한 모든 cmdlet에서 종료 오류가 발생하여 스크립트가 계속되지 않도록합니다. 그것은 다음과 같습니다
$ErrorActionPreference = "Stop"
try {
# Write lof of registry values
New-Item -Path HKCU:\Software\MyTest -ItemType Directory
New-ItemProperty -Path HKCU:\Software\MyTest -Name MyTestValue -Value Test
# Register COM Dlls
regsrv32 my.dll
if ($LASTEXITCODE -ne 0) { throw "Failed to register my.dll" }
# Make IIS AppPools
IIS:\>New-WebAppPool NewAppPool
# Start Windows Services
Start-Service -Name MyService
} catch {
Write-Log ("Script failed. The error was: '{0}'." -f $_)
}
가 롤백하는 ... 레지스트리 거래 (이상 Vista를 가정 이상)를 지원하기 때문에 롤백 레지스트리 작업입니다 쉽게 할 수있는 유일한 것은 쉬운 일이 아니다. 데이터베이스와 같은 트랜잭션을 생성하고 오류가 발생하면 롤백 할 수 있습니다. 언급 한 작업의 나머지 부분에는 롤백하기위한 특정 코드가 필요합니다. 이 같은 catch 블록에 롤백 코드를 추가 할 수 있습니다
} catch {
# Undo the registry transaction.
# Unregister the DLL.
# Delete the App pool if it exists.
# Stop the windows service.
}
전체 소스 코드 샘플이 포함 된 최종 솔루션은 무엇입니까? – Kiquenet