windows 결과 PowerShell에서 출력하는 방법



batch-file (6)

Write-Host "Found file - " + $File.FullName -ForegroundColor Magenta

Magenta는 "System.ConsoleColor"열거 자 값 중 하나 일 수 있습니다 - 검정, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White.

+ $File.FullName 은 선택적이며 변수를 문자열에 넣는 방법을 보여줍니다.

배치 파일 내에서 PowerShell 스크립트를 실행하고 있습니다. 스크립트는 웹 페이지를 가져 와서 페이지의 내용이 "OK"문자열인지 확인합니다.

PowerShell 스크립트는 오류 수준을 배치 스크립트에 반환합니다.

배치 스크립트는 FTP 자동화 프로그램 인 ScriptFTP 에 의해 실행됩니다. 오류가 발생하면 전자 메일을 통해 ScriptFTP가 전체 콘솔 출력을 관리자에게 보낼 수 있습니다.

PowerShell 스크립트에서 "OK"가 아닌 경우 웹 사이트에서 반환 값을 출력하므로 오류 메시지가 콘솔 출력에 포함되어 상태 메일에 포함됩니다.

PowerShell을 처음 사용하고 어떤 출력 함수를 사용해야할지 잘 모르겠습니다. 나는 세 가지를 볼 수있다.

  • 쓰기 호스트
  • 쓰기 출력
  • 쓰기 오류

Windows에 stdout 해당하는 내용을 쓸 때 옳은 것은 무엇입니까?


Answer #1

이 경우 Write-Output 이 필요할 것입니다.

너 같은 스크립트가 있다면

Write-Output "test1";
Write-Host "test2";
"test3";

그런 다음 리디렉션 된 출력 (예 : yourscript.ps1 > out.txt )을 사용하여 스크립트를 호출하면 "out.txt"의 test1\ntest3\n 화면에서 test2 가 표시됩니다.

"test3"및 Write-Output 줄은 항상 텍스트에 새로운 줄을 추가하므로 PowerShell에서이 작업을 중지 할 방법이 없습니다 (즉, 기본 명령을 사용하여 PowerShell에서 echo -n 사용할 수 없음). echo -n 의 (다소 기본적이고 쉬운 Bash ) 기능을 원한다면 samthebest의 대답을보십시오 .

배치 파일에서 PowerShell 명령을 실행하면 Write-Output 명령을 캡처 할 가능성이 높습니다. 나는 시스템 관리자와 무엇을 콘솔에 써야하는지에 대해 "오랜 토론"을하고 있으며, 그렇지 않아야하는 것에 대해 이야기 해왔다. 우리는 스크립트가 성공적으로 실행되었거나 사망 한 경우 정보가 Write-Host 가되어야하고 스크립트 작성자는 실행에 대해 알 필요가 있습니다 (업데이트 된 항목, 설정 한 필드 등 cetera)는 Write-Output (쓰기 출력)으로 이동합니다. 이렇게하면 시스템 관리자에게 스크립트를 제출할 때 스크립트를 실행할 수 있습니다. runthescript.ps1 >someredirectedoutput.txt . 화면에 모든 내용이 정상적으로 표시되면 볼 수 있습니다. 그런 다음 "someredirectedoutput.txt"를 개발자에게 보냅니다.


Answer #2

시나리오에서 기본 스트림 (출력 및 오류)에 기록하기 때문에 이들 중 하나를 사용할 수 있습니다. 출력을 다른 커맨드 릿으로 파이핑하는 경우 Write-Output 을 사용하려는 경우 결국 Write-Host 에서 종료됩니다.

이 문서에서는 다양한 출력 옵션에 대해 설명합니다. PowerShell O는 출력용입니다.


Answer #3

PowerShell에서 이러한 성가신 개행을 무시할 수는 없습니다. 이 작업을 수행하는 스크립트 나 cmdlet은 없습니다.

물론 Write-Host는 리다이렉트 할 수 없기 때문에 절대 난센스입니다! 자신 만의 글을 써야합니다.

using System;

namespace WriteToStdout
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args != null)
            {
                Console.Write(string.Join(" ", args));
            }
        }
    }
}

예 :

PS C:\> writetostdout finally I can write to stdout like echo -n
finally I can write to stdout like echo -nPS C:\>

Answer #4

PowerShell 스크립트 내부에서와 같이 외부 프로그램을 사용하십시오.

cmd /c echo "Long string: $LongStr" 

이것은 별개의 프로세스를 실행하는 측면에서 어리 석고 비싸지 만 PowerShell은 제대로 설계되지 않았습니다.


Answer #5

단순히 뭔가를 출력하는 것만으로도 PowerShell은 아름다움의 한 가지이며, 가장 큰 장점 중 하나입니다. 예를 들어, 일반적인 Hello, World! 응용 프로그램이 한 줄로 줄어 듭니다.

"Hello, World!"

문자열 객체를 생성하고 앞서 언급 한 값을 할당하며 .toString() 메소드를 호출하는 명령 파이프 라인의 마지막 항목이며 결과를 STDOUT (기본값)으로 출력합니다. 아름다움의 일.

다른 Write-* 명령은 텍스트를 관련 스트림으로 출력하고 그 위치를 그대로 유지합니다.





batch-file