안녕하세요, Scripting Guy! A Self-Documenting 스크립트 만들기

The Microsoft Scripting Guys

파란색 부에노스아이레스 여기에 아래로 하늘 걸쳐 널리 brushed incredible 수준을 설명하기 위해 특수한 색 이름은 사용해야 합니다. cobalt 파랑, deep-sea 파랑, 자정 파랑, holy mackerel 파랑, 즉 이전 도시 다루는 canopy 표시되는 실제 색을 portray 이러한 경우에도 하나도 시작합니다. centuries 이전 건물이 나열된 다양한 인도 거의 테이블이 있는 점선 있습니다. 필자는 빈 (의자 사용됩니다. perfumed breeze cinnamon, cardamom, thyme 힌트를 운반 의해 천천히 drifts. outstretched wings seagulls 충분한 기술, 유예 및 poise himself Big Kahuna envy engender updrafts 탐색할. café con leche 것 특히 apropos 있으며 sights 및 downtown 부에노스아이레스 소리를 경쟁에 대해 고유한 주의를 요청하는 강력한. 내가 네트워크를 관리하는 데 VBScript 사용에 대한 Microsoft Premier Customers 대화를 나누려는 마을을입니다. 필자는 내 카메라 모음에서 접는 맵을 추출하고 Nueve de Julio Avenue, Obelisk Calle Florida에서 내 경로 계획 진행합니다.

지도 상에서 내 위치 찾을. Galerias Pacifico 쇼핑 갤러리 근처에 내가.입니다. 필자는 설정할 맵을 통해 여러 번 시간 및 공간 내 위치를 가진 방향 시도할 때. 이 시간에 대한 용지 높이, 고유 찾고 man three-piece 진한 짝패 in 에서 나타나고 해당 sunlight 바로 밖으로 나타내며. 맵에 playfully dancing 자신의 섀도 최대 glance 알림 발생합니다. 그는 사용한다고, " Buenos dias, se˜nor. " 같이 I 대기 모드

" Buenos dias, " I dutifully 회신.

" ah를, 중인 경우 American 아마도? " 약간 영국 악센트 있는 그는 회신합니다.

필자는 있을 다소 aback, 인식되어, affirmative hesitantly 회신.

" Is 이 프로그램을 처음 축제 우리 도시의? " 그는 inquires 있는 작업은.

다시 한번 I reticent 있을 있지만 말할 " yes ".

" 다음 필자는 제공할 수 있습니다 내 humble 서비스를 있습니다. 사용할 검색할 수 있는 " 그는 politely 요청합니다.

그를, 확인하는 및 알림 지침을 제공하기 위해 그는 진행됩니다. 이후 Microsoft는 몇 분 동안 채팅.

" wow! " 직접 수 생각합니다. " self-documenting 도시! 여기에 맵 필요가 없습니다. 사용자가 are 알기 쉬운 데 도움이 되는 없습니다 파일이 다른 먼저 맵을 살펴 시간이 거의 합니다. "

실제로 몇 년 전 않았습니다. 오늘날 북미 노스캐롤라이나 내 집 시 외부에서 날씨 경우 이를 줍니다 알림 부에노스아이레스 내 방문 중 있으므로 lovely? 및 사용할 방식을 멋진 self-documenting 기능을 수 있습니다. 우리는 계획하는 데 시간이 걸릴 앞으로 우리는 경우, 비슷한 서비스를 수행하는 우리의 스크립트는 있습니다. 이 문서에서는 Microsoft는 특정 패턴을 따르는 다른 스크립트에서 주석을 수집합니다 스크립트를 개발하는 방법이 표시됩니다. Microsoft는 우리 요구에 맞게 패턴을 수정할 수 있으며 외에 스크립트에 대한 설명서를 만드는 방법은 확장할 수 있습니다.

신중하게 이가 배치되는 일부 설명서의 스크립트를 살펴보겠습니다. Hey, Scripting Guy에 대해 작성된! 있는 그림 1 GetSetIEStartPage.ps1 스크립트에 " 문서 내 Internet Explorer 홈 페이지 변경 방법 I 있습니까?", 다음 변수 명명된 $ 설명 할당되는 여기에 문자열을 주석이 배치됩니다. 시작 태그에 의해 여기에 문자열을 지정하려면 있는 기호 및 따옴표 (@ ") 및 인용 부호의 닫는 태그 및 at 기호 (" @). 세 가지 주석 블록을 가져오는 등록합니다 경우 첫 번째 일반 스크립트 헤더 정보가 들어: 제목, 작성자, 날짜, 키워드 및 자체를 스크립트 댓글. 두 번째 및 세 번째 주석 블록은 스크립트가 포함된 두 가지 주요 기능이 특히 관련이 있습니다.

그림 1 GetSetIEStartPage.ps1

Param([switch]$get,[switch]$set,$computer="localhost")
$Comment = @"
NAME: GetSetIEStartPage.ps1
AUTHOR: ed wilson, Microsoft
DATE: 1/5/2009

KEYWORDS: stdregprov, ie, [wmiclass] type accelerator,
Hey Scripting Guy
COMMENTS: This script uses the wmiclass type accelerator
and the stdregprov to get the ie start pages and to set the
ie start pages. Using ie 7 or better you can have multiple
start pages

"@ #end comment

Function Get-ieStartPage()
{
$Comment = @"
FUNCTION: Get-ieStartPage 
Is used to retrieve the current settings for Internet Explorer 7 and greater.
The value of $hkcu is set to a constant value from the SDK that points
to the Hkey_Current_User. Two methods are used to read
from the registry because the start page is single valued and
the second start pages key is multi-valued.

"@ #end comment
 $hkcu = 2147483649
 $key = "Software\Microsoft\Internet Explorer\Main"
 $property = "Start Page"
 $property2 = "Secondary Start Pages"
 $wmi = [wmiclass]"\\$computer\root\default:stdRegProv"
 ($wmi.GetStringValue($hkcu,$key,$property)).sValue
 ($wmi.GetMultiStringValue($hkcu,$key, $property2)).sValue
} #end Get-ieStartPage

Function Set-ieStartPage()
{
$Comment = @"
FUNCTION: Set-ieStartPage 
Allows you to configure one or more home pages for IE 7 and greater. 
The $aryValues and the $Value variables hold the various home pages.
Specify the complete URL ex: "http://www.ScriptingGuys.Com" make sure
to include the quotation marks around each URL. 

"@ #end comment
  $hkcu = 2147483649
  $key = "Software\Microsoft\Internet Explorer\Main"
  $property = "Start Page"
  $property2 = "Secondary Start Pages"
  $value = "https://www.microsoft.com/technet/scriptcenter/default.mspx"
  $aryValues = "https://social.technet.microsoft.com/Forums/en/ITCG/threads/",
  "https://www.microsoft.com/technet/scriptcenter/resources/qanda/all.mspx"
  $wmi = [wmiclass]"\\$computer\root\default:stdRegProv"
  $rtn = $wmi.SetStringValue($hkcu,$key,$property,$value)
  $rtn2 = $wmi.SetMultiStringValue($hkcu,$key,$property2,$aryValues)
  "Setting $property returned $($rtn.returnvalue)"
  "Setting $property2 returned $($rtn2.returnvalue)"
} #end Set-ieStartPage

# *** entry point to script 
if($get) {Get-ieStartpage}
if($set){Set-ieStartPage}

소스 파일에서 다른 문서에 메모를 쓸 우리는 필요한 원래 스크립트를 열려면 메모를, 검색하고 적절한 텍스트를 새 파일에 쓰는. 충분한 간단한 소리. 아, yeah, 또한 합니다 우리 새 스크립트 이름을. 이제 호출할 GetCommentsFromScript.ps1.

그림 2 GetCommentsFromScript.ps1 스크립트를 실행할 때 스크립트 정보를 제공할 수 있도록 데 사용되는 매개 변수 문을 시작합니다. 매개 변수 문이 다음과 같습니다.

그림 2 GetCommentsFromScript.ps1

Param($Script= $(throw "The path to a script is required."))
Function Get-FileName($Script)
{
 $OutPutPath = [io.path]::GetTempPath()
 Join-Path -path $OutPutPath -child "$(Split-Path $script-leaf).txt"
} #end Get-FileName

Function Remove-OutPutFile($OutPutFile)
{
  if(Test-Path -path $OutPutFile) { Remove-    Item $OutPutFile | Out-Null }
} #end Remove-OutPutFile

Function Get-Comments($Script,$OutPutFile)
{
 Get-Content -path $Script |
 Foreach-Object `
  { 
    If($_ -match '^\$comment\s?=\s?@"')
     { 
      $beginComment = $True 
     } #end if match @"
   If($_ -match '"@')
     { 
      $beginComment = $False
     } #end if match "@
   If($beginComment -AND $_ -notmatch '@"') 
     {
      $_ | Out-File -FilePath $OutPutFile -append
     } # end if beginComment
  } #end Foreach
} #end Get-Comments

Function Get-OutPutFile($OutPutFile)
{
 Notepad $OutPutFile
} #end Get-OutPutFile

# *** Entry point to script ***
$OutPutFile = Get-FileName($script)
Remove-OutPutFile($OutPutFile)
Get-Comments -script $script -outputfile $OutPutFile
Get-OutPutFile($OutPutFile)vw

Param($Script= $(throw "The path to a script   is required."))

명령줄 매개 변수를 장점은 우리는 않음 한다는 것입니다 스크립트를 열고 편집할 수 우리는 복사하는 것입니다 메모를 스크립트 경로를 제공합니다. 이 매개 변수는 필수 기본 값을 $ 스크립트 변수에 할당하는 방법으로 만드는 우리는 있습니다. 기본값은 오류를 발생시키기 위해 throw 명령을 사용하고 있는 스크립트를 항상 발생시킵니다 실행할 때 오류가 –script 매개 변수에 대한 값을 제공하지 Microsoft는 않으면 즉.

이제 잠시 digress 있으며 throw 문을 그림 3 에서 DemoThrow.ps1 스크립트에 사용되는 방법을 살펴보겠습니다 Set-오류 함수에서 throw 문이 발생된 오류를 지난 얻으려면 먼저 SilentlyContinue $ errorActionPreference 변수를 설정해야 합니다. 이렇게 오류가 표시되지 않도록지 않습니다 수 있고 계속 스크립트를 수 있습니다. 해당 같습니다 VBScript On Error Resume Next 설정을. 있는 경우 문을 $ 값을 변수를 평가하는 데 사용됩니다. 일치하는 항목이 있으면 throw하는 문이 없으며 예외가 throw됩니다. 오류 계산할 Get-ErrorDetails 함수를 사용합니다. 이루어지기 첫 번째 작업은 것입니다 있어야 않은 1씩 throw 문에 의해 발생한 오류로 인해 오류 수 표시하는 것입니다. Microsoft는 다음 (인덱스 값은 0이며 컬렉션의 오류로 것입니다 항상 최신 (첫 번째 오류 시간이 보내고 오류 개체를 Format-List cmdlet에. Microsoft는 모든 속성을 선택합니다. 하지만 호출 정보를 개체로, 반환되고 따라서 해당 개체를 직접 쿼리 합니다. 이렇게 Microsoft는 오류 개체의 InvocationInfo 속성을 통해 호출 개체에 액세스하는. 그림 4 결과 오류 정보가 나와 있습니다.

그림 3 DemoThrow.ps1

Function Set-Error
{
 $errorActionPreference = "SilentlyContinue"
 "Before the throw statement: $($error.count) errors"
 $value = "bad"
 If ($value -eq "bad") 
   { throw "The value is bad" }
} #end Set-Error

Function Get-ErrorDetails
{
 "After the throw statement: $($error.count) errors"
 "Error details:"
 $error[0] | Format-List -Property * 
 "Invocation information:"
 $error[0].InvocationInfo
} #end Get-ErrorDetails

# *** Entry Point to Script
Set-Error

Get-ErrorDetails

fig04.gif

그림 4 The Throw 문은 오류를 발생시킬 사용됩니다

이제 보겠습니다 돌아가는 우리 기본 스크립트 GetCommentsFromScript.ps1. 모든 메모를 스크립트에서 gleaned 포함된 새 텍스트 문서의 파일 이름을 만듭니다 함수를 합니다. 이, 우리는 함수 키워드를 사용하여 을 함수의 이름으로 따릅니다. Windows PowerShell 동사-명사 명명 규칙 사용하여 keeping 우리 함수를 Get-FileName 호출한 우리는 됩니다. Get-FileName 단일 입력 매개 함수 내에서 $ 스크립트 변수가 보유되어야 하는 스크립트 분석할 수 경로를 걸립니다. Get-FileName 함수의 다음과 같습니다.

Function Get-FileName($Script)
{

다음 우리는 로컬 컴퓨터에 있는 임시 폴더로의 경로를 가져옵니다. 포함 환경 Windows PowerShell 드라이브를 사용하여 이 작업을 수행하려면 여러 가지가 있습니다. 그러나 Io.Path .NET Framework 클래스에서 정적 GetTempPath 메서드를 결정했습니다. GetTempPath 메서드는 새로 만든 텍스트 파일을 우리는 저장할 수 있는 임시 폴더로 경로를 반환합니다. 우리는 임시 폴더 경로를 다음과 같이 $ OutPutPath 변수에 저장할:

$OutPutPath = [io.path]::GetTempPath()

스크립트 이름 뒤에 우리 새 텍스트 파일의 이름을 결정합니다. 이렇게 하려면 스크립트가 저장된 경로에서 스크립트 이름을 구분하는 합니다. Microsoft는 이 surgery 수행하려면 분할-Path cmdlet을 사용합니다. –leaf 매개 변수를 스크립트 이름을 반환하려면 cmdlet의 알려 줍니다. 스크립트를 포함하고 있는 디렉터리 경로를 원했습니다 우리는 했습니다 –parent 매개 변수를 사용할 경우 있어야 우리는. 괄호 쌍 안에 분할 경로 명령을 때문에 Microsoft는 먼저 발생하는 작업을 코드를 실행하려면 파악하고 스크립트 이름을 반환할 경우 부분식마다 만들려면 괄호 앞에 달러 기호 우리는 다음 배치합니다. 우리는 수 use.ps1 확장명으로 텍스트 파일에 대한 있지만 있는 수 혼동될 스크립트에 대한 확장명이 있기 때문에. 우리는 따라서 단순히.txt 확장명이 반환된 파일 이름을 추가하고 한 쌍의 따옴표 있는 전체 작업은 배치합니다. 이제 우리는 우리 출력 파일에 새 경로를 만들려면 참가-Path cmdlet을 사용합니다. 새 경로는 분할 경로를 사용하여 만든 파일 $ OutPutPath 변수에 저장된 임시 폴더에 구성됩니다. 우리는 수 있는 문자열 조작 및 연결 만드는 데 새 파일 경로를 있지만 것이 훨씬 더 안정적인 조인 경로 및 분할 경로를 사용하여 이러한 종류의 작업 수행할. 코드를 모양을 다음과 같습니다.

Join-Path -path $OutPutPath -child "$(Split-Path $script-leaf).txt"
} #end Get-FileName

이제 중복 파일을 처리하도록 우리는 것입니다 방법을 결정해야 합니다. 우리는 못했습니다 사용자에게 중복된 파일이 saying 사용하여 이와 같은 코드를 사용하여:

$Response = Read-Host -Prompt "$OutPutFile already exists. Do you wish to delete it <y / n>?"
if($Response -eq "y")
    { Remove-Item $OutPutFile | Out-Null }
ELSE { "Exiting now." ; exit }

Microsoft는 몇 가지 종류의.old 확장명으로 이름을 바꾸면 기존 파일의 백업을 사용하면 명명 알고리즘 구현할 수 있습니다. 우리는 이 않은, 다음 코드는 다음과 같이 같아야 됩니다.

if(Test-Path -path "$OutPutFile.old") { Remove-Item-Path "$OutPutFile.old" }
Rename-Item -path $OutPutFile -newname "$(Split-Path $OutPutFile -leaf).old"

또는 단순히 수행할 선택한 I 어떤 있는 기존 파일을 삭제할 수 우리는. 수행해야 할 작업을 Function 키워드를 사용하고 함수의 이름을 지정하여 만드는 Remove-outputfile 함수에서 수행됩니다. 우리는 $ outputfile 사용하여 다음과 같이 함수 입력을 제공하는:

Function Remove-OutPutFile($OutPutFile)
{

파일이 있는지, 우리는 Test-Path cmdlet의 사용하고 $ outputfile 변수에 경로 매개 변수에 포함된 문자열을 제공합니다. Test-Path cmdlet의 경우 True 또는 파일의 찾을 여부에 따라 False를 반환합니다. 즉, If 사용할 우리는 있습니다 문을 파일이 있는지 여부를 평가합니다. 파일이 없으면 스크립트 블록에 작업을 수행할 것입니다. 파일이 없으면 스크립트 블록이 실행되지 않습니다. 첫 번째 명령은 해당 파일을 찾지 못하면 및 False이면 반환되는 여기서 볼 수 수 있습니다. 두 번째 명령은 파일을 찾을 수 없는 스크립트 블록이 실행되지 않습니다.

PS C:\> Test-Path c:\missingfile.txt
False
PS C:\> if(Test-Path c:\missingfile.txt){"found file"}
PS C:\>

Remove-outputfile 함수 내에서 해당 If 문을 $ outputfile에 의해 참조되는 파일이 있는 경우 확인하는 데 사용됩니다. 경우 Remove-Item cmdlet를 사용하여 삭제됩니다. 파일을 삭제할 때 일반적으로 반환된 정보를 위해 pipelined 다음 cmdlet을 자동 작업을 제공하는 Out-Null. 코드는 다음과 같습니다.

if(Test-Path -path $OutPutFile) { Remove-Item $OutPutFile | Out-Null }
} #end Remove-OutPutFile

출력 파일의 이름을 만들고 삭제된 주위에 횟수인 수 있습니다. 이전 출력 파일을 우리는 있어야, 후에는 스크립트를 에서 설명을 검색하는 데 시간이 것이. 이렇게 하려면 우리는 Get-메모 함수를 만들어 전달해야 $ 스크립트 변수와 $ outputfile 변수를 모두 그림과 같이:

Function Get-Comments($Script,$OutPutFile)
{

이제 우리는 Get-Content cmdlet를 사용하여 스크립트 경로를 전달합니다 우리는 있는 스크립트의 텍스트를 읽습니다. Get-Content 사용하여 파일을 읽는 것입니다 파일을 한 줄로 한 번에 읽고 각 줄에 파이프라인 함께 전달됩니다. 변수에 결과를 저장할 것처럼, 배열이 있는 우리가 것입니다. 우리는 변수 $ 처리할 수 있습니다 있는 같은 다른 배열, Length 속성을 통해 배열 요소의 개수를 가져오는 및 그림과 같이 배열로 직접 인덱싱:

PS C:\fso> $a = Get-Content -Path C:\fso\  GetSetieStartPage.ps1
PS C:\fso> $a.Length
62
PS C:\fso> $a[32]
($wmi.GetMultiStringValue($hkcu,$key,   $property2)).sValue

입력 스크립트를 읽고 파이프라인 함께 보낼 줄을 다음과 같습니다.

Get-Content -path $Script |

그런 다음 각 줄에 주석 블록을 속해 있으면 확인하려면 내부를 합니다. 파이프라인 내에서 각 줄을 검사할 에서 한 번에 하나씩 컬렉션 내에서 개별 개체 작업을 우리를 수 있는 ForEach…Next 문과 유사한 ForEach-Object cmdlet를 사용하여 것입니다. 다시 눈금 문자 (') 다음 줄에서 명령을 계속하려면 데 사용됩니다. 파이프라인을 통해 가져온 대로 각 개체에 대해 수행해야 할 작업은 중괄호 (중괄호) 집합으로 지정하려면 스크립트 블록 안에 포함됩니다. 이 부분은 Get-Content 함수 여기에 표시되는:

ForEach-Object `
  { 

우리는 ForEach-Object cmdlet 프로세스 블록 안에 경우 텍스트의 줄을 검사합니다 할. 이렇게, 하려면 If 사용하면 우리가 문을. $ _ 자동 변수는 파이프라인에 있는 현재 줄을 나타내는 데 사용됩니다. –match 연산자를 사용하여 텍스트 줄에 대해 정규식 패턴 일치 수행할 것입니다. –match 연산자는 –match 연산자의 오른쪽에 The 패턴이 시작하는 패턴 응답으로 부울 True 또는 False를 반환합니다. 이 단원에서는 스크립트 다음과 같습니다.

PS C:\fso> '$Comment = @"' -match '^\$comment\s?=\s?@"'
True

사용 중인 정규식 패턴은 특수 문자 수가 구성됩니다.

^ 시작 부분에서 —Match

\ $ 부호를 리터럴 문자 및 정규식을 사용할 특수 문자 않는 처리됩니다 있으므로 문자 —Escape

$ 주석 —Literal 문자

\s? —Zero 이상의 공백 문자

= —Literal 문자

\s? —Zero 이상의 공백 문자

@ ", 즉 리터럴 문자

현재 파이프라인에 있는 텍스트 줄의 검사하는 코드 섹션이 다음과 같습니다.

If($_ -match '^\$comment\s?=\s?@"')

주석 블록의 시작 부분에 표시하는 데 사용됩니다 변수 명명된 $ beginComment을 만듭니다. Microsoft는 이를 –match 문을 지난 있게, 주석 블록의 시작 부분에 찾았습니다. 우리는 변수를 $ True로 설정할 여기서 볼 수 있는 것처럼:

{ 
  $beginComment = $True
} #end if match @"

다음 우리는 확인할 주석 블록 끝에 지금은 경우. 이렇게 우리는 다시 –match 연산자를 사용합니다. 우리는 찾습니다 이 시간, " 문자 시퀀스를 @ 데 사용되는 여기에 문자열을 닫습니다. 이를 찾을 False로 $ beginComment 변수를 설정하십시오 것입니다.

If($_ -match '"@')
     { 
      $beginComment = $False
     } #end if match "@

우리는 내용이 해당 처음 두 지난 경우 문: 첫 번째 여기에 문자열 부분에 식별하고 두 번째 여기에 문자열 끝에 찾습니다. 이제 우리 주석 파일에 쓸 수 텍스트를 선택하여 할 것입니다. 이렇게 하려면 $ beginComment 변수를 True로 설정해야 사용할. Microsoft는 또한 할 수 있는지 우리는 나타나지 않습니다 해당 인용 부호 있는 (@ " (여기에서 문자열 끝에 의미합니다 때문에 줄에 있는 문자. 이 결정 우리는 사용하여 복합 If 문:

If($beginComment -AND $_ -notmatch '@"') 
     {

이제 우리는 출력 파일에 사용하여 텍스트를 작성합니다. $ _ 자동 변수 현재 줄의 텍스트 나타내는 사용하여 우리는 이렇게, 우리는 파이프라인 수 있는 cmdlet을 Out-File. 다음 Out-File cmdlet를 주석 파일으로의 경로를 포함하는 $ outputfile 변수를 받습니다. 우리는 –append 매개 변수를 사용하여 주석 파일에 스크립트에서 모든 메모를 모으려면 지정할 것입니다. 때문에 텍스트 파일에 마지막 메모에 포함되어 경우 추가 매개 변수를 사용하지 않은 우리는, 기본적으로 해당 Out-File cmdlet에 해당 내용을 덮어씁니다. 다음 우리는 모든 다음 중괄호 out 닫습니다. 고려해야 할 것이 초기화에는 대괄호 용도를 나타내는 각 닫는 초기화에는 괄호 뒤에 메모를 추가하려면 좋습니다. 이렇게 하면 스크립트 훨씬 읽기, 뿐만 아니라 쉽게 문제 해결 및 유지:

$_ | Out-File -FilePath $OutPutFile -append
     } # end if beginComment
  } #end ForEach
} #end Get-Comments

이제 Get-outputfile 출력 파일에서 읽기 위해 열리는 라는 함수를 만듭니다. 임시 폴더가 있지 쉽게 찾을 수 있으므로 $ outputfile 변수 있는 파일의 경로를 했습니다 스크립트를 사용하여 출력 파일을 열 수를 만듭니다. Get-outputfile 함수를 사용하여 단일 입력 변수 호출된 $ outputfile, 열 것인지 주석 파일으로의 경로를 포함하는 받습니다. 우리는 Get-outputfile 함수를 호출하면 $ outputfile를 전달할 우리는 됩니다. Get-outputfile 함수 및 값을 경우 의해 참조될 수 $ outputfile 변수는 함수 내에서 Microsoft는 판독기를 값을 전달해야 못했습니다. 문자열의 문자열 따옴표로 없이 직접 함수에 전달할 경우에도 수 것입니다.

Function Get-OutPutFile($OutPutFile)
{
 Notepad $OutPutFile
} #end Get-OutPutFile

Get-OutPutFile -outputfile C:\fso\GetSetieStartPage.ps1

일반적으로 함수에 전달할 항목을 위로 수집할 수 경우 스크립트를 작성할 때 것이 좋은 모두 내부 및 외부의 함수가 사용될 같은 변수 이름 데이터 encase 위해. 우리 최선의 스크립트 개발 중 이 뒤에: " Don't mess 스크립트의 작업자 섹션과. " 이 예제에서 우리가 함수를 호출할 때 우리는 " 수행하는 작업을. " 앞으로 스크립트를 변경하려면 필요했습니다 문자열 리터럴 값을 편집할 것입니다. 문자열 변수에 배치하여 변수의 값을 쉽게 편집할 수 것입니다. 우리는, 실제로 설정할 명령줄을 통해 또는 의해 통해 다른 함수를 수행할 작업을 변수의 값을 제공합니다. 가능하면 문자열 리터럴 값을 스크립트를 직접 배치할 않도록 해야 합니다. 따르는 코드를 Get-outputfile 함수에 전달되는 파일 경로를 포함하도록 변수를 사용합니다.

Function Get-OutPutFile($OutPutFile)
{
 Notepad $OutPutFile
} #end Get-OutPutFile

$OutPutFile = "C:\fso\GetSetieStartPage.ps1"
Get-OutPutFile -outputfile $OutPutFile

전체 Get-outputfile 함수는 다음과 같습니다.

Function Get-OutPutFile($OutPutFile)
{
 Notepad $OutPutFile
} #end Get-OutPutFile

문자열 리터럴에 출력 파일에 경로를 입력하는 대신 $ outputfile 변수를 Get-FileName 함수에 의해 만들어진 경로를 받는. Get-FileName 함수가 추출할 주석을 포함하는 스크립트 경로를 받습니다. 이 스크립트에 대한 경로가 있는 명령줄 매개 변수를 통해 제공됩니다. 함수가 단일 입력 매개 변수를 있으면 전달할 수 해당 함수를 괄호 집합을 사용하여. 경우, 반면, 함수가 두 개 이상의 입력 매개 변수, –parameter 이름 구문을 사용해야 합니다.

$OutPutFile = Get-FileName($script)

다음 우리는 앞에서 설명한 Remove-outputfile 함수를 호출하여 를 전달합니다 경로를 $ outputfile 변수에 포함된 outputfile:

Remove-OutPutFile($OutPutFile)

우리 출력 파일 이름을 수신하지 수도 우리는 때 우리는 $ 스크립트 변수를 경로가 지정된 스크립트에서 주석을 검색하려면 Get-메모 함수를 호출합니다. 메모는 $ outputfile 변수를 참조하는 출력 파일에 쓸 수지 것입니다. 이 줄의 코드 여기에 표시되는:

Get-Comments -script $script -outputfile $OutPutFile

메모가 있는 모든 않은 쓸 때 출력 파일, 우리는 마지막으로 Get-outputfile 함수를 호출하고 $ outputfile 변수에 포함된 경로를 전달합니다. 메모 파일을 열 수 않으려면 쉽게 스크립트에, 밖으로 줄의 주석 또는 단순히 사용자 스크립트 및 자체를 Get-outputfile 함수를 삭제할 수 있습니다. 저장하기 전에 각 파일을 검토하여 원하는 경우 적절한 코드 줄을 둡니다.

Get-OutPutFile($OutPutFile)

GetCommentsFromScript.ps1 스크립트가 실행될 때 확인 메시지가 화면에 표시됩니다. 스크립트를 작동하는 유일한 확인할 그림 5와 같이 메모장이 표시되는 새로 만든 텍스트 파일이 수 있습니다.

fig05.gif

그림 5 새 텍스트 파일을 메모장에서 표시된

GetCommentsFromScript.ps1 스크립트를 사용자 고유의 방식으로 스크립트를 작성하는 또는 텍스트 기반 로그 파일에서 다른 종류의 문서 수집하는 데 훨씬 쉽게 조정할 수 있습니다. 하려면 필요한 모든 시작 표시 데 사용되는 정규식 패턴을 수정할 수 있고 텍스트 부분 끝 수 수집하는 관심이. 스크립트를 즐길 수 새 Hey, Scripting Guy 게시 우리는 스크립트 센터 우리를 가입할 수 유용하게 활용하시기! 평일 문서입니다.

Ed Wilson , 잘 알려진 스크립팅 전문가가 Windows PowerShell 스크립팅 가이드 (Microsoft Press, 2008) 및 Microsoft Windows PowerShell Step by Step (Microsoft Press, 2007) 비롯한 8개의 책의 저자입니다. Ed는 MCSE (Microsoft Certified Systems Engineer) 및 Certified Information Systems Security Professional (CISSP (20개 이상의 업계 증명서 보유합니다. 자신의 여분의 시간, woodworking, underwater 사진 및 스쿠버 다이빙 enjoys 그는. 및 티입니다.

Craig Liebendorfer 은 wordsmith 및 longtime Microsoft 웹 편집기입니다. Craig 여전히 없는 믿고 매일 단어 작동하도록 그를 지급하는 작업 내용이 있습니다. 사용자의 즐겨찾기 작업 중 하나는 맞게 그는 합니다 있으므로 irreverent 묘사 것입니다 여기에 오른쪽. 그는 자신의 magnificent 부속 할 수명 가장 자신의 인터페이스는 간주합니다.