Powershell Write-Host를 텍스트 파일에 추가 - 컴퓨터 이름 및 타임 스탬프
저는 파워셸 초보자이고 현재 두 번째 대본을 쓰고 있으니 참아주세요.저는 지금 하려고 합니다.write-host
그리고 내 쓰기 호스트 메시지를 타임 스탬프와 함께 출력하고, 어떤 컴퓨터가 내 다양한 스크립트 블록을 텍스트 파일로 완성하고 있는지, 어떤 구문을 사용하여 작업을 수행해야 하는지 문제가 있습니다.
저는 테스트 목적으로 다음을 시도했습니다.Syntax가 다운되면 서버로 이동합니다. 지금은 로컬로 이동합니다.C:
운전해.
write-host "folders created successfully $env:computername" >> c:\scripts\testlog.txt
텍스트 파일이 생성되고 있지만 그 안에 내용이 없습니다. 모두 비어 있습니다.
Start-Transcript cmdlet 사용 - 다음과 같이 Write-Host 출력을 캡처할 수 있습니다.
Start-Transcript -Path .\testlog.txt
Write-Host "Hello World"
Stop-Transcript
Write-Host
standard out을 사용하지 않습니다.다른 것은 건너뛰고 항상 콘솔에 직접 출력합니다.Write-Output
출력을 표준 아웃으로 합니다.
텍스트 파일에 명령어의 출력을 추가하는 방법과 같은 특정 질문에 답하려면 다음을 사용할 수 있습니다.
Write-Output "folders created successfully $env:computername" >> C:\scripts\testlog.txt
그러나, 당신은 또한 사용할 수 있습니다.Add-Content
:
Add-Content -Path C:\scripts\testlog.txt -Value "folders created successfully $env:computername"
아니면 당신은 당신에게.Out-File -Append
:
"folders created successfully $env:computername" | Out-File -FilePath C:\scripts\testlog.txt -Append
왜 다른 방법을 쓰십니까?그들에게는 몇 가지 차이점이 있는데, 당신은 자주 마주치지 않을 것입니다.리디렉션 연산자는 발생하는 일(인코딩 등)에 대한 제어권을 충분히 부여하지 않습니다.
Write-Host
는 콘솔에 데이터를 전송하기 위한 것일 뿐이며 다른 곳은 없습니다.데이터를 다른 곳으로 보내려고 한다면, 즉 파일로 보내려면 출력 스트림으로 보내야 합니다.
write-output "folders created successfully $($env:computername)" >> c:\scripts\testlog.txt
아니면
"folders created successfully $($env:computername)" >> c:\scripts\testlog.txt
주변의 하위 표현에 주목합니다.$env
. 큰따옴표에서 변수가 제대로 확장되는지 확인해야 합니다.
기본 PowerShell cmdlet으로 이를 수행하는 방법에 대한 Bacons의 답변 보기
다른 답변들이 이미 지적했듯이,Write-Output
는 출력 스트림에 기록하는 cmdlet이며, 해당 출력을 파일로 리디렉션하는 데 사용할 수 있습니다.하지만, 중요한 차이를 만드는 그것의 특징을 주목하세요.Write-Host
내부 기능에 사용되는 경우:
쓰기-출력 사용:
Function Get-SomeResult {
Write-Output "Some logging here"
return "My desired result"
}
Function Start-Something {
$result = Get-SomeResult
Write-Output "The result is: $result"
}
Start-Something >> "$PSScriptRoot\MyLog.log"
로그는 다음과 같습니다.
결과: 여기 기록 일부 내가 원하는 결과
보다시피 출력이 반환된 개체의 일부가 되었습니다.$result
, 의도하지 않은 것 같습니다
쓰기-호스트 사용:
Function Get-SomeResult {
Write-Host "Some logging here"
return "My desired result"
}
Function Start-Something {
$result = Get-SomeResult
Write-Host "The result is: $result"
}
Start-Something >> "$PSScriptRoot\MyLog.log"
로그는 예상대로 다음과 같습니다.
여기 약간의 로깅
결과는: 내가 원하는 결과입니다.
의 된 의 반환된 입니다.Get-SomeResult
따라서 함수는 우리가 설정하고자 했던 값을 유지하는 것입니다.
파일로 출력 기능
이 문제를 해결하는 한 가지 방법은 다음과 같은 별도의 함수를 만들어 스크립트 내부의 로그 경로를 반복하지 않도록 하는 것입니다.
$script:logPath = "$PSScriptRoot\MyLog.log"
Function Write-Log {
param($Message)
Write-Output $Message >> $script:logPath
}
Function Get-SomeResult {
Write-Log "Some logging here"
return "My desired result"
}
Function Start-Something {
$result = Get-SomeResult
Write-Log "The result is: $result"
}
Start-Something
우리의 새로운Write-Log
다음과 같이 사용할 수 있습니다.Write-Output
Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ,Write-Output
이 간단한 의 사용 사례에 될 수 , 의 에는 할 이 할 의
언급URL : https://stackoverflow.com/questions/28812239/powershell-write-host-append-to-text-file-computer-name-and-time-stamp
'programing' 카테고리의 다른 글
ASP에서 대용량 파일을 전달하는 방법NET 응답? (0) | 2023.09.16 |
---|---|
데이터베이스 트리거가 필요합니까? (0) | 2023.09.11 |
모듈을 python에 "pythonport"한 다음 가져오기 후 코드를 변경하는 방법 (0) | 2023.09.11 |
MySQL - NULL safe not equal 연산자 (0) | 2023.09.11 |
GCC: 배열 유형에 불완전한 요소 유형이 있습니다. (0) | 2023.09.11 |