간단한 텍스트 로그 파일을 사용하여 실행을 제어하고 PowerShell 스크립트의 모든 활동을 추적할 수 있습니다. 이는 오류를 디버깅하거나 스크립트 작업을 감사할 때 유용합니다. 이 기사에서는 텍스트 로그 파일에 출력을 작성하여 PowerShell 스크립트에서 로깅을 사용하는 몇 가지 방법을 보여줍니다.
가장 간단한 경우, 정보 메시지의 출력 또는 PowerShell 명령 결과를 텍스트 로그 파일에 작성하려는 경우 다음 형식 중 하나를 사용하여 PS 출력을 텍스트 파일로 리디렉션할 수 있습니다.
Write-Output "Files are successfully created in $env:computername" >> C:\PS\Logs\TestLog.txt
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:computername"
"Files are successfully created in $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog.txt –Append
모든 경우에 명령은 지정한 텍스트가 있는 txt 파일에 새 줄을 추가합니다.
매번 로그 파일 내용을 덮어쓰려면Set-Content
를 사용하세요. cmdlet.
이 방법의 주요 단점은 항목이 로그에 기록된 시간(이벤트 발생)을 파악할 수 없다는 것입니다. 현재 타임스탬프를 로그 파일에 추가할 수 있습니다. 스크립트가 실행되고 특정 이벤트가 발생한 시간을 식별하는 데 도움이 됩니다.
더 편리하게 하기 위해 PowerShell 스크립트에서 수신 데이터를 로그 파일에 기록하고 각 이벤트에 대한 타임스탬프를 추가하는 별도의 함수를 만들 수 있습니다.
아래와 같이 함수를 생성할 수 있습니다.
$Logfile = "C:\PS\Logs\proc_$env:computername.log"
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}
그런 다음 WriteLog를 호출합니다. 무언가를 기록하려면 기능을 사용하십시오.
WriteLog "The script is run"
WriteLog "Calculating…."
Start-Sleep 20
WriteLog "The script is successfully executed"
이제 로그 파일에서 각 항목의 시간을 볼 수 있습니다.
Write-Host
를 대체할 수 있습니다. LogWrite
를 사용한 호출 당신의 스크립트에 있습니다. PowerShell에는 PS 콘솔에 표시된 모든 명령과 출력을 텍스트 로그 파일에 저장하는 스크립트 기능이 내장되어 있습니다.
현재 PowerShell 세션을 기록하려면 Start-Transcript cmdlet이 사용됩니다.
명령을 실행하면 모든 명령의 출력이 기록되는 파일을 보여주는 메시지가 나타납니다. 기본적으로 로그 파일은 현재 사용자 프로필에 있습니다.
Transcript started, output file is C:\Users\user\Documents\PowerShell_transcript.DESKTOP-P2FHTKQ.+IzDgZiN.20210908163729.txt다음과 같이 텍스트 파일의 경로를 지정할 수 있습니다.
Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt
–추가 옵션은 새 세션이 덮어쓰지 않고 파일 끝에 기록됨을 나타냅니다.
콘솔에 결과를 출력하는 일부 PowerShell 명령을 실행합니다. 예를 들어 실행 중인 프로세스, 서비스 및 AD 복제 상태 목록을 표시해 보겠습니다.
Get-Process| where-object {$_.WorkingSet -GT 500000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" –Descending
Get-Service | Where-Object {$_.status -eq 'Running'}
Get-ADReplicationFailure -Target mun-dc01
현재 PowerShell 세션에 대한 로깅 중지:
Stop-Transcript
그런 다음 스크립트 로그 파일을 엽니다.
보시다시피 로그에는 콘솔에서 실행된 PowerShell 명령의 전체 기록과 모든 출력이 표시됩니다.
모든 오류 및 경고도 기록되며 복잡한 PowerShell 스크립트를 디버깅할 때 매우 편리합니다.
Start-Transcript
를 사용할 수 있습니다. 및 Stop-Transcript
PowerShell 스크립트의 cmdlet을 사용하여 모든 작업과 출력을 기본적으로 기록합니다.