Dizi Üzerinden Döngü Oluşturma "ForEach" ifadesini ve değişkenlerini kullanma | PowerShell ortamı | Bölüm 2#2
Bu makale, PowerShell komutunu yazma şeklimiz, “ForEach” ifadesini kullanarak bir dizide döngü oluşturma konusuna temel bir giriş yaptığımız önceki makalenin devamı niteliğindedir.
Bir dizi boyunca döngü oluşturma “ForEach” PowerShell makale serisini kullanma
Dizi aracılığıyla döngü oluşturma “ForEach” kullanma PowerShell makale serisi aşağıdaki makaleleri içerir:
- Dizi aracılığıyla döngü oluşturma “ForEach” PowerShell komutunu kullanma | Temel giriş | Bölüm 1#2
- Dizi aracılığıyla döngü oluşturma “ForEach” ifadesini ve değişkenlerini kullanma | PowerShell ortamı | Bölüm 2#2 (bu makale)
PowerShell değişkeni kullanma
"Değişken" teriminin açıklamasını basitleştirmek istersek, değişken bileşenini "veri"yi barındıran "mantıksal bir kap" olarak ilişkilendirebiliriz.
Çoğu zaman değişkende saklanan “veri”, bir “Dizi verisi” olarak değerlendirilebilir.
"Değişken", PowerShell "ForEach ifadesi" ve dizileri kullanılırken oldukça sık kullanılan "temel bileşen" olarak düşünülebilir.
Değişken kullanma - Olayların Akışı
PowerShell değişkeni kullanılırken aşağıdaki aşamalar veya adımlar uygulanır:
- Değişkeni bildirdiğinizde "değişken deposu" boş olur.
- PowerShell Al komutlarının çıktısını "yönlendirerek" bilgileri "değişken deposunda" saklayın.
- Değişkende depolanan bilgilere "erişen" ve bu bilgilerle "bir şeyler yapan" ek PowerShell komutlarını kullanın.
PowerShell ortamındaki değişken sözdizimi
“Sözdizimi” değişkeni şu şekilde yazılır:
- Bir değişkeni "bildirmek" için $ işaretini kullanın.
- Değişken adını tanımlayın. Değişken ismi bizim seçtiğimiz rastgele bir isimdir. En iyi uygulama “anlamlı” bir değişken adı seçmektir. Değişken adları büyük/küçük harfe duyarlı değildir. Değişken adları boşluk ve özel karakterler içerebilir ancak bunların kullanımı zordur ve bunlardan kaçınılmalıdır.
- Belirli nesneler hakkında "veri almak" için özel "PowerShell Get" komutunu yazın. PowerShell komutunun çıktısı değişkende saklanacaktır.
Değişken sözdiziminin bir örneği şöyle olabilir:
$ExchangeMailboxes = Get-MailboxBu senaryoda, Get-Mailbox PowerShell komutundan aldığımız bilgileri depolamak için kullanacak $ExchangeMailboxes adında bir değişken tanımladık.
PowerShell “ForEach” ifadesi + Dizi Kullanma
Yönetim görevlerini PowerShell kullanarak uygulamanın en belirgin avantajlarından biri, bir nesne "grubu" (Dizi) üzerinde yürütülecek bir işlem olan "Toplu işlem" anlamına gelen bir işlemi gerçekleştirme yeteneğidir.
Dizi üyeleri üzerinde belirli bir görevi çalıştırma yeteneği, ForEach PowerShell deyimi + Dizi verilerini (Dizi üyelerinin) depolayan bir değişkenin birleşimi kullanılarak birçok kez uygulanır.
Aşağıdaki akışı uygulamak için ForEach PowerShell deyimini kullanıyoruz:
- Dizi içeriğinin “taranması”.
- Dizideki ilk üyeyi bulun.
- Dizi üyesinde belirli bir PowerShell komutunu çalıştırın ("bir şeyler yapın").
- Dizi deposuna erişerek, Dizideki ikinci üyeyi getirerek, istenen PowerShell komutunu çalıştırarak vb. işlemi yeniden başlatın.
Bu döngü işlemi, ForEach PowerShell deyimi Dizideki "son üyeyi" bulduktan sonra duracaktır.
Aşağıdaki şemada “ForEach PowerShell ifadesi” + PowerShell değişkenlerini içeren bir PowerShell komutu örneğini görebiliriz.
- Bölüm 1#3 - bu bölümde değişkenin adını beyan ediyoruz ve “Al” PowerShell komutunun sonucuyla “değişken deposunu” “şarj ediyoruz”.
- Bölüm 2#3 - bu bölümde “ForEach PowerShell stamen”i başlatıyoruz + Dizideki belirli bir üyeyi temsil etmek için kullanılan ek değişkenin adını bildiriyoruz.
- Bölüm 3#3 - bu bölümde (küme parantezleriyle başlayan), Dizideki her üye için ayrı ayrı "yürütülen" belirli PowerShell komutunu tanımlarız. Burası “Bir Şey Yap” kısmı. Loop deyimi kullanıldığında, belirli PowerShell komutu küme parantezleri arasına yazılır.
Dizideki bir üyeye nasıl hitap edilir?
Bildiğimiz gibi Array üyelerin oluşturduğu bir koleksiyondur. "ForEach PowerShell ifadesini" kullanan bir PowerShell komutu kullandığımızda, dizideki üyelerin her birine adres vermek veya referans vermek ve belirli üyelerin her birine belirli bir PowerShell komutunu "uygulamak" isteriz.
Teknik açıdan konuşursak, "Dizi üye nesnesi" ile ilişki kurmak için kullanabileceğimiz birkaç yöntem vardır.
Bu yazımda “üye nesne”yi temsil eden ek bir değişken kullandığımız yöntemi incelemek istiyorum.
ForEach PowerShell ifadesi, "Dizi alanına" ("Array değişkeni" ile temsil edilir) nasıl erişileceğini ve Dizi içinde nasıl döngü yapılacağını bilir.
Her Döngüde, ForEach PowerShell ifadesi Diziden belirli bir üyeyi (“Üye değişkeni” ile temsil edilir) “çeker”, gerekli PowerShell komutunu çalıştırın ve “sonraki Dizi üyesine” devam edin.
Dizi üyesini temsil eden değişkenin adı, bizim seçtiğimiz rastgele bir addır.
En iyi uygulama, "üye" ile "Dizi"yi kolayca ayırt etmemize yardımcı olacak anlamlı bir değişken adı seçmektir.
Array’i ve Array’deki üyeyi iki farklı değişken kullanarak tanımladığımız “ForEach PowerShell deyimi” komutunun yapısını aşağıdaki diyagramda görebiliriz.
Örneğimizde, $Mailbox değişkeni dizideki her üyeyi temsil eder ve $ExchangeMailboxes değişkeni Dizinin kendisini temsil eder.
Değişken ve Dizi kavramını gösterebilmek için aşağıdaki iki örneği kullanalım:
Örnek 1: Belirli dizi üyesini görüntüleyin
Sonraki örnekte, Get-mailbox PowerShell komutu kullanılarak oluşturulan diziyi depolamak için $ExchangeMailboxes adlı bir Değişken kullanıyoruz.
PowerShell'in tamamı:
$ExchangeMailboxes = Get-MailboxBu aşamada bir veya daha fazla üye içeren bir Değişkenimiz var (Exchange Online posta kutuları). Teorik olarak "Değişken alanda" neyin saklandığını "bilemeyiz".
$ExchangeMailboxes Değişkeninde depolanan ilk Dizi üyesini görüntüleyebilmek için aşağıdaki PowerShell komutunu kullanabiliriz:
$ExchangeMailboxes[0]Değişken $ExchangeMailboxes'ta depolanan ikinci Dizi üyesini görüntülemek için.
$ExchangeMailboxes[1]Ve benzeri.
PowerShell konsolu çıktı örneği:
PS C:\> $ExchangeMailboxes = Get-Mailbox
PS C:\> $ExchangeMailboxes[0]
Name Alias ServerName ProhibitSendQuota
---- ----- ---------- -----------------
Adele Adele amxpr05mb0646 49.5 GB (53,150,220,288 bytes)
PS C:\> $ExchangeMailboxes[1]
Name Alias ServerName ProhibitSendQuota
---- ----- ---------- -----------------
admin_3a5bb52c62 Bob he1pr05mb1369 49.5 GB (53,150,220,288 bytes)Örnek 2: Her dizi üyesini görüntüleyen bir PowerShell döngü ifadesi yazma
Aşağıdaki örneğin, Array üyelerinin her biri için Loop ifadesinin nasıl yürütüldüğünü gösterme amacı dışında hiçbir "gerçek amacı" yoktur.
Bu örnekte, PowerShell'den Değişken $ExchangeMailboxes'ta depolanan Dizi üyelerinin her birini getirmesini ve PowerShell konsol ekranına aşağıdaki sözdizimini kullanan bir bildirim yazmasını istiyoruz: Bu, dizi üyelerinden biri - “(Exchange posta kutusu)” + .
PowerShell komut örneği:
$ExchangeMailboxes = Get-Mailbox
ForEach ($Mailbox in $ExchangeMailboxes) {
Write-host This is one of the array members - "(Exchange mailbox)" - $Mailbox
}PowerShell konsolu çıktı örneği:
This is one of the array members - Exchange mailbox - Adele
This is one of the array members - Exchange mailbox - Alice Good
This is one of the array members - Exchange mailbox - Alicia Keys
This is one of the array members - Exchange mailbox - Angelina Jolie
This is one of the array members - Exchange mailbox - Aretha Franklin
This is one of the array members - Exchange mailbox - Beatles the
This is one of the array members - Exchange mailbox - Beyonce
This is one of the array members - Exchange mailbox - Billy
This is one of the array members - Exchange mailbox - Bob MarleyBelirli bir Dizi üyesinin kimliği nasıl belirlenir?
Bu bölümde - Belirli bir Array üyesinin kimliği nasıl belirlenir? konusuna değinmek istiyorum.
Belirtildiği gibi, Dizinin her üyesi üzerinde belirli bir PowerShell komutunun çalışmasını istiyoruz.
PowerShell'in bu görevi gerçekleştirebilmesi için PowerShell'in her bir üyeyle ayrı ayrı "ilişki kurmasına" yardımcı olacak bir yöntem kullanmamız gerekiyor. Yani dizideki her bir üyenin “kimliğinin” ne olduğunu PowerShell’e “söylememiz” gerekiyor.,
PowerShell ortamında bir Dizideki bir üyenin kimliğini belirtmek için aşağıdaki sözdizimini kullanırız:
“Üye nesneyi” temsil eden değişken adı + “nokta karakteri” + nesne kimliğini temsil eden nesne özelliklerinden biri.
Kulağa kafa karıştırıcı ve anlaşılması zor mu geliyor?
Bildiğim tek çözüm, verilen bilgileri ve örnekleri "resmin tamamını" görene kadar tekrar tekrar okumaktır.
Aşağıdaki şemada Dizideki belirli bir üyeyle ilişki kurmak için kullandığımız sözdiziminin bir örneğini görebiliriz.
Örneğimizde Array üyesini temsil etmek için kullandığımız değişken $Mailbox ve kullandığımız “objectidentity property” ise DisplayName'dir.
Nesne kimliği ” ve “kimlik özelliği”
Bu bizi bir sonraki soruya getiriyor: “Nesne kimliğinin” anlamı nedir ve “kimlik özelliğinin” anlamı nedir?
Cevap, her birimizin bir kimliğe sahip olması gibi, her bir “PowerShell nesnesinin” de bir “kimliğe” sahip olmasıdır.
Sorunu daha da karmaşık hale getirmek için, her bir PowerShell nesnesinin birden fazla kimliğe sahip olabilmesi gibi, her birimiz özel ad, Takma ad, Sosyal güvenlik numarası vb. gibi birden fazla kimliğe sahip olabilir.
Aşağıdaki şemada, Exchange Online tabanlı ortamda Exchange posta kutusunun mevcut tüm kimliklerinin bir örneğini görebiliriz.
Çoklu kimliklerin çeşitliliğinden dolayı “başınız ağrıyorsa” sorun değil!
Gerçekte, bu "kimliklerin" tüm türlerini kullanmıyoruz, bunun yerine yalnızca yaygın olarak kullanılan belirli bir kimlik kümesini kullanıyoruz.
Dizi üyeleri ve iki yaygın ilişki türü
Bu bölümde “Dizi üyeleri ve iki yaygın ilişki türü” olarak tanımladığım konuya değinmek istiyorum.
Teknik olarak nesneler arasında dört tür ilişki tanımlayabiliriz:
- Bire bir
- Bire çok
- Çoktan bire
- Çoktan çoğa
“Bire bir” ilişkiyi tanımlayabilmek için Array ve “ForEach” PowerShell deyimini kullanmamıza gerek yok.
"Çoktan Çoğa" olarak tanımladığım ilişkilere gelince, bu yazıda bu tür ilişkilerden bahsetmemeyi tercih ediyorum çünkü biraz karmaşık hale gelebilir.
Birçok senaryoda, ele aldığımız en yaygın ilişkiler, birden çoğa veya çoğa bir olarak tanımlanabilecek ilişkilerdir.
Birden çoğa ilişkiler - örnek
"Birden çoğuna" olarak tanımlanan ilişki, belirli bir nesnenin (bir) birden fazla nesneyi (Array) "etkilemesine" olanak sağlamak istediğimiz bir senaryoyla ilgilidir.
Başka bir deyişle, belirli bir nesnenin, Nesneler Dizisindeki her üye için "bir şeyler yapmasını" etkinleştirin.
Böyle bir ilişkiyi gösterebilmek için izin atamanın idari görevini kullanalım.
Örneğin, John Exchange Online yöneticisidir. Mevcut Exchange Online posta kutularının her birine John, Tam Erişim izni atamak istiyoruz.
- Örneğimizde bu “Dizi” tüm Exchange Online posta kutularını içerir
- Her Exchange Online posta kutusu Dizinin bir Üyesi olarak kabul edilir.
- John mevcut ilişkide “Bir”i temsil ediyor.
- Exchange Online posta kutuları mevcut ilişkideki “Birçok”u temsil eder.
Çoka-bir ilişki - örnek
"Çoktan bire" olarak tanımlanan ilişki, birden fazla nesnenin (Çok) belirli veya bireysel bir nesneyi (bir) "etkilemesine" olanak sağlamak istediğimiz bir senaryoyla ilgilidir.
Başka bir deyişle, bir grup nesnenin (birden fazla nesnenin) belirli bir nesne üzerinde "bir şeyler yapmasını" sağlayın.
Böyle bir ilişkiyi gösterebilmek için izin atamanın idari görevini kullanalım.
Örneğin, Yardım Masası biletleri için posta kutusu görevi gören "Yardım Masası posta kutusu" (bir) üzerinde BT grubuna "ait" olan tüm kullanıcılara Tam Erişim izinleri atamak istiyoruz.
- Örneğimizde “Dizi” tüm BT üyelerini içerir.
- Her BT kullanıcısı Dizinin bir Üyesi olarak kabul edilir.
- BT üyeleri mevcut ilişkide “Çok” u temsil ediyor.
- “Yardım Masası posta kutusu” mevcut ilişkideki “Bir”i temsil eder.
PowerShell Loop deyimini + değişkenleri + kullanarak iki yaygın ilişki türünü tanımlayın
Bu bölümde şu ana kadar incelediğimiz birkaç konuyu “rap” etmek istiyorum, böylece “resmin tamamını” daha iyi anlayabiliriz.
PowerShell ForEach deyimi örneği kullanma - Bir'den Çoğa ilişki örnekleri
Bu bölümde “Birden Çoğa” olarak tanımlanan bir ilişkiyi gösteriyoruz.
Senaryo açıklaması
Senaryomuzda John Exchange Yöneticisidir. Mevcut tüm Exchange Online posta kutularına John Tam erişim izinleri atamak istiyoruz.
Bu gereksinimi karşılayabilmek için aşağıdaki bölümleri içeren bir PowerShell Loop komutu oluşturuyoruz:
Bölüm 1#3 - Bu bölümde, Get-Mailbox PowerShell komutunun çıktısını "tutacak" $ExchangeMailboxes adlı bir değişken tanımlıyoruz.
Belirtilen PowerShell komutu, mevcut tüm Exchange Online posta kutularının “listesini” alacaktır.
$ExchangeMailboxes = Get-MailboxBölüm 2#3 - Bu bölümde, "Exchange posta kutusu Dizisi"ndeki üyelerin her birini temsil etmek için kullanılan $Mailbox adlı ek bir değişken tanımlıyoruz (değişkeninde saklanan bilgiler) >$ExchangeMailboxes).
ForEach ($Mailbox in $ExchangeMailboxes)Bölüm 3#3 - Bu bölümde, “John” kullanıcısına Exchange Online posta kutularının her biri için Tam Erişim izni atayacak PowerShell komutunu tanımlıyoruz.
Add-MailboxPermission -identity $Varibale.<Identity> -user <Identity> -AccessRights FullAccessHer dizi üyesinin kimliğine referans verme
Dizi üyelerinin her birinin (Exchange Online posta kutularının her birinin) kimliğine referans vermek için kullandığımız sözdizimine dikkat edin.
Kullandığımız sözdizimi $Mailbox.DisplayName'dir.
Her üyenin kimliği, dizideki üyelerin her birini geçici olarak tutan değişken adı ($Mailbox) + belirli bir "kimlik" özelliği kullanılarak "yazılır".
Örneğimizde kimlik özelliği olarak “DisplayName” kullanıyoruz.
Bu iki parçanın “birleştirilmesi”, “ForEach PowerShell ifadesi” tarafından yürütülen Döngü sürecinde Dizi üyelerinin her birini ayrı ayrı “tanımlamamızı” sağlar.
PowerShell ForEach deyimi örneği - Çoktan Bire ilişki örneği
Bu bölümde “Çoktan Bire” olarak tanımlanan bir ilişkiyi gösteriyoruz.
Senaryo açıklaması
BT, kuruluş kullanıcısının açtığı yardım masası çağrılarını depolamak için hizmet veren Yardım Masası adlı paylaşılan bir posta kutusu kullanır.
BT üyelerinin her birinin, Yardım Masası adlı paylaşılan posta kutusuna Tam Erişim iznine sahip olmasını sağlamak istiyoruz.
Bölüm 1#3 - Bu bölümde, PowerShell komutunun çıktısını "tutacak" $ITMembers adında bir değişken tanımlıyoruz.
Get-User | Where {$_.Title -eq "Administrator"}Belirtilen PowerShell komutu, başlıklarının “Yönetici” değerini içerdiği tüm mevcut kullanıcıların “listesini” alacaktır.
$ITMembers = Get-User | Where {$_.Title -eq "Administrator"}Bölüm 2#3 - Bu bölümde, “IT dizisi”ndeki üyelerin her birini temsil etmek için kullanılan $User adında ek bir değişken tanımlıyoruz ( değişkeninde saklanan bilgiler). $ITMembers).
ForEach ($User in $ITMembers)Bölüm 3#3 - Bu bölümde her BT Üyesine “Yardım Masası posta kutusu” üzerinde Tam Erişim izni atayacak PowerShell komutunu tanımlıyoruz.
Add-MailboxPermission -identity <Identity> -user $user.<Identity> -AccessRights FullAccessHer dizi üyesinin kimliğine referans verme
Dizi üyelerinin her birinin (BT üyelerinin her birinin) kimliğine referans vermek için kullandığımız sözdizimine dikkat edin.
Kullandığımız sözdizimi $User.Alias'tır.
Dizideki her üyenin kimliği, dizideki üyelerin her birini geçici olarak tutan değişken adı ($User) + belirli bir "kimlik özelliği" kullanılarak "yazılır".
Örneğimizde kimlik özelliği olarak “Alias”ı kullanıyoruz.
Bu iki bölümün "birleşimi", Dizi üyelerinin her birini ayrı ayrı "tanımlamamıza" olanak sağlar.




















