다음을 통해 공유


메서드 정보

간단한 설명

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

자세한 설명입니다.

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

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

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

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

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), ...
WaitForInputIdle          Method     bool WaitForInputIdle(int millisecon...

개체의 메서드를 수행하거나 "호출"하려면 점(.), 메서드 이름 및 괄호 집합 "()"을 입력합니다. 메서드에 인수가 있는 경우 인수 값을 괄호 안에 배치합니다. 인수가 없는 경우에도 모든 메서드 호출에 괄호가 필요합니다. 메서드가 여러 인수를 사용하는 경우 쉼표로 구분해야 합니다.

예를 들어 다음 명령은 프로세스의 Kill 메서드를 호출하여 컴퓨터에서 메모장 프로세스를 종료합니다.

$notepad = Get-Process notepad
$notepad.Kill()

이 예제는 위의 문을 결합하여 줄일 수 있습니다.

(Get-Process Notepad).Kill()

명령은 Get-Process Kill 메서드가 호출되기 전에 실행되도록 괄호로 묶습니다. Kill 그런 다음 반환된 개체에서 메서드가 Process 호출됩니다.

또 다른 매우 유용한 방법은 Replace 문자열의 메서드입니다. 메서드는 Replace 문자열 내의 텍스트를 대체합니다. 아래 예제에서는 문자열의 끝 따옴표 바로 다음에 점(.)을 배치할 수 있습니다.

'this is rocket science'.Replace('rocket', 'rock')
this is rock science

이전 예제와 같이 명령, 변수의 개체 또는 개체(예: 따옴표의 문자열)를 사용하여 가져오는 개체에서 메서드를 호출할 수 있습니다.

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

메서드에 대한 학습

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

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

메서드 정의에는 PowerShell cmdlet의 매개 변수 집합과 같은 하나 이상의 메서드 서명이 있을 수 있습니다. 서명은 메서드를 호출하는 모든 유효한 명령 형식을 표시합니다.

예를 들어 CopyTo 클래스의 FileInfo 메서드에는 다음 두 가지 메서드 서명이 포함됩니다.

    CopyTo(String destFileName)
    CopyTo(String destFileName, Boolean overwrite)

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

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

참고

PowerShell의 인수 모드와 달리 개체 메서드는 PowerShell 이 빌드된 .NET 프레임워크에 대한 통과인 식 모드에서 실행됩니다. 모드에서 bareword 인수(따옴표가 지정되지 않은 문자열)는 허용되지 않습니다. 차이 경로에서 이를 매개 변수로 볼 수 있고 경로는 인수로 볼 수 있습니다. 구문 분석 모드에 대한 자세한 내용은 about_Parsing

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

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

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

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

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

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

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

컬렉션을 제출하지만 단일("스칼라") 개체에만 존재하는 메서드를 요청하는 경우 PowerShell은 컬렉션의 모든 개체에서 메서드를 호출합니다.

메서드가 개별 개체 및 컬렉션에 있는 경우 컬렉션의 메서드만 호출됩니다.

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

예제

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

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

Notepad; Notepad; Notepad
$p = Get-Process Notepad

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

$p.Count
3

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

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

$p.Kill()

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

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

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

$p | ForEach-Object {$_.Kill()}

ForEach 및 Where 메서드

PowerShell 4.0부터 메서드 구문을 사용하여 컬렉션 필터링이 지원됩니다. 이렇게 하면 컬렉션 및 Where를 처리할 때 두 개의 새 메서드를 사용할 수 있습니다ForEach.

about_arrays의 이 메서드에 대해 자세히 알아볼 수 있습니다.

참고 항목

about_Objects

about_Properties

Get-Member