programing

Powershell Write-Host를 텍스트 파일에 추가 - 컴퓨터 이름 및 타임 스탬프

newstyles 2023. 9. 11. 21:32

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-Hoststandard 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