다음을 통해 공유


ForEach-Object

각 입력 개체 집합에 대해 작업을 수행합니다.

구문

ForEach-Object [-Process] <ScriptBlock[]> [-Begin <scriptblock>] [-End <scriptblock>] [-InputObject <psobject>] [<CommonParameters>]

설명

ForEach-Object cmdlet은 각 입력 개체 집합에 대해 작업을 수행합니다. 입력 개체는 cmdlet으로 파이프되거나 InputObject 매개 변수를 사용하여 지정할 수 있습니다.

수행할 작업은 Process 매개 변수의 값으로 cmdlet에 제공된 스크립트 블록에 설명되어 있습니다. 스크립트 블록은 모든 Windows PowerShell 스크립트를 포함할 수 있습니다.

스크립트 블록 내에서 현재 입력 개체는 $_ 변수로 표시됩니다.

각 입력 개체에 대해 수행할 작업을 설명하는 스크립트 블록 외에 두 개의 추가 스크립트 블록을 제공할 수 있습니다. 하나는 Begin 매개 변수의 값으로 지정되며 첫 번째 입력 개체가 처리되기 전에 실행됩니다. 다른 하나는 End 매개 변수의 값으로 지정되며 마지막 입력 개체가 처리된 후에 실행됩니다.

Begin 및 End를 사용하여 지정한 스크립트 블록을 포함하여 모든 스크립트 블록의 평가 결과는 파이프라인을 따라 전달됩니다.

매개 변수

-Begin <scriptblock>

입력 개체를 처리하기 전에 실행할 스크립트 블록을 지정합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-End <scriptblock>

모든 입력 개체를 처리한 후에 실행할 스크립트 블록을 지정합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-InputObject <psobject>

프로세스 매개 변수에 지정된 스크립트 블록이 작동할 대상 개체를 적용합니다. 개체가 포함된 변수를 입력하거나 개체를 가져오는 명령 또는 식을 입력하십시오.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

true (ByValue)

와일드카드 문자 적용 여부

false

-Process <ScriptBlock[]>

각 들어오는 개체에 적용되는 스크립트 블록을 지정합니다.

필수 여부

true

위치

1

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

<CommonParameters>

이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_commonparameters.

입력 및 출력

입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.

입력

System.Management.Automation.PSObject

임의의 개체를 ForEach-Object로 파이프할 수 있습니다.

출력

System.Management.Automation.PSObject

ForEach-Object가 반환하는 개체는 입력에 의해 결정됩니다.

예 1

C:\PS>30000,56798,12432 | foreach-object -process {$_/1024}

설명
-----------
이 명령은 정수 배열을 적용하고 각 배열을 1024로 나눈 다음 결과를 표시합니다.





예 2

C:\PS>get-childitem C:\ | foreach-object -process { $_.length / 1024 }

설명
-----------
이 명령은 C: 드라이브의 루트에서 파일 및 디렉터리를 검색하고 각 파일과 디렉터리의 크기를 반환 및 표시합니다. 0은 사용 가능한 파일 크기가 없는 디렉터리를 나타냅니다.





예 3

C:\PS>$events = get-eventlog -logname system -newest 1000

C:\PS> $events | foreach-object -begin {get-date} -process {out-file -filepath events.txt -append -inputobject $_.message} -end {get-date}

설명
-----------
이 명령은 시스템 로그에서 가장 최근 이벤트 1000개를 검색하여 $events 변수에 저장합니다. 그런 다음 이벤트를 ForEach-Object cmdlet으로 파이프합니다. Begin 매개 변수는 현재 날짜 및 시간을 표시합니다. 다음으로 Process 매개 변수는 Out-File cmdlet을 사용하여 events.txt라는 텍스트 파일을 만들고 이 파일에 각 이벤트의 메시지 속성을 저장합니다. 마지막으로 End 매개 변수는 모든 처리가 완료된 후 날짜 및 시간을 표시하는 데 사용됩니다.





예 4

C:\PS>get-itemproperty -path hkcu:\Network\* | foreach-object {set-itemproperty -path $_.pspath -name RemotePath -value $_.RemotePath.ToUpper();}

설명
-----------
이 명령은 HKCU:\Network 키 아래의 모든 하위 키에 있는 RemotePath 레지스트리 항목의 값을 대문자 텍스트로 변경합니다. 이 형식을 사용하여 레지스트리 항목 값의 형식이나 내용을 변경할 수 있습니다.

Network 키의 각 하위 키는 로그온 시 다시 연결되는 매핑된 네트워크 드라이브를 나타냅니다. RemotePath 항목에는 연결된 드라이브의 UNC 경로가 포함되어 있습니다. 예를 들어 E: 드라이브를 \\Server\Share에 매핑하는 경우 HKCU:\Network의 E 하위 키가 생기고 E 하위 키의 RemotePath 레지스트리 항목 값은 \\Server\Share가 됩니다.

이 명령은 Get-ItemProperty cmdlet을 사용하여 Network 키의 하위 키를 모두 가져오고 Set-ItemProperty cmdlet을 사용하여 각 키에서 RemotePath 레지스트리 항목의 값을 변경합니다. Set-ItemProperty 명령에서 경로는 레지스트리 키의 PSPath 속성 값입니다. 이것은 레지스트리 항목이 아니라 레지스트리 키를 나타내는 Microsoft .NET Framework 개체의 속성입니다. 이 명령은 문자열(REG_SZ)인 RemotePath 값의 ToUpper() 메서드를 사용합니다.

Set-ItemProperty가 각 키의 속성을 변경하기 때문에 ForEach-Object cmdlet이 속성에 액세스하는 데 필요합니다.