PowerShell ISE neden komut dosyası değişkenlerini komut dosyası kapsamına ayırmıyor?


12

PowerShell'de, kapsam oluşturma işleminin komut dosyalarındaki nesneleri (değişkenler, takma adlar, işlevler, vb.) Genel ortamı etkilememesi gerekir. Bu komut satırında iyi çalışıyor gibi görünüyor, ancak İMKB'de çalışmıyor.

İşte konsolda bir gösteri. $xGlobal kapsamda tanımlanmadığını kontrol ediyorum , içeriğini gösterip ScopeTest.ps1çalıştırıyorum ve son olarak $xtekrar tanımlanıp tanımlanmadığını kontrol ediyorum . Beklendiği gibi $x, yalnızca komut dosyası kapsamında oluşturulur ve kullanılır ve komut dosyası sona erdikten sonra genel ortamda devam etmez.

resim açıklamasını buraya girin

İMKB'de, komut dosyası konsol penceresi kullanılarak çağrılırsa, bu işe yaramaktadır.

resim açıklamasını buraya girin

Ancak, aslında "Komut Dosyasını Çalıştır" düğmesini veya F5'i kullanırsam, komut dosyasındaki değişkenler tamamlandıktan sonra da devam eder.

resim açıklamasını buraya girin

Komut dosyası temiz bir ortamdan başlayacağını varsayarsa, bu, yazma ve sorun giderme komut dosyalarını biraz zorlaştırabilir (örn: Komut dosyasında ayarlanan değişkenler zaten mevcut olmamalıdır.). İMKB neden böyle davranıyor?

Bir cevap bu soru söz sadece hafifçe konu üzerine dokunuşlar, "nokta-kaynak", ama burada daha kapsamlı bir açıklama umuyorum. Ayrıca, betiğin neden İMKB'de konsoldan farklı çalıştığına dair belgeler varsa, bir referans da iyi olur.

Yanıtlar:


9

Senaryo örneklerinizde değişkenler oluşturdunuz ve senaryonuzun sonunda onları yok etmediniz. ISE, çalıştır'ı tıklattığınızda komut dosyasını yükleyen ve çalıştıran canlı bir powershell örneği oluşturur. Aradaki fark, entegre kabuğun betiğe devam edebilmesidir. Bu, ortamdaki hataları ayıklamak ve hareket halindeyken komut dosyaları oluşturmak için idealdir. Bu şekilde, bir sonraki kod satırının çalıştığından emin olmak için komut dosyanızı tekrar tekrar çalıştırmanız gerekmez (bunun ideal olmayacağı durumlar vardır). Kabuğa yazarsınız ve çalışırsa, komut dosyası bölümüne eklersiniz.

Bu davranış belki de en iyi burada açıklanmıştır: http://technet.microsoft.com/en-us/library/dd819480.aspx

İlgili Alıntı:

İMKB'deki tüm bölmeler her zaman aynı kapsamdadır.

Komut dosyanız tamamlandıktan sonra değişkenlerinizin kabukta yaşamasını istemiyorsanız, Remove-Variableonları kullanmalısınız.

Örneğin:

Remove-Variable x

Dosya-> Yeni Powershell Sekmesi'ni tıklatarak ISE'ye "temiz" bir powershell örneği ekleyebilirsiniz


2

İMKB'de Powershell aslında betiği kabuğa döküyor ve çalıştırıyor. Kabukta yazmış gibi, sonra da yürüttün. Değişken o oturum için kullanılabilir. Diğer farklılıkları görmek için bu MSDN yayınına göz atın .


Bağlantılı gönderide bu davranışa yönelik hiçbir şey görmüyorum.
Iszi

0

dolayısıyla İMKB Küresel Kapsamdadır. İMKB'de çalışırken oluşturulan tüm değişkenleri kaldırmazsanız, komut dosyası çalıştıktan sonra tüm değişkenler kullanılabilir olacaktır. Komut dosyasını oluşturmak için ISE'yi kullandığımda her zaman farklı bir PowerShell konsolu açık olarak test edeceğim. Bu, her şeyin istediğim gibi çalıştığından emin olmamı sağlıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.