Aracılığıyla paylaş


ForEach-Object

Giriş nesneleri koleksiyonundaki her öğeye karşı bir işlem gerçekleştirir.

Syntax

ScriptBlockSet (Varsayılan)

ForEach-Object
    [-Process] <ScriptBlock[]>
    [-InputObject <PSObject>]
    [-Begin <ScriptBlock>]
    [-End <ScriptBlock>]
    [-RemainingScripts <ScriptBlock[]>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

PropertyAndMethodSet

ForEach-Object
    [-MemberName] <String>
    [-InputObject <PSObject>]
    [-ArgumentList <Object[]>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

ForEach-Object cmdlet'i, giriş nesneleri koleksiyonundaki her öğe üzerinde bir işlem gerçekleştirir. Giriş nesneleri cmdlet'ine yöneltilebilir veya InputObject parametresi kullanılarak belirtilebilir.

Windows PowerShell 3.0'dan başlayarak, ForEach-Object komutu oluşturmanın iki farklı yolu vardır.

  • Betik bloğu söz dizimi. İşlemi belirtmek için bir betik bloğu kullanabilirsiniz. Betik bloğunda, geçerli nesneyi temsil etmek için $_ değişkenini kullanın. Betik bloğu, İşlem parametresinin değeridir. Betik bloğu herhangi bir PowerShell betiği içerebilir.

    Örneğin, aşağıdaki komut bilgisayardaki her işlemin ProcessName özelliğinin değerini alır.

    Get-Process | ForEach-Object {$_.ProcessName}

    ForEach-Object, ve bloklarını begin açıklandığı gibi destekler.processend

    Not

    Betik blokları çağıranın kapsamında çalışır. Bu nedenle, bloklar bu kapsamdaki değişkenlere erişebilir ve cmdlet tamamlandıktan sonra bu kapsamda kalıcı olan yeni değişkenler oluşturabilir.

  • Basitleştirilmiş söz dizimi. Basitleştirilmiş söz dizimini kullanarak, işlem hattında nesnenin bir özellik veya yöntem adını belirtirsiniz. ForEach-Object işlem hattındaki her nesne için özellik veya yöntemin değerini döndürür.

    Örneğin, aşağıdaki komut ayrıca bilgisayardaki her işlemin ProcessName özelliğinin değerini alır.

    Get-Process | ForEach-Object ProcessName

    Basitleştirilmiş söz dizimi Windows PowerShell 3.0'da kullanıma sunulmuştur. Daha fazla bilgi için bkz. about_Simplified_Syntax.

Örnekler

Örnek 1: Dizideki tamsayıları bölme

Bu örnek üç tamsayıdan oluşan bir dizi alır ve bunların her birini 1024'e böler.

30000, 56798, 12432 | ForEach-Object -Process {$_/1024}
29.296875
55.466796875
12.140625

Örnek 2: Dizindeki tüm dosyaların uzunluğunu alma

Bu örnek, $PSHOMEPowerShell yükleme dizinindeki dosyaları ve dizinleri işler.

Get-ChildItem $PSHOME | ForEach-Object -Process {
    if (!$_.PSIsContainer) {$_.Name; $_.Length / 1024; " " }
}

Nesne bir dizin değilse, betik bloğu dosyanın adını alır, Length özelliğinin değerini 1024'e böler ve bir sonraki girdiden ayırmak için bir boşluk (" ") ekler. Cmdlet, bir nesnenin dizin olup olmadığını belirlemek için PSIsContainer özelliğini kullanır.

Örnek 3: En son Sistem olayları üzerinde çalışma

Bu örnek, Sistem olay günlüğündeki en son 1000 olayı bir metin dosyasına yazar. Geçerli saat, olaylar işlenmeden önce ve işlendikten sonra görüntülenir.

Get-EventLog -LogName System -Newest 1000 |
    ForEach-Object -Begin {Get-Date} -Process {
        Out-File -FilePath Events.txt -Append -InputObject $_.Message
    } -End {Get-Date}

Get-EventLog, Sistem olay günlüğünden en son 1000 olayı alır ve bunları ForEach-Object cmdlet'ine aktarır. Begin parametresi geçerli tarih ve saati görüntüler. Ardından İşlem parametresi cmdlet'ini Out-File kullanarak events.txt adlı bir metin dosyası oluşturur ve bu dosyadaki olayların her birinin ileti özelliğini depolar. Son olarak End parametresi, tüm işlemler tamamlandıktan sonra tarih ve saati görüntülemek için kullanılır.

Örnek 4: Kayıt defteri anahtarının değerini değiştirme

Bu örnek, anahtarı altındaki tüm alt anahtarlardaki HKCU:\Network kayıt defteri girdisinin değerini büyük harfle değiştirir.

Get-ItemProperty -Path HKCU:\Network\* |
  ForEach-Object {
    Set-ItemProperty -Path $_.PSPath -Name RemotePath -Value $_.RemotePath.ToUpper()
  }

Kayıt defteri giriş değerinin biçimini veya içeriğini değiştirmek için bu biçimi kullanabilirsiniz.

anahtarındaki her alt anahtar, oturum açma sırasında yeniden bağlanan eşlenmiş bir ağ sürücüsünü temsil eder. RemotePath girdisi, bağlı sürücünün UNC yolunu içerir. Örneğin, E: sürücüsünü \\Server\Shareile eşlerseniz, HKCU:\Network kayıt defteri değeri olarak ayarlanmış bir \\Server\Share alt anahtarı oluşturulur.

Komut, Get-ItemProperty anahtarının tüm alt anahtarlarını almak için cmdlet'ini ve her anahtardaki Set-ItemProperty kayıt defteri girdisinin değerini değiştirmek için cmdlet'ini kullanır. komutunda Set-ItemProperty yol, kayıt defteri anahtarının PSPath özelliğinin değeridir. Bu, kayıt defteri girdisini değil, kayıt defteri anahtarını temsil eden Microsoft .NET Framework nesnesinin bir özelliğidir. Komut, REG_SZ dize olan RemotePath değerinin ToUpper() yöntemini kullanır.

Set-ItemProperty her anahtarın özelliğini değiştirdiğinden, özelliğe erişmek için ForEach-Object cmdlet'i gerekir.

Örnek 5: $null otomatik değişkenini kullanma

Bu örnek, $null otomatik değişkeni ForEach-Object cmdlet'ine bağlamanın etkisini gösterir.

1, 2, $null, 4 | ForEach-Object {"Hello"}
Hello
Hello
Hello
Hello

PowerShell, $null açık bir yer tutucu olarak değerlendirdiğinden, ForEach-Object cmdlet'i $null için bir değer oluşturur.

Örnek 6: Özellik değerlerini alma

Bu örnek, cmdlet'in MemberName parametresini kullanarak tüm yüklü PowerShell modüllerinin Path özelliğinin ForEach-Object değerini alır.

Get-Module -ListAvailable | ForEach-Object -MemberName Path
Get-Module -ListAvailable | foreach Path

İkinci komut, birinci komutla eşdeğerdir. Cmdlet'in Foreach diğer adını kullanır ForEach-Object ve isteğe bağlı olan MemberName parametresinin adını atlar.

ForEach-Object cmdlet'i özellik değerlerini almak için kullanışlıdır, çünkü özellik değeri türünü değiştiren Biçim cmdlet'lerinden veya Select-Object cmdlet'inden farklı olarak türü değiştirmeden değeri alır.

Örnek 7: Modül adlarını bileşen adlarına bölme

Bu örnekte, iki noktayla ayrılmış modül adını bileşen adlarına bölmenin üç yolu gösterilmektedir. Komutlar dizelerin Split yöntemini çağırır. Üç komut farklı söz dizimi kullanır, ancak eşdeğer ve değiştirilebilir. Çıkış, üç durumda da aynıdır.

"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" |
    ForEach-Object {$_.Split(".")}
"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" |
    ForEach-Object -MemberName Split -ArgumentList "."
"Microsoft.PowerShell.Core", "Microsoft.PowerShell.Host" |
    foreach Split "."
Microsoft
PowerShell
Core
Microsoft
PowerShell
Host

İlk komut, bir betik bloğu ve geçerli nesne işleci $_içeren geleneksel söz dizimini kullanır. Sınırlayıcı bağımsız değişkenini kapsayan yöntemi ve parantezleri belirtmek için nokta söz dizimini kullanır.

İkinci komut, Split yöntemini belirtmek için MemberName parametresini ve bölme sınırlayıcısı olarak noktayı () tanımlamak için . parametresini kullanır.

Üçüncü komut, cmdlet'in foreach diğer adını kullanır ForEach-Object ve isteğe bağlı olan MemberName ve ArgumentList parametrelerinin adlarını atlar.

Örnek 8: İki betik bloğuyla ForEach-Object kullanma

Bu örnekte, konumsal olarak iki betik bloğu geçiririz. Tüm betik blokları process parametresine bağlanır. Ancak, bunlar Begin ve Process parametrelerine geçirilmiş gibi kabul edilir.

1..2 | ForEach-Object { 'begin' } { 'process' }
begin
process
process

Örnek 9: İkiden fazla betik bloğuyla ForEach-Object kullanma

Bu örnekte, konumsal olarak dört betik bloğu geçiririz. Tüm betik blokları process parametresine bağlanır. Ancak bunlar Begin, Process ve End parametrelerine geçirilmiş gibi kabul edilir.

1..2 | ForEach-Object { 'begin' } { 'process A' }  { 'process B' }  { 'end' }
begin
process A
process B
process A
process B
end

Not

İlk betik bloğu her zaman begin bloğuna, son blok end bloğuna ve iki orta blok da process bloğuna eşlenir.

Örnek 10: Her işlem hattı öğesi için birden çok betik bloğu çalıştırma

Önceki örnekte gösterildiği gibi, İşlem parametresi kullanılarak geçirilen birden çok betik bloğu Başlangıç ve Bitiş parametrelerine eşlenir. Bu eşlemeyi önlemek için Başlangıç ve Bitiş parametreleri için açık değerler sağlamanız gerekir.

1..2 | ForEach-Object -Begin $null -Process { 'one' }, { 'two' }, { 'three' } -End $null
one
two
three
one
two
three

Parametreler

-ArgumentList

Bir yöntem çağrısı için bağımsız değişken dizisini belirtir. ArgumentList'in davranışı hakkında daha fazla bilgi için bkz. about_Splatting.

Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.

Parametre özellikleri

Tür:

Object[]

Default value:None
Joker karakterleri destekler:False
DontShow:False
Diğer adlar:Argümanlar

Parametre kümeleri

PropertyAndMethodSet
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-Begin

Bu cmdlet herhangi bir giriş nesnesini işlemeden önce çalıştırılan bir betik bloğunu belirtir. Bu betik bloğu, işlem hattının tamamı için yalnızca bir kez çalıştırılır. Blok hakkında begin daha fazla bilgi için bkz. about_Functions.

Parametre özellikleri

Tür:ScriptBlock
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

ScriptBlockSet
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-Confirm

Cmdlet'i çalıştırmadan önce sizden onay ister.

Parametre özellikleri

Tür:SwitchParameter
Default value:False
Joker karakterleri destekler:False
DontShow:False
Diğer adlar:Cf

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-End

Bu cmdlet tüm giriş nesnelerini işledikten sonra çalıştırılan bir betik bloğu belirtir. Bu betik bloğu, işlem hattının tamamı için yalnızca bir kez çalıştırılır. Blok hakkında end daha fazla bilgi için bkz. about_Functions.

Parametre özellikleri

Tür:ScriptBlock
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

ScriptBlockSet
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-InputObject

Giriş nesnelerini belirtir. ForEach-Object her giriş nesnesinde betik bloğunu veya işlem deyimini çalıştırır. Nesneleri içeren bir değişken girin veya nesneleri alan bir komut veya ifade yazın.

Komutun sonuçlarını öğesine göndermek yerine ile ForEach-ObjectForEach-Object parametresini kullandığınızda, InputObject değeri tek bir nesne olarak değerlendirilir. Değer, -InputObject (Get-Process)gibi bir komutun sonucu olan bir koleksiyon olsa bile bu doğrudur. InputObject bir diziden veya nesne koleksiyonundan tek tek özellikleri döndüremediğinden, tanımlı özelliklerde belirli değerlere sahip nesneler için bir nesne koleksiyonu üzerinde işlem gerçekleştirmek için kullanırsanızForEach-Object, bu konudaki örneklerde gösterildiği gibi işlem hattında kullanmanızı ForEach-Object öneririz.

Parametre özellikleri

Tür:PSObject
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:True
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-MemberName

Alınacak üye özelliğinin veya çağrılacak üye yönteminin adını belirtir. Üyelerin statik üyeler değil örnek üyeleri olması gerekir.

Joker karakterlere izin verilir, ancak yalnızca sonuçta elde edilen dize benzersiz bir değere çözümlenirse çalışır. Örneğin, Get-Process | foreach -MemberName *Nameçalıştırırsanız joker karakter deseni komutun başarısız olmasına neden olan birden fazla üyeyle eşleşir.

Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.

Parametre özellikleri

Tür:String
Default value:None
Joker karakterleri destekler:True
DontShow:False

Parametre kümeleri

PropertyAndMethodSet
Position:0
Zorunlu:True
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-Process

Her giriş nesnesi üzerinde gerçekleştirilen işlemi belirtir. Bu betik bloğu, işlem hattındaki her nesne için çalıştırılır. Blok hakkında process daha fazla bilgi için bkz. about_Functions.

process parametresine birden çok betik bloğu sağladığınızda, ilk betik bloğu her zaman blokla begin eşlenir. Yalnızca iki betik bloğu varsa, ikinci blok process bloğuna eşlenir. Üç veya daha fazla betik bloğu varsa, ilk betik bloğu her zaman begin bloğuna, son blok end bloğuna ve orta bloklar process bloğuna eşlenir.

Parametre özellikleri

Tür:

ScriptBlock[]

Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

ScriptBlockSet
Position:0
Zorunlu:True
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-RemainingScripts

İşlem parametresi tarafından alınmamış tüm betik bloklarını belirtir.

Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.

Parametre özellikleri

Tür:

ScriptBlock[]

Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

ScriptBlockSet
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-WhatIf

Cmdlet çalıştırılırsa ne olacağını gösterir. Cmdlet çalıştırılmıyor.

Parametre özellikleri

Tür:SwitchParameter
Default value:False
Joker karakterleri destekler:False
DontShow:False
Diğer adlar:Wi

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

CommonParameters

Bu cmdlet yaygın parametreleri destekler: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction ve -WarningVariable. Daha fazla bilgi için bkz. about_CommonParameters.

Girişler

PSObject

Herhangi bir nesneyi bu cmdlet'e yöneltebilirsiniz.

Çıkışlar

PSObject

Bu cmdlet, giriş tarafından belirlenen nesneleri döndürür.

Notlar

Windows PowerShell, ForEach-Objectiçin aşağıdaki diğer adları içerir:

  • %
  • foreach

ForEach-Object cmdlet'i foreach deyimine çok benzer şekilde çalışır, ancak girişi foreach deyimine aktaramazsınız. Deyimi hakkında foreach daha fazla bilgi için bkz. about_Foreach.

PowerShell 4.0'dan başlayarak koleksiyonlarla kullanılmak üzere Where ve ForEach yöntemleri eklendi. Bu yeni yöntemler hakkında daha fazla bilgiyi burada about_Arrays