Invoke-WebRequest cmdlet'i ile HTML içinde istenen öğelerin hızlı ayrıştırması yapılabilir. Örneğin şu sayfada yapılmış bir örnekte github üzerindeki görsellerin indirilmesi için powershell kullanılmış. Hedef sayfamız
ile belirtilmiş. Bu sayfanın içeriği Invoke-WebRequest ile $page değişkenine atanmış.
Bu aşamadan sonra sayfadaki bütün bağlantılara $page.Links ile ulaşmak mümkün. Hatta bir miktar biçimlendirme ile
gibi bir tablo oluşturulmuş. Daha önce duvar kağıdı indirme için şu örneği yapmıştım, yine Links kullanarak.
Daha karışık bir örnek için live.sysinternals.com/files sayfasında yer alan araçların bir listesini oluşturmak istediğimizi düşünelim. Yine $page.Links ile sayfadaki bağlantılara erişmek mümkün ama bir de sayfada yer alan ama bir şekilde Links veya diğer property'ler ile görüntülenemeyen araçların güncellenme tarihi almak istediğimizi varsayalım. Bunun için sayfanın ham (raw) HTML kaynağını bir HTMLFile nesnesine atarak içinde adım adım ilerlememiz gerek.
İlk iş bir HTMLFile nesnesi oluşturmak
Daha sonra $page.Content verisini bu nesnenin içine alalım.
Yukarıdaki satır bazı durumlarda (Office yüklü olmayan bilgisayarlar veya Powershell 6+ sürümlerde)
method invocation failed because [system.__comobject] does not contain a method named 'IHTMLDocument2_write'
hatası verebilir. Bu durumda IHTMLDocument2_write satırını aşağıdaki 2 satır ile değiştirmek gerekebilir.
try/catch bloğu ile iki yöntemin birleşimini sayfanın altına yazıyorum, burası daha fazla karışmasın.
Sayfadaki tarih ve saat verisi
Saturday, March 21, 2026 11:18 AM
şeklinde olduğu için bu yapıyla eşleşebilecek bir regex oluşturalım.
Sayfanın kaynak kodunda yer alan header bilgisi gibi işimizi yaramayacak verilerden kurtulmak için ilk tarih saat bilgisinin geçtiği konumu bulalım.
İlk kez tarih ve saat formatının geçtiği yer baz alacağımız başlangıç noktası olacak. Buradan sayfanın sonuna kadar olan yer ile ilgileniyoruz.
Sıra bu kalıba uyan verileri ayrıştırma adımına geldi. $pattern değişkeninin içinde 3 gruplandırma kullandım, parantezler içinde. Aşağıdaki Groups bölümleri (nesneleri, dizileri, neyse) buna göre oluşturuldu.
live.sysinternals.com/files sayfasında bir değişiklik olana kadar bunun çalışacağını umuyorum.
Sayfada Date, Size veya FileName alanlarına ait bir veri etiketi/başlık/alan adı bulunmuyor. Bunu en son ayrıştırma aşamasında yaptım. Bu bölümdeki her alan için $pattern değişkeni içindeki bölümlerle eşleşme şöyle:
| Date | Groups[1] | (\w+,\s+\w+\s+\d+,\s+\d+\s+\d+:\d+\s+[AP]M) |
| Size | Groups[2] | (\d+) |
| FileName | Groups[3] | (\S+) |
---

