Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bazen PowerShell kullanıma hazır olmadan önce sorunlarla karşılaşabilir. Özellikle PowerShell'i kullanarak yardım almak istediğinizde başlangıç sorunlarını gidermek zor olabilir. Başlatmanın üç ana aşaması vardır:
- İşlem oluşturma
- PowerShell SessionState başlatma
- Profil işleme
En yaygın sorunlar şunlardır:
- Uzun başlangıç süresi veya yavaş performans
- Errors
- Çökme
Başlangıç dizisinin adımları
PowerShell'in başlatma sırasında uyguladığı adımları anlamak yararlı olur. Bu şekilde sorunun oluştuğu yeri daraltabilirsiniz.
1. Adım: İşlem oluşturma
İşlem oluşturmanın birkaç adımı vardır:
Ana Bilgisayar Penceresi Oluşturma
Windows'da Konak, Windows Terminali, Windows Konsol Konağı, Visual Studio Code veya başka bir barındırma uygulaması olabilir. Burada oluşan sorunlar genellikle PowerShell ile ilgisizdir, ancak son derece nadirdir.
İşlem ana bilgisayar sürecini başlat
Burada oluşan sorunlar genellikle bozuk bir yürütülebilir dosyadan veya işletim sistemindeki bir sorundan kaynaklanır.
.NET'i hazırlama
PowerShell, .NET tabanlıdır ve tam olarak yüklenmesi gerekir. Hangi PowerShell sürümünü başlatmaya çalıştığınıza bağlı olarak, Windows PowerShell 5.1 ile windows ile tümleşik .NET Framework'ün tamamını veya PowerShell 7'de bulunan daha yeni .NET'i alırsınız.
PowerShell'in ilk kez başlatılması sırasında, PowerShell ve .NET iyileştirme görevlerini çalıştırır. Bu iyileştirme görevi, yükleme, yükseltme sonrasında ilk başlatma sırasında veya önbellek boşsa yalnızca bir kez çalıştırılır. Bu ilk iyileştirme sırasında başlatma daha uzun sürer. İyileştirme sırasında hata oluşması bozuk bir önbellek oluşturabilir. Bozuk bir PowerShell önbelleği, komut bulma ve modül yükleme ile ilgili sorunlara neden olabilir.
2. Adım: PowerShell SessionState başlatma
PowerShell ikili dosyalarını yüklemek ve altyapıyı başlatmak, PowerShell yapılandırmasını ve önbelleğe alınan bazı verileri işlemeyi içerir.
- İşlem yapılandırma dosyaları:
powershell.config.jsonve JEA ve diğer uzaktan iletişim senaryoları tarafından kullanılan PSSession yapılandırma dosyaları. Bu dosyalar dil modunu, kullanılabilir komutları ve modülleri ve bazı ilke ayarlarını etkileyebilecek ayarlar içerebilir. - Grup İlkeleri ve Windows Güvenlik ilkelerini denetleyin. Windows Grup İlkeleri içindeki
powershell.config.jsonayarları geçersiz kılabilir. Güvenlik İlkeleri, WDAC (Windows Defender Uygulama Denetimi) gibi özellikleri etkinleştirebilir ve bu da kullanılabilir dil modunu kısıtlayabilir. - Varsayılan modülleri (Microsoft.PowerShell.Core ve PSReadLine) ve PSSession yapılandırmasında tanımlanan tüm modülleri ve derlemeleri yükleyin.
PowerShell güvenlik özellikleri hakkında daha fazla bilgi için aşağıdaki makalelere bakın:
3. Adım: Profil işleme
Son olarak, PowerShell kullanılabilir profil dosyalarını çalıştırır. Profil betikleri aşağıdaki sırayla çalıştırılır:
- Tüm Konaklar Tüm Kullanıcılar
- Geçerli Konak - Tüm Kullanıcılar
- Tüm Sunucular Mevcut Kullanıcı
- Geçerli Host Geçerli Kullanıcı
Uyarı
Profil betikleri uzak oturumlar için çalıştırılamaz.
Profiller hakkında daha fazla bilgi için bkz. about_Profiles.
Sorunun kapsamını daraltma
Değişkenleri kaldırmak ve sorunun oluştuğu belirli kapsamı daraltmak yararlı olur. Ortadan kaldırılması en kolay değişken profildir. Profil genellikle özellikle kullanıcıya özgü profil betiklerinde özel kod içerir.
PowerShell'i profili devre dışı bırakılmış olarak çalıştırmayı deneyin:
# PS 5.1:
powershell -NoProfile
# PS 7.*:
pwsh -NoProfile
Ardından sorunun sürüme özgü olup olmadığını görmeniz gerekir. Profilinizi hem Windows PowerShell 5.1 hem de PowerShell 7'de çalıştırmayı deneyin. Windows PowerShell ve PowerShell 7, profili farklı konumlarda depolar. Profiliniz her iki sürüm için de aynı olmayabilir. Farkları anlamak için dosyaları karşılaştırın. PowerShell profilinizi Windows PowerShell 5.1'de yüklemeyi deneyebilirsiniz. Ancak bazı PowerShell 7 komutlarının ve modüllerinin Windows PowerShell 5.1 ile uyumlu olmadığını unutmayın.
Var olan profilinizin üzerine yazmadan PowerShell 7 profilinizi Windows PowerShell 5.1'de test edebilirsiniz.
Profil devre dışı bırakıldığında Windows PowerShell 5.1'i başlatın.
PowerShell 7 profil dosyanızı Windows PowerShell 5.1 oturumuna manuel olarak dot-source yöntemiyle ekleyin.
. $env:USERPROFILE\Documents\PowerShell\Microsoft.PowerShell_profile.ps1Sorunun oluşup oluşmadığını gözlemleyin.
Sorun devam ederse, sorunun profilin dışında bir çevre sorunu olduğunu bilirsiniz.
Profili farklı bir cihazda çalıştırmayı deneyin. Profil başka bir cihazda düzgün çalışıyorsa sorunun özgün cihazınıza özgü olduğunu bilirsiniz.
Yaygın çevresel sorunları giderme
Başlatma sırasında kilitlenmeler
PowerShell konsolu, özellikle başlatma sürecinin başında ve geri bildirim olmadan kilitleniyorsa işlem önbelleğiniz bozulmuş olabilir. Bu, önbelleği temizleyerek çözebileceğiniz nadir bir durumdur. Temizlenebilir iki önbellek konumu vardır:
- Kullanıcı Önbelleği:
$env:LOCALAPPDATA\Microsoft\Windows\Caches - Sistem Önbelleği:
$env:windir\System32\Config\SystemProfile\AppData\Local\Microsoft\Windows\Caches
Önce kullanıcı önbelleği klasörünün içeriğini silin, ardından PowerShell'i yeniden başlatmayı deneyin. Sorun devam ederse sistem önbelleğinin içeriğini silin ve yeniden deneyin.
PowerShell çözümleme önbelleğini silmeniz de gerekebilir. Önbellek dosyalarını aşağıdaki konumlarda bulabilirsiniz:
- Windows PowerShell:
$env:windir\System32\Config\SystemProfile\AppData\Local\Microsoft\Windows\PowerShell - PowerShell 7:
$env:LOCALAPPDATA\Microsoft\PowerShell
Yalnızca aşağıdaki dosya desenlerini silin:
ModuleAnalysisCache-*StartupProfileData-*
Önbelleğe alınan veriler, PowerShell'i bir sonraki başlatışınızda yeniden oluşturulur.
Sorun Windows PowerShell 5.1'de devam ederse.NET Framework yüklemesini onarmanız gerekebilir. Daha fazla bilgi için bkz. .NET Framework'leri onarma.
Yaygın profil sorunlarını giderme
Bu bölümde, PowerShell başlatma sırasında oluşabilecek bazı yaygın sorunlar ve bunların nasıl giderilir açıklanmaktadır.
Profil çalıştırılması çok uzun sürüyor
Önce "çok uzun" olanı tanımlamanız gerekir. PowerShell yalnızca betiklerin ne yapması gerektiğini söyler. Tüm profil yollarını denetleyin. Birden çok profil betiği çalıştırılıyor olabilir. Yapmaya çalıştığını anlamak için kodu gözden geçirin.
Gecikmenin nerede gerçekleştiğini belirleme
AllUsers kapsamı için profil betikleri varsa, bu dosyaları düzenleyemeyebilirsiniz. Bu dosyaları gözden geçirmek için sistem yöneticinizle birlikte çalışın. CurrentUser kapsam profili betikleri için bu dosyaları düzenleyerek gecikmenin nerede olduğunu bulmanıza yardımcı olacak zamanlama iletileri ekleyin. Örneğin, profil betiğinizin çeşitli noktalarına aşağıdaki satırı ekleyebilirsiniz.
Write-Host "$(Get-Date -Format 'HH:mm:ss.fff') | Profile: Step X"Bağımlılıkları azaltma
Profilinizi yürütmek için yüklenmesi gereken modül sayısını azaltın. Profil çalıştırıldıktan sonra başlatma sırasında yüklenen modülleri görmek için
Get-Moduleçalıştırın. PowerShell varsayılan olarak Microsoft.PowerShell.Core ve PSReadLine modüllerini yükler. Ek modüllerden herhangi biri profil betikleriniz tarafından yüklendi.Modüller, bu modüllerde tanımlanan komutlar kullanılarak
Import-Moduleveya örtük olarak kullanılarak açıkça yüklenebilir. Başlatma sırasında bir komuta mı yoksa modüle mi ihtiyacınız olduğunu düşünün.Modülleri yeniden yönlendirilen bir klasöre yüklemekten kaçının
Windows'da birçok durumda klasörünüz
Documentsbir ağ dosya paylaşımına veya OneDrive'a yönlendirilebilir. Özellikle ağ tıkanmışsa veya sunucu ağır yük altındaysa ağ dosyası erişimi yavaş olabilir. OneDrive'ın nasıl yapılandırıldığına bağlı olarak, profil yürütme sırasında gecikmelere neden olabilir veya hatalara neden olabilir.Bu sorunu hafifletmek için birkaç seçeneğiniz vardır:
- Klasörünüzü
Documentsyeniden yönlendirmeyin, ancak bu istenmeyebilir - OneDrive'daki klasörünüzü
Modulesher zaman diskte tutulacak şekilde yapılandırın. Bu, hataları ve gecikmeli yükleme sürelerini önler. - Kullanıcı profili klasörünün dışındaki AllUsers kapsamına modülleri yükleyin.
- Klasörünüzü
Gerçek performansı ölçme
Profilinizin ne kadar süre çalıştığını bilmiyorsanız, onun çok uzun olup olmadığını belirleyemezsiniz. Cmdlet bir komutun
Measure-Commandveya betik bloğunun ne kadar süreyle çalıştığını gösterebilir.PowerShell Geliştirici Yöneticisi Steve Lee'nin profilinizin performansını ölçmeyi açıklayan bir blog gönderisi var. Performans için temel oluşturma, ayrıntılı zamanlama bilgilerini alma ve profilinizi iyileştirme yollarını içerir. Bkz: $Profilinizi Optimizasyonu.
PowerShell 7 yalıtılmış bir ağda yavaş başlıyor
Bu senaryoda, Windows bilgisayarınız İnternet'e bağlı olmayan bir ağdadır. Etkileşimli PowerShell oturumları için PowerShell, PSReadLine modülünü otomatik olarak yükler. PSReadLine imzalı bir modüldür. PowerShell modülün dijital imzasını doğrulamalıdır. Bu doğrulama bağlantısız bir ortamda gecikmelere neden olabilir. Bu teoriyi test etmek için PowerShell 7'yi etkileşimli olmayan modda başlatın:
pwsh.exe -noninteractive
PowerShell etkileşimli olmayan modda hızlı bir şekilde başlarsa, sorunun nedeni büyük olasılıkla Sertifika İptal Listesi (CRL) denetimleridir. Dijital imzayı doğrulama işleminin bir parçası olarak. .NET çalışma zamanı, imzalama sertifikasının hala geçerli olduğundan emin olmak için CRL'yi denetler. Bağlantısı kesilmiş bir ortamda, bilgisayarınız İnternet'te CRL'ye erişemez. CRL denetimleri için varsayılan zaman aşımı 15 saniyedir. Bu, PowerShell imzalı bir modülü her yükleyişinde zaman aşımının 15 saniyeye kadar sürebileceği anlamına gelir.
Bu sorun için üç olası geçici çözüm vardır:
Güvenlik duvarı veya ara sunucu muafiyeti
CRL denetimi için doğrudan İnternet erişimine izin vermek sorunu önler. İnternet erişimine erişimi denetleyebileceğiniz bir ortamda, güvenlik duvarınızı veya ara sunucunuzu CRL Url'lerine erişime izin verecek şekilde yapılandırabilirsiniz. Bu, en az etkiye sahip en kolay çözümdür. Güvenlik duvarı günlükleri, PowerShell'in ulaşmaya çalıştığınız Url'yi göstermelidir.
CRL Zaman Aşımını Azalt
CRL arama zaman aşımını azaltmak mümkündür, ancak bunu yapmak, diğer aramaların belirtilen sürede tamamlanamama riskini taşır ve başarısız olabilir. Zaman aşımını değiştirme hakkında ayrıntılı bilgi için bkz. Ağ Alma ve Yol Doğrulamayı Yönetme.
CRL denetimini kaldırma
CRL denetim ayarları Grup İlkesi tarafından yönetilir. Daha fazla bilgi için bkz . Güvenilen Yayımcıları Yönetme.
Uyarı
CRL denetimini devre dışı bırakmak mümkündür ancak önerilmez. CRL denetimini devre dışı bırakmak, güvenliği aşılmış sertifikaları iptal etmenizi engeller.
HATA: Farklı bir dil modunda tanımlandığı için bu komut dot-source yapılamıyor.
PowerShell, ConstrainedLanguage modunda otomatik olarak çalıştırılarak AppLocker ve Windows Defender Uygulama Denetimi (WDAC) gibi uygulama denetim sistemleriyle çalışır. ConstrainedLanguage modu, tehlikeli olabilecek bazı özellikleri kısıtlar. Ancak, bazı komutları veya özellikleri kullanmak için FullLanguage moduna ihtiyacınız olduğu zamanlar vardır. Betikler, ilke tarafından güvenildiğinde FullLanguage modunda çalıştırılabilir. Güven, dosya imzalama veya AppLocker veya WDAC'de yapılandırılan diğer ilke mekanizmaları aracılığıyla gösterilebilir.
Uygulama denetimi altında yönetilen bir PowerShell oturumu başlattığınızda aşağıdaki hatayı alırsınız:
Cannot dot-source this command because it was defined in a different language mode. To invoke this
command without importing its contents, omit the '.' operator.
Uygulama denetimi altında PowerShell , ConstrainedLanguage modunda çalışıyor. Bu hata, ve profil betiğiniz muaf tutulduğunda veya FullLanguage modunda çalıştırılacak şekilde imzalandığında oluşur. PowerShell ConstrainedLanguage modunda çalışırken , FullLanguage modunda çalışması için güvenilir noktalı kaynak kodu olamaz.
Sorunu çözmek için, profil betiğinden muafiyeti veya imzayı kaldırmanız gerekir. Profiliniz sırasında FullLanguage modunda çalışması gereken bir koda ihtiyacınız varsa, bunu muaf tutulan veya imzalanmış başka bir betik dosyasına taşıyın. Profilinizden o betik dosyasını çağırın (dot-source etmeyin).
Bu sorun hakkında daha fazla bilgi için bkz. PowerShell Kısıtlanmış Dil modu ve Dot-Source İşleci.
Daha fazla bilgi
PowerShell