about_Methods

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

항목

about_methods

간단한 설명

Windows PowerShell에서 메서드를 사용하여 개체에 대해 작업을 수행하는 방법을 설명합니다.

자세한 설명

Windows PowerShell은 개체를 사용하여 데이터 저장소의 항목 또는 컴퓨터의 상태를 나타냅니다. 예를 들어 FileInfo 개체는 파일 시스템 드라이브의 파일을 나타내고 ProcessInfo 개체는 컴퓨터의 프로세스를 나타냅니다.

개체는 개체에 대한 데이터를 저장하는 속성과 개체를 변경할 수 있도록 하는 메서드를 갖습니다.

"메서드"는 개체에서 수행할 수는 동작을 지정하는 명령 집합입니다. 예를 들어 FileInfo 개체에는 FileInfo 개체가 나타내는 파일을 복사하는 CopyTo 메서드가 포함되어 있습니다.

개체의 메서드를 가져오려면 Get-Member cmdlet을 사용합니다. "Method"의 값으로 해당 MemberType 속성을 사용합니다. 다음 명령은 프로세스 개체의 메서드를 가져옵니다.

        PS C:\>Get-Process | Get-Member -MemberType Method
       
           TypeName: System.Diagnostics.Process

         Name                      MemberType Definition
         ----                      ---------- ----------
         BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
         BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
         ...
         Kill                      Method     System.Void Kill()
         Refresh                   Method     System.Void Refresh()
         Start                     Method     bool Start()
         ToString                  Method     string ToString()
         WaitForExit               Method     bool WaitForExit(int milliseconds), System.Void WaitForExit()
         WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds), bool WaitForInputIdle()

개체의 메서드를 수행하거나 "호출"하려면 점(.), 메서드 이름 및 괄호 집합 "()"을 입력합니다. 메서드에 인수가 있는 경우 인수 값을 괄호로 묶습니다. 괄호는 모든 메서드 호출에 필요하며, 인수가 없는 경우에도 필요합니다.

예를 들어 다음 명령은 프로세스의 Kill 메서드를 호출하여 컴퓨터에서 메모장 프로세스를 종료합니다. 결과적으로 메모장의 인스턴스가 닫힙니다. Kill 메서드가 호출되기 전에 Get-Process 명령이 실행되도록 하려면 해당 명령을 괄호로 묶습니다.

        (Get-Process Notepad).Kill()

문자열의 Split 메서드도 매우 유용한 프로세스입니다. Split 메서드는 문자열을 분할할 위치를 메서드에 알려주는 구분 기호 문자 인수를 사용합니다.

        PS C:\>$a = "Try-Catch-Finally"
        PS C:\>$a.Split("-")
        Try
        Catch
        Finally

이전 예제와 같이 명령이나 변수의 개체를 사용하여 가져온 개체에서 메서드를 호출할 수 있습니다.

Windows PowerShell 4.0부터 동적 메서드 이름을 사용한 메서드 호출이 지원됩니다.

메서드에 대한 학습

개체의 메서드에 대한 정의를 찾으려면 MSDN에서 개체 형식에 대한 도움말 항목으로 이동하여 해당 메서드 페이지를 검색합니다. 예를 들어 다음 페이지에서는 프로세스 개체(System.Diagnostics.Process)의 메서드에 대해 설명합니다.

         https://msdn.microsoft.com/library/system.diagnostics.process_methods

메서드의 인수를 확인하려면 Windows PowerShell cmdlet의 구문 다이어그램과 유사한 메서드 정의를 검토합니다.

메서드 정의에는 Windows PowerShell cmdlet의 매개 변수 집합과 유사한 하나 이상의 메서드 서명이 있을 수 있습니다. 이 서명은 메서드를 호출하는 데 유효한 명령의 형식을 모두 보여 줍니다.

예를 들어 FileInfo 클래스의 CopyTo 메서드에는 다음과 같은 두 가지 메서드 서명이 포함되어 있습니다.

        1. CopyTo(String destFileName)
        2. CopyTo(String destFileName, Boolean overwrite)

첫 번째 메서드 서명은 대상 파일 이름(및 경로)을 사용합니다. 다음 예제에서는 첫 번째 CopyTo 메서드를 사용하여 Final.txt 파일을 C:\Bin 디렉터리에 복사합니다.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

두 번째 메서드 서명은 대상 파일 이름과 대상 파일이 이미 있는 경우 덮어써야 할지 여부를 결정하는 부울 값을 사용합니다.

다음 예제에서는 두 번째 CopyTo 메서드를 사용하여 Final.txt 파일을 C:\Bin 디렉터리에 복사하고 기존 파일을 덮어씁니다.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

스칼라 개체 및 컬렉션의 메서드

특정 형식의 단일("스칼라") 개체의 메서드는 동일한 형식의 개체 컬렉션의 메서드와 다른 경우가 자주 있습니다.

예를 들어 모든 프로세스에는 Kill 메서드가 있지만 프로세스 컬렉션에는 Kill 메서드가 없습니다.

Windows PowerShell 3.0부터 Windows PowerShell은 스칼라 개체와 컬렉션의 다른 메서드로 인해 발생하는 스크립팅 오류를 방지하려고 합니다.

Windows PowerShell 4.0부터는 메서드 구문을 사용한 컬렉션 필터링이 지원됩니다.

컬렉션을 제출하지만 단일("스칼라") 개체에만 있는 메서드를 요청하면 Windows는 컬렉션의 모든 개체에서 해당 메서드를 호출합니다.

메서드가 개별 개체와 컬렉션에 있는 경우 Windows PowerShell에서 결과를 변경하지 않습니다.

이 기능은 스칼라 개체 및 컬렉션의 속성에도 적용됩니다. 자세한 내용은 about_Properties를 참조하세요.

예제

다음 예제에서는 개별 프로세스 개체의 Kill 메서드를 프로세스 개체 컬렉션에서 실행합니다. 이 예제는 Windows PowerShell 3.0 이상 버전의 Windows PowerShell에서만 작동합니다.

첫 번째 명령은 메모장 프로세스의 세 인스턴스를 시작합니다. 두 번째 명령은 Get-Process 명령을 사용하여 메모장 프로세스의 세 인스턴스를 모두 가져오고 $p 변수에 저장합니다.

        PS C:\>Notepad; Notepad; Notepad
        PS C:\>$p = Get-Process Notepad
        

세 번째 명령은 모든 컬렉션의 Count 속성을 사용하여 $p 변수에 세 프로세스가 있는지 확인합니다.

        PS C:\>$p.Count
        3

네 번째 명령은 $p 변수의 세 프로세스 모두에서 Kill 메서드를 실행합니다.

이 명령은 프로세스 컬렉션에 Kill 메서드가 없는 경우에도 작동합니다.

        PS C:\>$p.Kill()

다섯 번째 명령은 Get-Process 명령을 사용하여 Kill 명령이 작동했는지 확인합니다.

        PS C:\>Get-Process Notepad
        Get-Process : Cannot find a process with the name "notepad". Verify the process name and call the cmdlet again.
        At line:1 char:12
        + get-process <<<<  notepad
            + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process], ProcessCommandException
            + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Windows PowerShell 2.0에서 동일한 작업을 수행하려면 Foreach-Object cmdlet을 사용하여 컬렉션의 각 개체에서 메서드를 실행합니다.

        PS C:\>$p | Foreach-Object {$_.Kill()}

참고 항목

about_Objects

about_Properties

Get-Member