Boot İşlemi ve BCD (Boot Configuration Data)

31 Tem
2009

Windows işletim sistemlerinin boot işlemi sırasında ntldr ve boot.ini gibi dosyalar kullanılır. Boot.ini dosyası boot sırasında yüklenecek işletim sistemlerinin sırasını ve disk üzerindeki yerine ilişkin bilgiler içerir.Windows Vista ve Windows Server 2008’de ise boot süreci yeniden düzenlenmiştir. Boot işlemi tümüyle Boot Configuration Data (BCD) dosya temelinde yapılır. BCD, NTLDR ve Boot.ini dosyasının yerine geçmiştir.  Ben de bu makalede boot.ini dosyasının yerini alan BCD’den bahsedeceğim.

BCD sisteminde binary formattaki bir veritabanı dosyasını kullanılır. BCD dosyaları boot uygulamaları ve uygulama ayarlarını tanımlamak için bir depolama alanı sağlar, Boot.ini dosya ayarlarını yapılandırır, sorgular veya değiştirir.

BCD üzerinde yapılacak tüm düzenlemeler Bcdedit.exe ile yapılır. BCD depolama alanlarını yönetmek için geliştirilmiş bir komut satırı aracıdır. Boot seçeneklerini düzenlemek, yeni boot seçenekleri oluşturmak ve mevcut boot seçeneklerini korumak için kullanılır.

Bcdedit, aslında Windows’un önceki sürümlerindeki bulunan Bootcfg.exe ile aynı işi görür ama Bcdedit’te bootcfg’ye göre gelişmiş iki özellik karşımıza çıkıyor :

• Bcdedit’in, Bootcfg.exe’ye göre daha geniş boot seçenekleri sunması
• Script desteğine sahip olması

Not : Bcdedit ile boot seçenekleri düzenleyebilmek için Administrator izinlerine sahip olmak gerekir.

Bcdedit Windows Vista ve sonraki Windows sürümlerinde boot yapılandırılması için kullanılan temel araçtır.Vista da % WINDIR% \System32 klasörü altında bulunur.
Bcdedit veri türleri tek bir değişiklik yapılabilecek şekilde sınırlıdır komplex ve standart değişikliklerin dışına çıkmak istersek WMI ya da API kullanmamız gerekir.

Bcdedit İşlemleri

Bcdedit.exe kullanmına dair birkaç örnek görelim :

C:\bcdedit /enum ile yüklü işletim sistemlerini ve id’lerini görüntüleyebiliriz.


Bcdedit /default komutu ile default işletim sistemini belirleyebiliriz.

Bcdedit /default {current} komutu ile üzerinde çalıştığımız işletim sisteminin default işletim sistemi olarak belirtebiliriz.

bcdedit /bootsequence {ID} {ID} {ID} komutu ile boot sırasını belirleyebiliriz.

Bcdedit /timeout komutu ile boot ekranında karşımıza çıkan işletim sistemi seçmemiz için gerekli bekleme süresini düzenleyebiliriz.

bcdedit /delete {ID} komutu ile varolan boot kayıtlarını silebiliriz.

bcdedit /createstore {ID} komutu ile yeni boot kayıtları yaratabiliriz.

Windows Vista Öncesi işletim sistemlerinin boot ekranında görüntülenen adlarını değiştirmek için aşağıdaki komutu kullanıyoruz.
Bcdedit /set {ntldr} description “örnek boot yazısı”

Windows Vista ve sonraki Windows işletim sistemlerinin boot ekranında görüntülenen adlarını değiştirmek için ise aşağıdaki komutu kullanıyoruz.
Bcdedit /set {current} description “örnek boot yazisi”

NOT : Windows Vista ve sonrası Windows işletim sistemlerinin boot ekranında görüntülenen adlarını değiştirmek için yerine {current} komutunu kullanıyoruz. Ayrıca Windows Vista öncesi işletim sistemleri için de {ntldr} ‘ı kullanıyoruz.


/? Bcdedit komut listesini görüntüler. Bir komut için kullanılabilir komutların bir özetini gösterir. Bir komut için, Bcdedit’i çalıştırdığınızda ayrıntılı yardımı görüntülemek için /? komutu, nerede komutu hakkında daha fazla bilgi için arıyor komut adıdır. Örneğin, Bcdedit /? bu Createstore komutu , createstore ile kullanılabilecek komutları ayrıntılı bir biçimde gösterir.

Umarım yararlı olmuştur. Herkese iyi çalışmalar.

Powershell’de Windows Programlarını Kullanma ve Scripting

23 Tem
2009

PowerShell ile ilgili makale serisinin son makalesinde powershell ile windows programlarını kullanmayı ve powershell scripting ile kullanıcı , grup yaratma gibi işlemlerin nasıl yapılacağını anlatacağım.

Windows komut satırı programlarını ve Windows grafik arabirimine sahip programları başlatmak için Windows PowerShell’i kullanabiliriz.

 

 

Windows  PowerShellin içinde bulunan Notepad gibi bir programı çalıştırmak için, programı çalıştırabilmek için gerekli olan dosya bir dizin içinde olmalıdır çünkü, izlenen yolun şartlarının değişkenliğinin değeri, Windows PowerShellin uygulamaları, yararlıkları ve yazılı metinleri nerede arayacağını belirler.

 

İzlenen yolun şartlarının değişkenliğini göstermek için aşağıdaki şekilde yazınız:

 

PS> $env:path

 

İzlenen yolun şartlarının değişkenliğine yeni dizinler eklemek için aşağıdaki şekilde yazınız:

 

PS> $env:path += “;newdirectory”

 

 

Örneğin WordPad.exe dosyasının dizinini izlenen yol değişkenine eklemek için aşağıdaki şekilde yazınız :

 

PS> $env:path += “;C:\Program Files\Windows NT\Accessories”

 

 

Kurulum komutu gibi, bu görev durumu sadece mevcut Windows  PowerShell oturumlarının değerlerini değiştirir. Değişimi kalıcı hale getirmek için, görev durumunu Windows PowerShell profiline eklemek gerekir. 

 

Scripting

 

Windows PowerShell interaktif bir ortamı destekler. Command Prompt’da bir komutu yazdığınızda komut işlenir ve çıktı shell penceresinde görüntülenir. Ya da bu komut çıktısını bir dosyaya kaydedebilir veya yazıcıya gönderebiliriz. Bir diğer seçenek olarak da bir çıktıyı başka bir komuta göndermek için Pipeline kullanabiliriz. Eğer komut satırında tekrar tekrar çalıştıracağımız belli komut dizimleri varsa, bunları çalıştırabilir, bir dosyaya kaydedebiliriz. Bu uygulamaya scripting ismini de verebiliriz.

 

Sık erişim sağlamış olduğumuz komutları, örneğin .VBS(Visual Basic Script) olarak kaydedip daha sonra çift tıklama ile kolay bir şekilde uzun uzun yazmak zorunda kalmadan komutun istemiş olduğu işlevi yerine getirebiliriz.

 

Windows PowerShell tamamen Scripting uygulamalarını desteklemektedir. PowerShell’de script uygulumaları .PS1 uzantasına sahiptir. Script’i PowerShell üzerinde çalıştırabilmek için sadece ismini yazmamız yeterlidir. Dosya uzantısını yazıp yazmamak tamamen bizim insiyatifimizdedir. Script’i çalıştırabilmek için geçerli bir dizinde yer alan PATH’i (tam tanımlanmış yolu) belirtmemiz gerekmekir. Geçerli dizini göstermek için dizin ismini yazabilir ya da geçerli dizini temsil eden bir nokta(.) kullanabiliriz.

 

Şimdi de PowerShell üzerinde scripting ile alakalı yapabileceğimiz uygulamalara bakalım.

 

Active Directory’de Kullanıcı Yaratma;

# Create ADS-user
$Path= “LDAP://Server1/OU=Bilgiislem,DC=ceyhuncamli,DC=com
$name = “Ceyhun Camli”
$NTname = “CeyhunCamli”
$ou = New-Object Directoryservices.DirectoryEntry($Path)
$user = $ou.PSBase.Children.Add(“CN=” + $name,’user’)
$user.PSBase.CommitChanges()
$user.SAMAccountName = $NTname
$user.l = “Izmir”
$user.Description = “IT Professional”
$user.PSBase.CommitChanges()
“User has been created: ” + $user.PBase.Path
$user.SetPassword(“Password100″)
“Password is set”
$user.Accountdisabled = $false
“User has been activated!”

 

Active Directory’de Tanımlı Bir Kullanıcı Hesabını Silme;

$Path= “LDAP://Server1/CN=Ceyhun Camli,OU=Satis,DC=ceyhuncamli,DC=com”
$user = new-object system.directoryservices.directoryEntry($Path)
if ([system.directoryservices.directoryEntry]::Exists($Path))
{
“User already exists and will be deleted now!”
$user.PSBase.DeleteTree()
}
else
{
“User does not exist!”
}

 

Active Directory’de Kullanıcı Hesabını Taşıma;

#$Path= “LDAP://Server1/CN=Ceyhun Camli,OU=Bilgiislem,DC=ceyhuncamli,DC=com”
$target = “LDAP://Server1/CN=Yonetim,DC=ceyhuncamli,DC=com
$user = new-object system.directoryservices.directoryEntry($Path)
$user.PSBase.MoveTo($target)
“Object has been moved!”

 

Active Directory’ Group Yaratma;
$Path= “LDAP://Server1/DC=ceyhuncamli,DC=com
$con = new-object system.directoryservices.directoryEntry($Path)
$ou = $con.PSBase.Children.Add(“cn=Yoneticiler”,”group”)
$ou.PSBase.CommitChanges()
$ou.samaccountname = “Yoneticiler”
$ou.Description = “ceyhuncamli.com yoneticileri”
$ou.PSBase.CommitChanges()
“”Group was created!”

 

Active Directory’de Gruplara Kullanıcı Ekleme;
$Path= “LDAP://Server1/cn=Yoneticiler,DC=ceyhuncamli,DC=com
$gr = new-object system.directoryservices.directoryEntry($Path)
$User = “LDAP://Server1/CN=Ceyhun Camli,OU=Yoneticiler,DC=ceyhuncamli,DC=com”
$ou.Add($User)
“User ” + $User + ” have been added to the goup ” + $ou + ”

 

Active Directory’de Bir Kullanıcının Grup Üyeliğini Silme;

$Path= “LDAP://Server1/cn=Yoneticiler,DC=ceyhuncamli,DC=com”
$gr = new-object system.directoryservices.directoryEntry($Path)
$User = “LDAP://Server1/CN=Ceyhun Camli,OU=Yoneticiler,DC=ceyhuncamli,DC=com”
$ou.Remove($User)
“User ” + $User + ” have been deleted from group ” + $ou + ”

 

Active Directory OU Yaratma;
$Path= “LDAP://Server1/DC=ceyhuncamli,DC=com
$con = new-object system.directoryservices.directoryEntry($Path)
$ou = $con.PSBase.Children.Add(“ou=Yoneticiler”,”organizationalUnit”)
$ou.PSBase.CommitChanges()
$ou.Description = “ceyhuncamli Yoneticiler”
$ou.PSBase.CommitChanges()
“OU has been created!”

Cmdlet’ler ve Alias’ları 

 Evet bir serinin sonuna geldik. Herkese yararlı olması dileğiyle.

PowerShell “cmdlet” Kavramı

21 Tem
2009

Bugün PowerShell ile ilgili makale serimizin üçüncü makalesi olan écmdlets” kulllanımını anlatacağım.

Cmdlet (Command-Lets) Windows PowerShell’de objeleri işleyen basit fonksiyonlu bir komuttur. Yani cmdlet PowerShell’in komut dizimidir. Fakat bu komutlar standart çalıştırılabilir (executable) dosyalar şeklinde değil de .NET fonksiyonları şeklinde çalışmaktadır. .NET programlama dillerinin mantığı burada kullanılmıştır.

Windows PowerShell’de birçok komut (cmdlets) çok basittir ve diğer komutlar ile kombinasyon halinde kullanılmak için tasarlanmıştır.

Örneğin “Get” komutu sadece bilgi alır. “Set” komutu sadece bilgi güncelleştirmek için, “Format” komutu bilgi formatlamak için, “Out” ise komut çıktısı almak için kullanılır.

Windows PowerShell’de kullanılan komutların ve parametrelerin büyük küçük harf duyarlılığı yoktur.

Kullanımı

Örneğin; Get-Process komutu (cmdlets) çalışan uygulamaların bir listesini vermektedir.

Stop-Process komutu çalışan bir uygulamayı durdurmak için kullanılır.

Aynı şekilde tanımlanmış Get-Service ve Stop-Service komutları servisleri listeler ve durdurur.

Stop-service komutu ile bir servisi durdurup, start-services komutu ile bir servisi başlatabilirsiniz.

Komutların bu şekilde benzer yapılarda tanımlanmış olması komutları öğrenmeyi kolaylaştıracaktır.

Get-Command komutuyla kullanılabilir cmdlets komutlarının listesini alabilirsiniz.

Get-Command Verb Get komutuyla Get ile başlayan komutların bir listesini alabilirsiniz.

Örneğin, cmdlet’te Get-Date komutunu deneyelim :

Get-Command ekranında üç sütun vardır :

CommandType (Komut tipi)            Name (İsmi)              Define (Tanımı)

Cmdet’leri listelerken, define sütunu cdmletin söz dizimini gösterir. Söz diziminde birkaç sözcüğün atılması verinin kesildiğini gösterir. Get-Command cmdlet komut aldığı gibi aynı zamanda ve Windows Powershell’deki aliases (takma isimlere), fonksiyonlara ve kullanılabilir hazır dosyalara komut verir.

Aşağıdaki komut , komut elde edebilmek için isim parametrelerinin kullanılarak Windows PowerShell’de kullanılabilen hazır dosyaları listeler.

PS> get-command *.vbs

Name sütunu script dosyalarını listelerken, definition sütunu script dosyalarına ulaşmak için izlenmesi gereken yolu gösterir.

Get-Eventlog komutu ile logları görüntüleyebilirsiniz.

Get-Alias komutu ile tanımlı alias’ları görüntüleyebilirsiniz. 

 

Get-ComputerRestorePoint ile sisteminizdeki geri yükleme noktalarını görüntüleyebilirsiniz.

Basit Get- cmdetler’le ilgili bir sorun yaşamazsak, Get- Wmiobject gibi farklı cdmlet komutlarını da inceleyebiliriz.. Bu cdmlet gayet kullanışlıdır çünkü size diğer bilgisayarlardaki unsurları inceleme ve değiştirme fırsatı verir.

Örneğin : Aşağıdaki komut, server01 adlı bilgisayarın BIOS’u hakkında bilgi toplar :
get-wmiobject win32_bios -computername teknik

get-wmiobject -class Win32_ComputerSystem

Cdmlet ile ilgili yardım almak istersek aşağıdaki satırı kullanmamız yeterli olacaktır.:
get-help -detailed

Örneğin Event ile ilgili yardım bilgilerine ulaşmak için
get-help Event -detailed

Get-help komutunu kullanarak , PowerShell üzerinde kullanılabilecek olan parametrelere ve bu parametrelerin kullanım şekillerine ilişkin yardım alabiliriz. Get-Help komutu, Windows PowerShell’de kavramsal başlıkları ve cmdlet’ler hakkında bilgileri ayrıntılı bir şekilde görüntülemeyi sağlar.
Parametre özellikleri içeren bir cmdlet hakkında ayrıntılı bilgi alabilmek ve örnekleri görüntülüyebilmek için Get-Help komutunun detailed, full, examples, parameter parametrelerinden herhangi birini kullanabiliriz.

Örneğin : get-help get-childitem –examples

Bir makalemizin daha sonuna geldik. Bir sonraki makalemizde PowerShell ile Windows programlarını kullanma ve scripting konularına değineceğim. Herkese iyi çalışmalar.

PowerShell Alias Kullanımı

21 Tem
2009

PowerShell nedir ve niçin kullanırız, sistem gereksinimlerimiz nelerdir gibi konuları anlattığımız ilk makalenin ardından PowerShell ile ilgili ikinci makalemizde Alias kullanımından bahsedeceğim.

Windows PowerShell’e  kolay adapte olmak için alışkın olduğumuz cmdlets komutları için alias ‘lar (takma isimler)   tanımlanmıştır.

 Aynı şekilde programları çalıştırmak içinde alias’lar yaratabiliriz.

 Örneğin; Get-ChildItem komutu için gchi takma ismini atamak istiyorsak aşağıdaki satırı çalıştırmalıyız:

set-alias gchi get-childitem 

Örneğin; Hesap makinesini çalıştırmak için hm takma ismini yaratmak isteyelim:

set-alias hm c:\windows\system32\calculator 

NOT: Not defteri programı sizin sisteminizde farklı bir sürücüde olabilir.

 Veri.txt dosyasını Not Defteri’yle açmak için PowerShell’de aşağıdaki komut girilir:

notepad veri.txt

Tüm PowerShell komutları için takma isim (alias) kullanılabilir. Bir komuta atanmış alias’ları görmek için aşağıdaki satır girilir:

get-alias | where-object {$_.definition -eq “komut_adı“}

Örneğin: Get-ChildItem komutu için oluşturulmuş alias’ları görüntülemek için;

get-alias | where-object {$_.definition -eq ” Get-ChildItem “} 

İlk satırdaki komut aracılığıyla get-child-item için bir alias tanımlaması yaptık ikinci satırdaki komut aracılığı ile de get-child-item için tanımlanmış alias’ları görüntüledik.

Alias Silme

Bir Alias silmek için alias’lar  arasından cdmlet silme aygıt sürücüsünü kullanılır.

Örneğin;  Biraz önce oluşturduğumuz  ” gchi” takma ismini kaldırmak için remove-item alias   ( takma isim) :gchi 

İlk satırdaki komut aracılığıyla get-child-item için tanımlamış olduğumuz alias’ı silmek için gereken komutu girdik ve ikinci satırdaki komut aracılığı ile de get-child-item için tanımlanmış alias’ları görüntüledik.

Tanımlı takma isimler ve karşılık geldikleri cmdlets komutu ve görevleri ile ilgili birkaç örnek; 

Alias Kullanımına İlişkin Örnekler

Örnek : get komutu ile kullanabileceğim parametreler için tanımlanmış olan alias’lardan g ve s ile başlayanları listelemek;

get-alias -name g*, s* -exclude get-*

Örnek : Sadece okunabilir alias’ları görüntüleme

get-alias | where-object {$_.Options -match “ReadOnly”}

Powershell ile ilgili makalelerimin ikincisi olan PoweShell’de Alias Kullanımını burada noktalıyorum. Yararlı olması dileğiyle.

Windows PowerShell Nedir?

20 Tem
2009

Bu yazımızda uzun süre önce hazırladığım ama bir türlü düzenleyip siteye koyamadığım powershell’den bahsedeceğim. Powershell ile ilgili anlatacaklarımı genel hatlarıyla dört başlıkta toplayacağım. İlk makalemiz powershell nedir, niye kullanmalıyız ve powershell için sistem gereksinimleri gibi konuları içerecektir. İkinci makalemizin konusu powershell’de alias kullanımı, üçüncü makalemizin konusu cmdlet kullanımı, dördüncü ve son makalemizin konusu ise scripting ve windows programlarının kullanımı olacaktır. Daha fazla uzatmadan powershell nedir ile başlamak istiyorum.

Windows PowerShell, Microsoft’un BT uzmanlarına yardımcı olmak ve verimliliği arttırmak için geliştirdiği bir komut satırı aracıdır. Yönetimsel kullanım için geliştirilen bu betik  dili 130′dan fazla komut  içerir. Bu komutlar cmdlet olarak adlandırılır.

Komut satırından özel komutlar ve programlama (scripting) olanakları sunan shell ortamı genellikle tipik yönetim işleri için kullanılabilecek bir alternatiftir. Örneğin servislerin yönetimi, Active Directory nesnelerinin yaratılması gibi…

Windows Powershell, Windows XP, Windows Vista, Windows Server 2003 ve Windows Server 2008 tarafından desteklenmektedir.

PowerShell’le komut satırı programları çalıştırılabilir ve Not Defteri  gibi GUI arabirimine sahip programlar başlatılabilir, tabii ki bunun için programların PATH’lerinin bir dizinde bulunması gereklidir. PowerShell’le çalışılırken aslında .NET nesneleriyle çalışılmaktadır. Örneğin PowerShell’le bir servis çağrıldığında aslında o servisi temsil eden nesne çağrılmış olur. Aynı zamanda o servis ile ilgili bilgiler görülmek istendiğinde servise ait nesnenin özellikleri görülmüş olur.

Windows PowerShell’in tutarlılığı en önemli özelliğidir. Örneğin,bir komut girdisi başka bir komutun çıktısı olmaktadır, böylece tek bir komut içerisinde gerekli bağlayıcıları kullanarak birden fazla yönetimsel  işlemi gerçekleştirebiliriz. Her komut için değişik sıralama yordamlarını öğrenmemize gerek yoktur. PowerShell, arayüzlerin tutarlı olabilmesi için komutları güçlendiren ve ana özellikleri sağlayan bir framework sunmaktadır.

Yeni Bir Betik Dili

Windows PowerShell var olan diğer diller yerine aşağıdaki sebeplerden dolayı kendine ait olan dili kullanır.

  • Windows PowerShell yazılı metinleri işlemez bunun yerine .NET platformuna dayalı nesneleri işler.
  • Windows Powershell script dili tutarlı bir ortam sağlamak için cmdlets kullanır.
  • PowerShell, basit işlemleri daha karmaşık hale getirmeden, karmaşık görevleri desteklemek için kullanılan bir dildir.
  • PowerShell üzerinde daha önceden kullandığımız yazılı metin araçlarını kullanmaya devam edebiliriz.
  • Kullandığımız dil C# de olduğu gibi .Net programlarında kullanıldığı gibi daha yüksek seviyede olmalıdır.
  • PowerShell,bir çok Windows Server uygulamasında çalışmaktadır. Exchange Server 2007, System Center Operations Manager 2007, System Center Data Protection Manager V2 ve Sistem Merkezi Virtual Machine Manager gibi ürünlerle de entegre hale gelmiştir.

Windows PowerShell Kurulum Gereksinimleri

PowerShell kurulumu için donanımsal açıdan özel bir  gereksinim’e ihtiyaç yoktur. Yazılımsal gereksinimleri ise aşağıdaki gibidir: 

  • Microsoft .Net Framework 2.0 veya 3.0
  • Windows Server 2003 Service Pack 1 veya Service Pack 2
  • Windows Server 2008 (İsteğe Bağlı)
  • Windows Xp Service Pack 2
  • Windows Vista
  • x86,x64 ve Itanium tabanlı mimariler

Windows Powershell’i indirmek için;

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

Otomatik Tamamlama

PowerShell’in sunduğu kullanım kolaylıklarından bir tanesi de otomatik tamamlama özelliğidir. Tab tuşuna basarak  yalnızca yazdığımız komutları değil bunların argümanlarını da tamamlayabilmektedir. Argüman tamamlama olayı aslında komutların .NET platformu tarafından desteklenmesinden ve bu komutların daha önceden tanımlanmış olmasından kaynaklanmaktadır.

Bazı eksikleri bulunan bu özellik ilerleyen versiyonlarda geliştirilecektir.

Pipeline

Nesne kullanımının avantajlarından birisi de pipeline (boru) komutundan sayesinde daha kolay kullanılabilmesidir. Yani bir komutun çıktısı başka bir komutun girdisi olmaktadır. İletişim çoğunlukla çıktıyı bir format’dan diğerine döndürmek, sütun başlıklarını silmek ve dizgi manipülasyonu istemektedir.

Windows PowerShell, metinlerinden çok nesnelere dayanan yeni bir  model sağlamaktadır. Objeleri çalıştıran cmdlet’ler herhangi bir dönüştürme olmaksızın metodlar ve özellikler üzerinde doğrudan bir rol oynamaktadır. Tabi ki bu özellikler cmdlet’e ait olanlardır. Kullanıcılar çıktı’daki verinin durumunu hesaplamak yerine nesnelerin metodlarına ve özelliklerine değinebilir.

Aşağıdaki örnekte cmd’den bilindiği üzere Ipconfig komutunun çıktısı gösterecektir.

 

 Pipeline bir cmdlet ile veri elde ederken, diğer verileri filtrelemek için kullanılır. Filtreleme yapan Cmdlet veriyi birinci Cmdlet’e geçirir. Böylece istenilen sonuçlar alınmış olur.

 Örnek: get-process | sort-object id

 

İlk komutumuzla get-process komunu çalıştırdık, ardından bu bilginin sort-object komutu ile sıralanmasını sağladık.

 

İkinci komutumuzla ise service listesini alıp bir dosyaya aktardık.

 

Böylece powershell ile ilgili ilk makalemizin sonuna geldik. Herkese yararlı olmasını umarım.