스크립트 테스트를 위해 PowerShell에서 에코에 해당


233

플래그를 설정하고 스크립트 전체에서 데이터가 일치하는 것을 확인하여 PowerShell 스크립트 에서 변수 및 값을 출력하고 싶습니다 .

어떻게해야합니까?

예를 들어 다음 PHP 코드와 동등한 PowerShell은 무엇입니까?

echo "filesizecounter: " . $filesizecounter 

PowerGUI 와 함께 제공되는 스크립트 편집기 / 디버거를 확인하십시오 . 당신이하고있는 일에 적합 할 수 있습니다. Powershell 2에도 디버거가 포함되어 있음을 이해합니다 (그러나 시도하지는 않았습니다).
dan-gph

답변:


275

몇 가지 방법이 있습니다.

Write-Host: 기능 / cmdlet 출력에 포함되지 않은 콘솔에 직접 작성하십시오. 전경색과 배경색을 설정할 수 있습니다.

Write-Debug: $DebugPreference계속 또는 중지로 설정 한 경우 콘솔에 직접 씁니다 .

Write-Verbose: $VerbosePreference계속 또는 중지로 설정 한 경우 콘솔에 직접 씁니다 .

후자는 Write-Debug디버깅을 위한 추가 옵션 정보를 위한 것입니다 (이 경우에는 적합 할 것입니다).

추가 :에서 PSH2 (적어도) 스크립트를 사용하여 cmdlet를 자동으로 얻을 것이다 바인딩 -Verbose-Debug로컬 수 있도록 스위치 매개 변수 Write-VerboseWrite-Debug컴파일 된 cmdlet 및 공급자가대로 (즉,이 환경 변수를 무시).


4
Write-Debug 및 Write-Verbose의 좋은 점은 코드에 디버그 명령문을 그대로두고 적절한 환경 설정 변수를 사용하여 필요할 때 출력을 켤 수 있다는 것입니다. 시간을 절약하고 다른 기능 사용자에게 유용한 기능입니다.
JasonMArcher 2009

5
사소하지 않은 개체의 경우이 세 개의 Write- * cmdlet을 사용하기 전에이 개체를 사용하여 개체를 표시 가능한 문자열로 변환해야하므로 Out-String에 익숙해 져야합니다.
Jaykul

113

Powershell에는에 대한 별칭 매핑 에코가 있습니다 Write-Output.

echo "filesizecounter : $filesizecounter"


7
echo별칭이다 Write-Output등의 마이크로 소프트 당 TechNet이 논의 여기
글렌 로렌스

2
감사합니다 Glenn,이 글을 게시 한 후 6 년 동안 별칭이 다시 매핑 된 것 같습니다. 파이프 라인을 우회하기 때문에 Write-Host를 사용해서는 안됩니다. 이것을 나타 내기 위해 답장을 업데이트했습니다. 감사!
Justin R.

3
스크립트 실행을 추적하기 위해 콘솔에 에코 "디버그"출력을 에코하는 것만으로 파이프 라인을 우회하고 싶지 않은 이유는 무엇입니까? Write-Output은 Write-Output에 대한 마지막 호출 내용이 스택에 남아있어 함수에서 명시 적으로 리턴하려고 시도하는 모든 변수를 무시하는 이상한 부작용이 있습니다. 그런 부작용은 언어가 행동하기에 끔찍한 방법처럼 느껴집니다.
Craig

33

PowerShell이 ​​보간하지 않습니까?

PHP에서

echo "filesizecounter: " . $filesizecounter 

다음과 같이 쓸 수도 있습니다 :

echo "filesizecounter: $filesizecounter" 

PowerShell에서 다음과 같은 것이 필요에 맞아야합니다.

Write-Host "filesizecounter: $filesizecounter"

9
PHP는이 질문과 관련이 없습니다
reggaeguitar

25
Write-Host "filesizecounter : " $filesizecounter 

14

Powershell에서 에코하는 가장 쉬운 방법은 문자열 객체를 만들고 파이프 라인에서 출력하는 것입니다.

$filesizecounter = 8096
"filesizecounter : $filesizecounter"

물론 Write- * 메서드를 사용하지 않을 때는 약간의 유연성을 포기해야합니다.


9

echo는 Write-Host 와 동일하지만 Write-Output의 별명 입니다.

그것은되지 PowerShell의 에코 및 쓰기 호스트 사이의 차이는 무엇입니까? .

echo는 쓰기 출력의 별명이며 성공 출력 스트림에 기록합니다. 이를 통해 파이프 라인을 통해 출력을 처리하거나 파일로 리디렉션 할 수 있습니다. Write-Host는 콘솔에 직접 쓰므로 더 이상 출력을 리디렉션 / 처리 할 수 ​​없습니다.


8

쓰기 호스트가 제대로 작동합니다.

$Filesize = (Get-Item $filepath).length;
Write-Host "FileSize= $filesize";

5

그렇게하는 것이 현명한 지 모르겠지만

"filesizecounter: " + $filesizecounter

그리고 출력해야합니다 :

filesizecounter : 값


1
"filesizecounter: $filesizecounter"더 짧습니다.
jiggunjer

3

PowerShell에는와 같은 몇 가지 일반적인 명령에 대한 별칭이 있습니다 echo. PowerShell에 다음을 입력하십시오.

Get-Alias echo

응답을 얻으려면 :

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output

Get-Alias조차도 alias가 gal -> Get-Alias있습니다. 에 gal echo대한 별칭을 얻기 위해 작성할 수 echo있습니다.

gal echo

다른 별칭은 다음과 같습니다. https://docs.microsoft.com/en-us/powershell/scripting/learn/using-familiar-command-names?view=powershell-6

cat dir mount rm cd echo move rmdir chdir erase popd sleep clear h ps sort cls history pushd tee copy kill pwd type del lp r write diff ls ren


2

시도 Get-Content .\yourScript.PS1하고 당신은 당신의 스크립트의 내용을 볼 수 있습니다.

또한 다음 코드를 스크립 코드에 삽입 할 수 있습니다.

get-content .\scriptname.PS1
script code
script code

....


처리 된 실제 값 (예 : env var 대치)이 표시되지 않으므로 질문에 대한 답변이 아닙니다.
iisystems

0

또한 Set-PSDebug 는 구식 echo on배치 명령 과 유사합니다 .

Set-PSDebug -Trace 1

이 명령은 실행중인 스크립트의 모든 줄을 표시합니다.

Trace매개 변수 값이 1이 실행되는 스크립트의 각 행은 추적됩니다. 매개 변수의 값이 2이면 변수 지정, 함수 호출 및 스크립트 호출도 추적됩니다. Step 매개 변수가 지정되면 스크립트의 각 행이 실행되기 전에 프롬프트가 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.