Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell 스크립트에서 로그 파일에 출력 쓰기

간단한 텍스트 로그 파일을 사용하여 실행을 제어하고 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 스크립트에서 로그 파일에 출력 쓰기

이 방법의 주요 단점은 항목이 로그에 기록된 시간(이벤트 발생)을 파악할 수 없다는 것입니다. 현재 타임스탬프를 로그 파일에 추가할 수 있습니다. 스크립트가 실행되고 특정 이벤트가 발생한 시간을 식별하는 데 도움이 됩니다.

더 편리하게 하기 위해 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"

이제 로그 파일에서 각 항목의 시간을 볼 수 있습니다.

PowerShell 스크립트에서 로그 파일에 출력 쓰기

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 명령의 전체 기록과 모든 출력이 표시됩니다.

모든 오류 및 경고도 기록되며 복잡한 PowerShell 스크립트를 디버깅할 때 매우 편리합니다.

Start-Transcript를 사용할 수 있습니다. 및 Stop-Transcript PowerShell 스크립트의 cmdlet을 사용하여 모든 작업과 출력을 기본적으로 기록합니다.

그룹 정책 옵션 PowerShell Transcription 켜기 사용 (컴퓨터 구성 –> 관리 템플릿 –> Windows 구성 요소 –> Windows PowerShell), 컴퓨터에서 실행되는 모든 PowerShell 명령 및 출력의 자동 로깅을 활성화할 수 있습니다. 컴퓨터에서 GPO 설정을 업데이트한 후 실행 중인 각 powershell.exe 프로세스에 대해 별도의 텍스트 로그 파일이 생성되고 모든 PS 명령과 해당 출력이 기록됩니다.
PowerShell 스크립트에서 로그 파일에 출력 쓰기