파워셸:스크립트에 오류가 표시되지 않도록 하려면 어떻게 해야 합니까?
예를 들어 PowerShell 스크립트가 존재하지 않는 서버("bla")의 SQL Server 개체를 생성하려고 하면 PowerShell에서 많은 PowerShell 오류가 빨간색으로 표시됩니다.
스크립트는 ""의 에""의 값을 체크합니다.$?
이러한 호출 후 오류를 표시 및 기록하고 나면 PowerShell 오류의 여러 줄도 표시하지 않는 것이 좋습니다.
스크립트에 표시되는 것을 비활성화하려면 어떻게 해야 합니까?
몇 가지 옵션이 있습니다.은 ""를 하는 것입니다.ErrorAction
설정을 지정합니다.
-Erroraction
cmdlet을 사용하다 를 사용할 수 .-erroraction 'silentlycontinue'
이 명령어는 기본적으로 해당 명령어로 생성된 모든 오류 메시지를 무시합니다. 이 경우에도 하실 수 있습니다.Ignore
3+):(PowerShell 3+):
Sililent Continue와 달리 Ignore는 $Error 자동변수에 오류 메시지를 추가하지 않습니다.
""를 할 수 .$ErrorActionPreference
하세요.$ErrorActionPreference= 'silentlycontinue'
-ErrorAction에 대한 자세한 내용은 about_CommonParameters를 참조하십시오.$ErrorActionPreference에 대한 자세한 내용은 about_preference_variables를 참조하십시오.
Windows PowerShell은 오류를 보고하는 두 가지 메커니즘을 제공합니다. 하나는 오류를 종료하는 메커니즘이고 다른 하나는 오류를 종료하지 않는 메커니즘입니다.
는 "CmdLets"를 할 수 .ThrowTerminatingError
오브젝트를 하지 않도록 .스크립트 쓰기에서는 예외를 사용하여 이러한 오류를 검출할 수 있습니다.
EX:
try
{
Your database code
}
catch
{
Error reporting/logging
}
는 "CmdLets"를 할 수 .WriteError
객체의 할 수 때 되지 않는 합니다.을 사용하여 "ErrorAction"을 할 수 있습니다.$ErrorActionPreference
스크립트 동작 전체를 설정합니다.
이 때 덧붙일 도 있어요.2>$null
명령대로 하겠습니다.
예:
$rec = Resolve-DnsName $fqdn -Server $dns 2>$null
넌 여기서 벗어나고 있어.이 아니며, 이 좋습니다.수동으로 체크하는 것도 좋은 방법이 아닙니다.$?
모든 명령어가 매우 번거롭고 실행하는 것을 잊기 쉽습니다(오류가 발생하기 쉽습니다).실수하기 쉽도록 행동하지 마세요.빨간색이 많이 나타나면 스크립트가 중지되어야 하는데 계속 진행된다는 의미입니다.명령어 대부분이 실패하면 더 이상 유용한 작업을 수행할 수 없습니다.프로그램과 시스템이 알 수 없는 상태일 때 프로그램을 계속 진행하면 알 수 없는 결과가 초래됩니다.시스템이 파손된 상태가 될 가능성이 있습니다.
올바른 해결책은 첫 번째 오류에서 알고리즘을 중지하는 것입니다.이 원리를 "fail fast"라고 하며 PowerShell에는 이러한 동작을 가능하게 하는 메커니즘이 내장되어 있습니다.이것은 에러 프리퍼런스라고 불리는 설정으로, 이것을 최고 레벨로 설정하면, 스크립트(및 그것을 덮어쓰지 않는 경우는 자 스코프)가 다음과 같이 동작합니다.
$ErrorActionPreference = 'Stop'
큰 오류 되며, 했을 때 .이러한 명령어는 할 필요가 .$?
령명이것에 의해, 코드의 심플화와 신뢰성이 크게 향상됩니다.내가 、 든든본본본에 에에에에 。 츠미야
드물게 스크립트의 계속이 타당하다고 확신할 수 있는 경우는, 다음의 2개의 메카니즘 중 하나를 사용할 수 있습니다.
- : 이것은 보다 우수하고 유연한 메커니즘입니다
catch
.포장할 수 있습니다.try
/catch
여러 명령어를 차단하면 첫 번째 오류가 시퀀스를 중지하고 핸들러로 점프하여 해당 시퀀스를 로그로 기록하고 회복하거나 오류를 더 크게 버블링할 수 있습니다.도 할 수 요.catch
특정 에러에 대해서는, 에러가 아니고, 예측한 특정의 상황에서만 기동합니다(예를 들면, 파일이 이미 존재하기 때문에 작성하지 않는 것은, 시큐러티 에러와는 다른 응답을 보증합니다). - 일반적인 파라미터는 다음과 같습니다.이 파라미터는 단일 함수콜의 오류 처리를 변경하지만 특정 유형의 오류로 제한할 수는 없습니다.이 스크립트는 예상할 수 있는 오류뿐만 아니라 어떤 오류에서도 계속 진행할 수 있다고 확신할 수 있는 경우에만 사용해야 합니다.
같은 에는 아마 큰 것을 갖고 거예요.try
/catch
이치노 첫 와 이 오류가 발생하면 됩니다.catch
블록은 종료하기 전에 로그를 기록할 수 있습니다.이것에 의해, 로그 파일과 터미널의 출력을 정리할 뿐만 아니라, 프로그램으로부터 많은 중복 코드가 삭제되어, 프로그램의 문제가 발생할 가능성이 낮아집니다.
이것은 외부 실행 파일이 실패했을 경우의 대처가 되지 않기 때문에(종래에는 종료 코드가 0이 아니므로) 체크할 필요가 있습니다.$LASTEXITCODE
호출할 수 있습니다.이러한 제한에도 불구하고 설정을 통해 많은 코드와 노력을 절약할 수 있습니다.
신뢰성 향상
Set-StrictMode -Version Latest
이렇게 하면 존재하지 않는 변수를 사용하거나 다른 이상한 상황에서 PowerShell이 자동으로 진행되지 않습니다.( 를 참조해 주세요.-Version
parameter를 참조해 주세요).
이러한 두 설정을 조합하면 PowerShell의 Fail-Fast 언어가 훨씬 더 쉬워지고 프로그래밍이 훨씬 쉬워집니다.
다음을 사용하여 호스트 이름을 해결하려고 할 때 비슷한 문제가 발생했습니다.[system.net.dns]
IP가 해결되지 않은 경우.Net에서 종료 에러가 발생했습니다.종료 오류를 방지하고 출력을 제어하기 위해 다음을 사용하여 함수를 만들었습니다.TRAP
.
예.
Function Get-IP
{PARAM ([string]$HostName="")
PROCESS {TRAP
{"" ;continue}
[system.net.dns]::gethostaddresses($HostName)
}
}
더하다-ErrorAction SilentlyContinue
대본대로 하면 됩니다.
경우에 따라서는 Out-Null 명령 뒤에 파이프를 연결할 수 있습니다.
command | Out-Null
미켈의 대답을 연장하다.
그래도 오류를 캡처하려면 "ErrorAction stop"과 트라이캐치를 조합하여 사용할 수 있습니다.
"Error Action silent continue"는 오류를 무시합니다.
예:
try
{
New-Item -Path "/somepath" -Name "somename" -ErrorAction Stop | Out-Null
}
catch
{
echo "You must run this command in an elevated mode."
}
메모: "silent stop" 액션은 없습니다.Mickel의 답변은 "stop" 액션을 가리킨다고 생각합니다.오타일 가능성이 높다."정지" 액션과 결합된 트라이캐치를 사용하는 아이디어는 최종 오류를 무시할 수 있을 뿐만 아니라 오류 발생 시 무언가를 보여줄 수 있는 것입니다.
cmdlet의 powershell 에러 메시지를 억제하고 오류를 검출하려면 "-erroraction 'silent Stop'"을 사용합니다.
언급URL : https://stackoverflow.com/questions/8388650/powershell-how-can-i-stop-errors-from-being-displayed-in-a-script
'programing' 카테고리의 다른 글
'Get-ADUser' 용어가 cmdlet 이름으로 인식되지 않습니다. (0) | 2023.04.14 |
---|---|
Excel에서 상위 5개 최대값 추출 (0) | 2023.04.14 |
Powershell의 'more' 명령어 또는 'less' 명령어 중 어느 것에 해당합니까? (0) | 2023.04.14 |
Swift 3, 4, 5에서 GCD 뒤에 dispatch_를 쓰는 방법은 무엇입니까? (0) | 2023.04.14 |
MAC 주소 가져오기 (0) | 2023.04.14 |