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.
Invoke-Expression
Cmdlet yalnızca son çare olarak kullanılmalıdır. Çoğu senaryoda daha güvenli ve daha sağlam alternatifler mevcuttur. Stack Overflow gibi forumlar kötüye kullanım örnekleriyle Invoke-Expression
doludur. PsScriptAnalyzer'ın bunun için bir kuralı olduğunu da unutmayın. Daha fazla bilgi için bkz . AvoidUsingInvokeExpression.
Güvenlik etkilerini dikkatle göz önünde bulundurun. Kullanıcı girişi gibi güvenilmeyen bir kaynaktan gelen bir dize doğrudan 'a Invoke-Expression
geçirildiğinde, rastgele komutlar yürütülebilir. Her zaman önce farklı, daha sağlam ve güvenli bir çözüm düşünün.
Genel senaryolar
Aşağıdaki kullanım senaryolarını göz önünde bulundurun:
PowerShell'i bir şeyi doğal bir şekilde yürütmek için yeniden yönlendirmek daha kolaydır. Örneğin:
Get-Content ./file.ps1 | Invoke-Expression
Bu durumlar önemsiz bir şekilde önlenebilir. Betik veya kod dosya veya AST formunda zaten var, bu nedenle parametrelerle bir betik yazmalı ve dizede kullanmak
Invoke-Expression
yerine doğrudan çağırmalısınız.Güvenilir bir kaynaktan betik çalıştırma. Örneğin, yükleme betiğini PowerShell deposundan çalıştırma:
Invoke-WebRequest https://aka.ms/install-powershell.ps1 | Invoke-Expression
Bunu yalnızca etkileşimli olarak kullanmanız gerekir. Ve bu, hayatı daha basit hale getirse de, bu uygulama önerilmez.
Ayrıştırma hataları için test. PowerShell ekibi, ayrıştırma zamanı hatasını çalışma zamanı hatasına dönüştürmenin tek yolu olduğundan kaynak kodundaki
Invoke-Expression
ayrıştırma hatalarını sınar.
Sonuç
Diğer çoğu betik dilinin bir dizeyi kod olarak değerlendirmenin bir yolu vardır ve yorumlanmış bir dil olarak PowerShell'in kendisini dinamik olarak çalıştırmanın bir yolu olmalıdır. Ancak üretim ortamında kullanmak Invoke-Expression
için iyi bir neden yoktur.
Başvurular
- Stack Overflow tartışması - Invoke-Expression hangi senaryoda kullanılmak üzere tasarlanmıştır?
- PowerShell Blog gönderisi - Invoke-Expression'ın Zararlı Olduğu Düşünülüyor
PowerShell