류 기술
의 많은 년 후에 스크립트 작성을 위한 윈도우 PowerShell 콘솔,내가 지금 다음의 수준을 자동화 작성한 GUI 응용 프로그램을 실행하는 Windows PowerShell 명령으로 구성되어 있습니다. PowerShell Studio 양식은 GUI 응용 프로그램에 대한 부드럽고 잘 안내 된 소개를 제공하지만 오래된 습관을 깨기 위해 여전히 시간이 걸렸습니다.콘솔에서”그냥 작동하는”것들이 GUI 에서 의미가 없다는 것을 끊임없이 상기시켜야합니다. 쓰기 출력은 그 중 하나입니다.,
콘솔에 출력 쓰기
Windows PowerShell 콘솔에서 출력을 생성하면 출력이 콘솔 창에 텍스트 문자열로 나타납니다.
PS C:> Get-DateWednesday, December 3, 2014 7:16:38 AM
뒤에,윈도우 PowerShell 자동으로 추가는 문자열을 명령하는 파이프라인과 결과를 보냅니다”표준 출력”(“표준”). Windows PowerShell 을 호스팅하는 프로세스는 거의 항상 콘솔에 출력을 작성하여 표준 출력을 처리합니다(호스트 동작이 다를 수 있음).,
따라서 Get-Process cmdlet 과 같은 객체를 반환하는 cmdlet 을 실행하면(string represents of)객체가 콘솔에 나타납니다.
경우 형식과 같은 개체를 사용하여 목록 형식으로 또는 형식 테이블,(문자열의 표현)이 포맷 개체 콘솔에 나타납니다.
Write-Host 또는 Write-Output,Out-Host 또는 Out-String 을 실행하면 출력 문자열이 콘솔에 나타납니다.
도 보낼 경우 출력을 다른 출력 스트림을 사용하여 쓰기 경고를 작성-자세한 정보,또는 작성 오류,기본적으로 출력에서 나타납니다.,그러나 GUI 응용 프로그램에는 콘솔이 없습니다. 콘솔이 없을 때 그렇지 않으면 콘솔로 이동하는 출력은 어떻게됩니까? 그리고 더 중요한 것은 콘솔없이 출력을 어떻게 관리합니까?
내 출력은 어디에 있습니까?
GUI 응용 프로그램은 PowerShell Studio 에서 작성하는 멋진 응용 프로그램과 마찬가지로 콘솔이 없습니다. 표준 출력은 없습니다. 자동 추가 아웃 문자열이 없습니다.따라서 출력을 생성하고 파일이나 변수에 저장하지 않으면 출력이 손실됩니다.,
Get-Process | ... <Nowhere> ...
필드에 포수가 없을 때 투수가 야구를 던지는 것과 같습니다. 공은 단지 땅에 떨어지고 멈춤으로 굴러갑니다.. 무시되었습니다.따라서 GUI 응용 프로그램에서 출력을 작성하고 최선을 희망 할 수는 없습니다. Cmdlet 출력을 표시하거나 저장하려는 경우 명시 적으로 수행해야합니다.
텍스트 상자에 출력 표시
GUI 응용 프로그램은 컨트롤 모음입니다. 출력을 표시해야 할당하는 출력을 제어와 같이 텍스트 상자에 풍부한 텍스트 상자,또는 데이터는 그리드.,
예를 들어 콘솔에 로컬 컴퓨터의 이름을 표시하려면$env:ComputerName 명령을 실행합니다.
PS C:> $env:ComputerNameJUNEB-TESTBOX
콘솔이없는 GUI 응용 프로그램에서 같은 것을 시도 할 때 전혀 결과가 표시되지 않습니다. 이 예제에서는 클릭하면$env:ComputerName 표현식을 실행하는 버튼이있는 양식을 만들었습니다.,
$buttonComputerName_Click={<b>$env:컴퓨터</b>}
지만,때 나는 버튼을 클릭하고,아무것도 발생하는 경우에도,내가 콘솔 창이 열립니다.GUI 응용 프로그램에서 컴퓨터 이름을 표시하려면 내 양식에 표시 컨트롤을 추가하고 명령의 출력을 표시 컨트롤의 메소드에 할당합니다.,
예를 들어 양식에 Textbox 컨트롤을 추가하고 할당 연산자(=)를 사용하여 표현식의 결과를 TextBox 의 Text 속성에 할당 할 수 있습니다. 이제 버튼을 클릭하면 텍스트 상자에 출력이 표시됩니다.
$buttonComputerName_Click={$textboxResults.Text=$env:컴퓨터 이름}
여기 결과:
디스플레이 출력에서 다른 프로그램
를 표시할 수도 있습니다 명령 출력에서 객체지 않은 부분의 프로그램입니다., GUI 전문가들은이 접근법이 엉성하고 모범 사례가 아니라고 생각하지만 테스트 나 디버깅에 유용 할 수 있습니다.
예를 들어 출력을 Out-GridView cmdlet 으로 파이프 할 수 있습니다.
$buttonComputerName_Click={$env:컴퓨터이름|Out-트}
여기에서의 결과는:
작성할 수도 있습니다면 파일을 열고 파일입니다. 이러한 샘플 명령은 임시 파일을 만들고 파일에 기록한 다음 메모장을 사용하여 파일을 표시합니다., 다시 말하지만,이것은 실제 프로그래머가 싫증이 나지만 적어도 테스트를 위해 작동합니다.
여기 결과:
로 변환할 문자열
다른 작업을 관리해야에 응용 프로그램을 변환하는 개체 텍스트 문자열입니다. 일반적으로 이것은 출력을 Out-String 과 같은 Out cmdlet 으로 파이핑하는 것을 의미합니다. Out-GridView 를 포함한 out cmdlet 은 객체를 문자열 데이터로 변환합니다.
콘솔에 출력을 쓰면 Windows PowerShell 이 자동으로 아웃 문자열 명령을 파이프 라인에 추가합니다., 그러나 GUI 응용 프로그램에는 콘솔 및 자동 출력 문자열이 없습니다.
을 할당할 때 문자열이 아닌 객체를 문자열 또는 개체를 제어하는 문자열과 같은 개체는 TextBox,Windows PowerShell 전화 toString()메서드의 개체입니다. (다른 언어에서는 할당이 실패 할 뿐이지 만 도움을 주려고합니다.)DateTime 및 ErrorRecord 객체와 같은 일부 객체를 사용하면 toString()은 잘 작동하지만 많은 경우 이상하게 보이는 결과를 생성합니다.
예를 들어,이 명령은 Get-Process 명령의 결과를 텍스트 상자에 할당합니다., Windows PowerShell 은 텍스트가 필요하다는 것을 인식하고 프로세스 객체의 toString()메소드를 호출하지만 결과는 유용하지 않습니다.
$buttonGetProcess_Click={$textboxResults.Text=Get-프로세스}
을 얻을 표현한 문자열의 프로세스의 기본 테이블,파이프에 출력하는 문자열 microsoft azure 다음 그것을 할당합니다.
$buttonGetProcess_Click={$textboxResults.,Text=Get-Process|Out 문자열}
팁:출력 읽기 쉬운 설정 텍스트 상자(또는 풍부한 텍스트 상자)를 사용하 monospace font. PowerShell 스튜디오 마우스 오른쪽 단추로 클릭하고,텍스트 상자를 클릭 적용 시설,그리고 적용을 클릭합 콘솔 글꼴입니다.나는 이것을 할 수 없다. ToString()메소드가 유용한 결과를 생성하는 몇 가지 객체가 있습니다. DateTime 객체는 고전적인 예입니다. DateTime 객체의 toString()메소드는”짧은 날짜/긴 시간”형식 문자열을 반환합니다. 아웃 문자열은”긴 날짜/긴 시간”형식을 반환합니다.,
PS C:> (Get-Date).ToString()12/6/2014 10:42:24 AMPS C:> Get-Date | Out-StringSaturday, December 6, 2014 10:42:37 AM
#사용 toString()$buttonGetDate_Click={$textboxDate.텍스트=Get-Date}
#사용 toString()$buttonGetDate_Click={$textboxDate.Text=Get-Date|Out 문자열}
사용할 수 있습니다 또한 형식과 UFormat 의 매개 변수를 얻-날짜 cmdlet 을 얻 날짜 형식 문자열에는 거의 모든 구성이 있습니다., 예를 들어 RFC1123 형식으로 날짜를 얻으려면-Format R(또는”r”)을 사용하십시오. 이러한 매개 변수는 cmdlet 이 문자열을 반환하도록 강제하기 때문에 Format 또는 UFormat 을 사용할 때 Out-String 으로 파이프 할 필요가 없습니다.
PS C:> Get-Date -Format RTue, 09 Dec 2014 10:46:41 GMT
변환 포맷 개체
에서는 콘솔,형식 cmdlet 와 같은 형식으로 테이블,일반적으로 마지막 요소의 파이프라인에서. Windows PowerShell 은 콘솔에 보내기 전에 아웃 문자열 명령을 파이프 라인에 추가하기 때문에 출력은 콘솔에서 멋지게 보입니다.,
그러나 GUI 응용 프로그램에서는 기본적으로 형식 cmdlet 이 반환하는 형식 객체의 toString()메서드를 호출 한 결과를 얻습니다.
$buttonGetHotfix_Click={$textboxHotFix.Text=Get-핫픽스|형식으로 표성 HotFixID,에 설치되어 있-자동 크기 조정이}
을 얻을 더 사용할 수 있는 전시에서 당신의 GUI 응용 프로그램,파이프 형식으로 객체를 문자열 cmdlet 를 할당하기 전에는 텍스트 객실의 TextBox.,나는 이것이 더 좋은 방법이라고 생각한다.
잠시 후,태스크를 관리하는 출력 디스플레이에 GUI 응용 프로그램으로 자연적으로 입력하 cmdlet 이름,하지만 당신이 학습을 테스트해야 합고 있는지 확인하는 귀하의 모든 출력을 캡처하고 표시에 사용할 수 있는 형식입니다.
June Blender 는 Sapien Technologies,Inc.의 기술 전도사입니다. 당신은 그녀에 도달 할 수 있습니다 [email protected] 또는@juneb_get_help 에서 Twitter 에서 그녀를 팔로우하십시오.피>