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이 속성에 액세스하는 데 필요합니다.