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.
Kısa açıklama
PowerShell'de kapsam kavramını açıklar ve öğelerin kapsamını ayarlamayı ve değiştirmeyi gösterir.
Uzun açıklama
PowerShell, okunabilecekleri ve değiştirilebileceği yerleri sınırlayarak değişkenlere, diğer adlara, işlevlere ve PowerShell sürücülerine (PSDrive) erişimi korur. PowerShell, diğer kapsamlardaki öğelerde yanlışlıkla değişiklik yapmadığınızdan emin olmak için kapsam kurallarını kullanır.
Kapsam kuralları
PowerShell'i başlattığınızda, ana bilgisayar (pwsh.exe) bir PowerShell çalışma alanı oluşturur.
Ana bilgisayar işlemleri birden çok çalışma alanına sahip olabilir. Her çalışma alanının kendi oturum durumu ve kapsam konteynerleri vardır. Oturum durumu ve kapsamlara runspace örnekleri arasında erişilemiyor.
Temel kapsam kuralları şunlardır:
- Kapsamlar iç içe geçebilir. Dış kapsam, üst kapsam olarak adlandırılır. İç içe yerleştirilmiş kapsamlar, o ana ait alt kapsamlardır.
- Açıkça özel hale getirmediğiniz sürece, öğe oluşturulduğu kapsamda ve alt kapsamlarda görünür.
- Kapsam değiştiricileri kullanarak, geçerli kapsamın dışındaki bir kapsam için değişkenleri, diğer adları, işlevleri ve PowerShell sürücülerini bildirebilirsiniz.
- Kapsam içinde oluşturduğunuz bir öğe, açıkça farklı bir kapsam belirtmediğiniz sürece yalnızca oluşturulduğu kapsamda değiştirilebilir.
- Bir çalışma alanında çalışan kod bir öğeye başvurduğunda PowerShell, geçerli kapsamla başlayıp her üst kapsamda ilerleyerek kapsam hiyerarşisinde arama gerçekleştirir.
- Öğe bulunamazsa, geçerli kapsamda yeni bir öğe oluşturulur.
- Eşleşme bulunursa, öğenin değeri bulunduğu kapsamdan geri alınır.
- Değeri değiştirirseniz, değişiklik yalnızca geçerli kapsamı etkileyecek şekilde öğe geçerli kapsama kopyalanır.
- Adını farklı bir kapsamdaki bir öğeyle paylaşan bir öğeyi açıkça oluşturursanız, özgün öğe yeni öğe tarafından gizlenmiş olabilir, ancak geçersiz kılınmamış veya değiştirilmemiştir.
Üst ve alt kapsamlar
Yeni bir alt kapsam oluşturmak için bir betik veya fonksiyon çağırabilirsiniz. Çağrı kapsamı ana kapsama aittir. Çağrılan betik veya işlev, alt kapsamdır. Çağırdığınız işlevler veya betikler, kök kapsamı genel kapsam olan alt kapsamların hiyerarşisini oluşturarak diğer işlevleri çağırabilir.
Note
Bir modüldeki işlevler, çağrı kapsamının alt kapsamında çalışmaz. Modüllerin, modülün içeri aktarıldığı kapsama bağlı kendi oturum durumları vardır. Tüm modül kodu, kendi kök kapsamına sahip olan modüle özgü bir kapsam hiyerarşisinde çalışır. Daha fazla bilgi için bu makalenin Modülleri bölümüne bakın.
Alt bir kapsam oluşturulduğunda, AllScope seçeneğini içeren tüm diğer adlar ve değişkenler ile bazı otomatik değişkenler de dahil olur. Bu seçenek bu makalenin devamında ele alınmalıdır.
Öğeleri açıkça özel hale getirmediğiniz sürece, üst kapsamdaki öğeler alt kapsamda kullanılabilir. Bir alt kapsamda oluşturduğunuz veya değiştirdiğiniz öğeler, öğeleri oluştururken kapsamı açıkça belirtmediğiniz sürece üst kapsamı etkilemez.
Belirli bir kapsamdaki öğeleri bulmak için Get-Variable veya Get-AliasScope parametresini kullanın.
Örneğin, yerel kapsamdaki tüm değişkenleri almak için şunu yazın:
Get-Variable -Scope Local
Genel kapsamdaki tüm değişkenleri almak için şunu yazın:
Get-Variable -Scope Global
Bir değişkene, takma ada veya işlev başvuru yapıldığında PowerShell geçerli kapsamı arar. Öğe bulunamazsa, üst kapsam aranılır. Bu arama, kapsam içinde en üst seviyeye, yani global kapsama kadar tekrarlanır. Bir değişken üst kapsamda özelse, arama kapsam zincirinde devam eder. Örnek 4, kapsam aramasında özel değişkenin etkisini gösterir.
PowerShell kapsam adları
PowerShell, bu kapsama daha kolay erişim sağlamak için bazı kapsamların adlarını tanımlar. PowerShell aşağıdaki adlandırılmış kapsamları tanımlar:
- Genel: PowerShell başlatıldığında veya yeni bir oturum veya runspace oluşturduğunuzda geçerli olan kapsam. Otomatik değişkenler ve tercih değişkenleri gibi PowerShell başlatıldığında mevcut olan değişkenler ve işlevler genel kapsamda oluşturulur. PowerShell profillerinizdeki değişkenler, diğer adlar ve işlevler de genel kapsamda oluşturulur. Genel kapsam, bir çalışma alanı (runspace) içinde kök ana kapsamdır.
- Yerel: Geçerli kapsam. Yerel kapsam genel kapsam veya başka bir kapsam olabilir.
- Betik Dosyası: Betik dosyası çalışırken oluşturulan kapsam. Betikteki komutlar betik kapsamında çalıştırılır. Betikteki komutlar için betik kapsamı yerel kapsamdır.
Kapsamları destekleyen cmdlet'ler için, kapsamlar bir kapsamın başka bir kapsamla olan görece konumunu belirten bir sayı ile ifade edilebilir. Kapsam 0 geçerli (yerel) kapsamı belirtir, kapsam 1 geçerli kapsamın üst öğesidir, kapsam 2 geçerli kapsamın üst öğesidir. Bu örüntü, kök kapsamına ulaşana kadar devam eder.
Kapsam değiştiricileri
Değişken, diğer ad veya işlev adı, aşağıdaki isteğe bağlı kapsam değiştiricilerinden herhangi birini içerebilir:
Global:- Adın Genel kapsamında mevcut olduğunu belirtir.Local:- Adın Yerel kapsamında mevcut olduğunu belirtir. Geçerli kapsam her zaman Yerel kapsamıdır. Kapsam değiştiricisiniLocal:kullandığınızda PowerShell üst kapsamlarda arama yapmaz. Öğe geçerli kapsamda varsa kullanılır. Öğe geçerli kapsamda yoksa, PowerShell geçerli kapsamda yeni bir öğe oluşturur.Private:- Özel adın yalnızca geçerli kapsamda görünür olduğunu belirtir.Script:- Adın Betik kapsamında mevcut olduğunu belirtir. Betik kapsamı, en yakın üst betik dosyasının kapsamı ya da yakın üst betik dosyası yoksa Genel olur.Using:- Uzak oturumlarda, arka plan işlerinde veya iş parçacığı işlerinde çalışırken başka bir kapsamda tanımlanan değişkenlere erişmek için kullanılır.Workflow:- Adın bir iş akışı içinde var olduğunu belirtir. Not: İş akışları PowerShell v6 ve üzeri sürümlerde desteklenmez.<variable-namespace>- PowerShell PSDrive sağlayıcısı tarafından oluşturulan değiştirici. Örneğin:Namespace Açıklama Alias:Geçerli kapsamda tanımlanan takma adlar Env:Geçerli kapsamda tanımlanan ortam değişkenleri Function:Geçerli kapsamda tanımlanan işlevler Variable:Geçerli kapsamda tanımlanan değişkenler
Betiklerin varsayılan kapsamı betik kapsamıdır. İşlevler ve diğer adlar için varsayılan kapsam, bir betikte tanımlanmış olsalar bile yerel kapsamdır.
Kapsam değiştiricileri kullanma
Yeni bir değişkenin, diğer adın veya işlevin kapsamını belirtmek için kapsam değiştirici kullanın.
Bir değişkendeki kapsam değiştiricinin söz dizimi şöyledir:
$[<scope-modifier>:]<name> = <value>
bir işlevdeki kapsam değiştiricinin söz dizimi şöyledir:
function [<scope-modifier>:]<name> {<function-body>}
Kapsam değiştirici kullanmayan aşağıdaki komut, geçerli veya yerel kapsamında bir değişken oluşturur:
$a = "one"
genel kapsamında aynı değişkeni oluşturmak için kapsam Global: değiştiricisini kullanın:
$Global:a = "one"
Get-Variable a | Format-List *
Görünürlük ve Seçenekleri özellik değerlerine dikkat edin.
Name : a
Description :
Value : one
Visibility : Public
Module :
ModuleName :
Options : None
Attributes : {}
Bunu bir özel değişkenle karşılaştırın:
$Private:pVar = 'Private variable'
Get-Variable pVar | Format-List *
Private: kapsam değiştiricisini kullanarak Seçenekleri özelliğini Privateolarak ayarlar.
Name : pVar
Description :
Value : Private variable
Visibility : Public
Module :
ModuleName :
Options : Private
Attributes : {}
betik kapsamında aynı değişkeni oluşturmak için Script: kapsam değiştiricisini kullanın:
$Script:a = "one"
İşlevlerle bir kapsam değiştirici de kullanabilirsiniz. Aşağıdaki işlev tanımı, genel kapsamında bir işlev oluşturur:
function Global:Hello {
Write-Host "Hello, World"
}
Farklı bir kapsamdaki bir değişkene başvurmak için kapsam değiştiricileri de kullanabilirsiniz.
Aşağıdaki komut, önce yerel kapsamda ve ardından genel kapsamda $test değişkenine başvurur:
$test
$Global:test
Using: kapsam değiştiricisi
kullanma, uzak bir komuttaki yerel değişkeni tanımlayan özel bir kapsam değiştiricidir. Değiştirici olmadan, PowerShell uzak komutlardaki değişkenlerin uzak oturumda tanımlanmasını bekler.
Using: kapsam değiştiricisi PowerShell 3.0'da kullanıma sunulmuştur.
Oturum dışında yürütülen herhangi bir betik veya komut için, çağıran oturum kapsamından değişken değerleri eklemek için Using: kapsam değiştiricisine ihtiyacınız vardır; böylece oturum dışı kod bunlara erişebilir.
Using: kapsam değiştiricisi aşağıdaki bağlamlarda desteklenir:
-
Invoke-Command, HostName, SSHConnection veya Oturumu parametreleri (uzak oturum) kullanılarak ile başlatılan uzaktan yürütülen komutlar -
Start-Jobile başlatılan arka plan işleri (işlem dışı oturum) -
Start-ThreadJobveyaForEach-Object -Parallelaracılığıyla başlatılan iş parçacığı (ayrı oturumda)
Bağlama bağlı olarak, gömülü değişken değerleri ya çağıranın kapsamındaki verilerin bağımsız kopyaları ya da bu verilere referanslardır. Uzaktan ve işlem dışı oturumlarda, bunlar daima bağımsız kopyalardır.
Daha fazla bilgi için bkz. about_Remote_Variables.
$Using: başvurusu yalnızca değişkenin değerine genişler. Çağıranın kapsamındaki bir değişkenin değerini değiştirmek istiyorsanız, değişkene doğrudan erişiminiz olmalıdır. Değişkenin PSVariable örneğini alarak bir değişkene başvuru oluşturabilirsiniz. Aşağıdaki örnekte, bir iş parçacığı işinde başvuru oluşturma ve değişiklik yapma işlemi gösterilmektedir.
$Count = 1
$refOfCount = Get-Variable Count
Start-ThreadJob {
($Using:refOfCount).Value = 2
} | Receive-Job -Wait -AutoRemoveJob
$Count
2
Note
Bu iş parçacığı güvenli bir işlem değildir. Değeri aynı anda birden çok iş parçacığından değiştirmeye çalışırsanız veri bozulmasına neden olabilirsiniz. Paylaşılan verileri korumak için thread güvenli veri türlerini veya senkronizasyon yapılarını kullanmanız gerekir. Daha fazla bilgi için bkz. koleksiyonlarıThread-Safe.
Değişken değerlerini serileştirme
Uzaktan yürütülen komutlar ve arka plan işleri işlem dışıdır. İşlem dışı oturumlarda, değişkenlerin değerlerini işlem sınırları boyunca kullanılabilir hale getirmek için XML tabanlı serileştirme ve seri durumdan çıkarma kullanılır. Serileştirme işlemi, nesneleri özgün nesne özelliklerini içeren ancak yöntemlerini içermeyen bir PSObject dönüştürür.
Sınırlı bir tür kümesi için seri durumdan çıkarma, nesneleri özgün türe geri döndürür. Yeniden doldurulan nesne, özgün nesne örneğinin bir kopyasıdır. Tür özelliklerine ve yöntemlerine sahiptir. System.Versiongibi basit türler için kopya tam olarak belirtilir. Karmaşık türler için kopya kusurludur. Örneğin, yeniden doldurulan sertifika nesneleri özel anahtarı içermez.
Diğer tüm türlerin örnekleri PSObject örnekleridir. pstypenames özelliği, Seri Durumdan Çıkarılmışön ekli özgün tür adını içerir; örneğin, Deserialized.System.Data.DataTable
AllScope Seçeneği
Değişkenler ve takma adlar, AllScopedeğerini alabilen bir Option özelliğine sahiptir. AllScope özelliğine sahip öğeler, oluşturduğunuz alt kapsamların bir parçası olur, ancak üst kapsamlar tarafından sonradan devralınmaz.
AllScope özelliğine sahip bir öğe alt kapsamda görünür ve bu kapsamın bir parçasıdır. Herhangi bir kapsamdaki öğede yapılan değişiklikler, değişkenin tanımlandığı tüm kapsamları etkiler.
Kapsamı yönetme
Bazı cmdlet'lerde belirli bir kapsamdaki öğeleri almanıza veya ayarlamanıza (oluşturma ve değiştirme) olanak tanıyan bir Kapsam parametresi vardır. Oturumunuzda Kapsamı parametresi olan tüm cmdlet'leri bulmak için aşağıdaki komutu kullanın:
Get-Help * -Parameter Scope
Belirli bir kapsamda görünen değişkenleri bulmak için ScopeGet-Variable parametresini kullanın. Görünür değişkenler genel değişkenleri, üst kapsamdaki değişkenleri ve geçerli kapsamdaki değişkenleri içerir.
Örneğin, aşağıdaki komut yerel kapsamda görünen değişkenleri alır:
Get-Variable -Scope Local
Belirli bir kapsamda değişken oluşturmak için bir kapsam değiştirici veya Set-Variable parametresini kullanın. Aşağıdaki komut genel kapsamda bir değişken oluşturur:
New-Variable -Scope Global -Name a -Value "One"
Kapsamı belirtmek için New-Alias, Set-Aliasveya Get-Alias cmdlet'lerinin Scope parametresini de kullanabilirsiniz. Aşağıdaki komut genel kapsamda bir diğer ad oluşturur:
New-Alias -Scope Global -Name np -Value Notepad.exe
Belirli bir kapsamdaki işlevleri almak için, kapsam içindeyken Get-Item cmdlet'ini kullanın.
Get-Item cmdlet'in Kapsam parametresi yoktur.
Note
Kapsamı parametresini kullanan cmdlet'ler için, sayıya göre kapsamlara da başvurabilirsiniz. Sayı, bir kapsamın diğerinin göreli konumunu açıklar. Kapsam 0 geçerli veya yerel kapsamı temsil eder. Kapsam 1, doğrudan üst kapsamı gösterir. Kapsam 2, kapsama alanının üstündeki ana kapsamı gösterir ve benzeri şekilde devam eder. Çok sayıda özyinelemeli kapsam oluşturduysanız, numaralandırılmış kapsamlar kullanışlıdır.
Kapsamla nokta kaynak gösterimini kullanma
Betikler ve işlevler kapsam kurallarına uyar. Bunları belirli bir kapsamda oluşturursunuz ve bu kapsamı değiştirmek için bir cmdlet parametresi veya kapsam değiştirici kullanmadığınız sürece yalnızca bu kapsamı etkiler.
Ancak, nokta kaynak kullanımıyla bir betiğin veya işlevin içeriğini geçerli geçerli kapsam içine ekleyebilirsiniz. Noktalı kaynak gösterimini kullanarak bir betik veya işlev çalıştırdığınızda, geçerli kapsamda çalışır. Betikteki veya işlevdeki işlevler, diğer adlar ve değişkenler geçerli kapsama dahil edilir.
Örneğin, betik kapsamındaki Sample.ps1 dizininden (betikler için varsayılan) C:\Scripts betiğini çalıştırmak için komut satırındaki betik dosyasının tam yolunu girmeniz gerekir.
C:\scripts\sample.ps1
Bir betik dosyasının yürütülebilir olması için .ps1 dosya uzantısına sahip olması gerekir. Dizinlerinde boşluk bulunan dosyalar tırnak içine alınmalıdır. Alıntılanan yolu yürütmeye çalışırsanız, PowerShell betiği çalıştırmak yerine tırnak içindeki içeriği görüntüler. Çağrı işleci (&), dosya adını içeren dizenin içeriğini yürütmenize olanak tanır.
Bir işlevi veya betiği çalıştırmak için çağrı işlecini kullanmak, onu kendi betik kapsamı içinde çalıştırır. Çağrı işlecini kullanmak, betiği adıyla çalıştırmaktan farklı değildir.
& C:\scripts\sample.ps1
about_Operatorsiçinde arama işleci hakkında daha fazla bilgi edinebilirsiniz.
yerel kapsamda Sample.ps1 betiğini çalıştırmak için betiğin yolundan önce bir nokta ve boşluk (. ) yazın:
. C:\scripts\sample.ps1
Betikte tanımlanan tüm işlevler, diğer adlar veya değişkenler artık mevcut kapsama eklenir.
Kapsam olmadan kısıtlama
PowerShell bazı seçeneklere ve özelliklere sahiptir ki bu kapsama benzer ve kapsamlarla etkileşime geçebilir. Bu özellik kapsam veya kapsamın davranışıyla karıştırılabilir.
Oturumlar, modüller ve iç içe komut istemleri, oturumun genel kapsamının alt kapsamları değil, bağımsız ortamlardır.
Oturum
Oturum, PowerShell'in çalıştığı bir ortamdır. Uzak bilgisayarda oturum oluşturduğunuzda, PowerShell uzak bilgisayara kalıcı bir bağlantı kurar. Kalıcı bağlantı, oturumu birden çok ilgili komut için kullanmanıza olanak tanır.
Bir oturum, kapsanan bir ortam olduğundan, kendi kapsamına sahiptir, ancak oturum, oluşturulduğu oturumun alt kapsamı değildir. Oturum kendi genel kapsamıyla başlar. Bu kapsam oturumun genel kapsamından bağımsızdır. Oturumda alt kapsamlar oluşturabilirsiniz. Örneğin, bir oturumda alt kapsam oluşturmak için bir komut dosyası çalıştırabilirsiniz.
Modül
PowerShell araçlarını paylaşmak ve teslim etmek için bir PowerShell modülü kullanabilirsiniz. Modül cmdlet'leri, betikleri, işlevleri, değişkenleri, diğer adları ve diğer yararlı öğeleri içerebilen bir birimdir. Açıkça dışarı aktarılmadığı sürece (Export-ModuleMember veya modül bildirimi kullanılarak), modüldeki öğelere modülün dışından erişilemez. Bu nedenle, modülü oturumunuza ekleyebilir ve diğer öğelerin oturumunuzda cmdlet'leri, betikleri, işlevleri ve diğer öğeleri geçersiz kılabileceği konusunda endişelenmeden genel öğeleri kullanabilirsiniz.
Varsayılan olarak modüller, çalışma alanının kök düzeyi (genel) kapsamına yüklenir. Modülü içeri aktarmak kapsamı değiştirmez.
Oturumda modüllerin kendi kapsamı vardır. aşağıdaki modülü C:\temp\mod1.psm1göz önünde bulundurun:
$a = "Hello"
function foo {
"`$a = $a"
"`$Global:a = $Global:a"
}
Şimdi $abir genel değişken oluşturuyoruz, buna bir değer veriyoruz ve fooişlevini çağırıyoruz.
$a = "Goodbye"
foo
Modül, modül kapsamındaki değişken $a bildirir ve ardından foo işlevi değişkenin değerini her iki kapsamda da verir.
$a = Hello
$Global:a = Goodbye
Modüller, içeri aktarıldıkları kapsama bağlı paralel kapsam kapsayıcıları oluşturur. Modül tarafından dışarı aktarılan öğeler, içeri aktarıldıkları kapsam düzeyinden itibaren kullanılabilir. Modülden dışarı aktarılmayan öğeler yalnızca modülün kapsam kapsayıcısı içinde kullanılabilir. Modüldeki işlevler, içeri aktarıldıkları kapsamdaki öğelere ve modülün kapsam kapsayıcısında yer alan öğelere erişebilir.
Module1içinde'den Module2 yüklerseniz, Module2, Module1'in kapsam kapsayıcısına yüklenir.
Module2 yapılan tüm ihracatlar, Module1modülünün mevcut kapsamına yerleştirilir.
Import-Module -Scope Localkullanırsanız dışa aktarmalar üst düzey yerine geçerli kapsam nesnesine yerleştirilir. Eğer bir modül 'de iseniz ve Import-Module -Scope Global (veya Import-Module -Global) kullanarak başka bir modül yüklerseniz, bu modül ve dışa aktarımları modülün yerel kapsamı yerine genel kapsama alanına yüklenir.
Windows Uyumluluğu özelliği, proxy modüllerini genel oturum durumuna aktarmak için bunu yapar.
İç içe istemler
İç içe geçen istemlerin kendi kapsamı yoktur. İç içe bir istem girdiğinizde, iç içe istem ortamın bir alt kümesidir. Ancak, yerel kapsam içinde kalırsınız.
Betiklerin kendi kapsamları vardır. Bir betikte hata ayıklarsanız ve betikte bir kesme noktasına ulaşırsanız, betik kapsamını girersiniz.
Özel seçenek
Diğer adlar ve değişkenler, değerini alabilen bir Private özelliğine sahiptir.
Private seçeneği olan öğeler oluşturuldukları kapsamda görüntülenebilir ve değiştirilebilir, ancak bu kapsamın dışında görüntülenemez veya değiştirilemez.
Örneğin, genel kapsamda özel seçeneği olan bir değişken oluşturur ve ardından bir betik çalıştırırsanız, betikteki Get-Variable komutlar özel değişkeni görüntülemez. Bu örnekte Global: kapsam değiştiricisi kullanıldığında özel değişken görüntülenmez.
Option özelliğinin değerini Özel olarak ayarlamak için , New-Variable, Set-Variableve New-Alias cmdlet'lerinin Set-Alias parametresini kullanabilirsiniz.
Görünürlük
Bir değişkenin veya diğer adın Görünürlük özelliği, öğeyi oluşturulduğu kapsayıcının dışında görüp göremeyeceğiniz belirler. Kapsayıcı bir modül, betik veya ek bileşen olabilir. Görünürlük, kapsayıcılar için, tıpkı Private özelliğinin değerinin kapsamlar için tasarlanmış olması gibi, tasarlanmıştır.
Görünürlük özelliği Public ve Private değerlerini alır. Özel görünürlüğe sahip öğeler yalnızca oluşturuldukları kapsayıcıda görüntülenebilir ve değiştirilebilir. Kapsayıcı eklenir veya içeri aktarılırsa, özel görünürlüğe sahip öğeler görüntülenemez veya değiştirilemez.
Görünürlük kapsayıcılar için tasarlandığından, bir bağlamda farklı çalışır.
- Genel kapsamda özel görünürlüğe sahip bir öğe oluşturursanız, öğeyi hiçbir kapsamda görüntüleyemez veya değiştiremezsiniz.
- Özel görünürlüğü olan bir değişkenin değerini görüntülemeye veya değiştirmeye çalışırsanız PowerShell bir hata iletisi döndürür.
Özel görünürlüğe sahip bir değişken oluşturmak için New-Variable ve Set-Variable cmdlet'lerini kullanabilirsiniz.
Örnekler
Örnek 1: Değişken değerini yalnızca betikte değiştirme
Aşağıdaki komut, bir betikteki $ConfirmPreference değişkeninin değerini değiştirir. Değişiklik genel kapsamı etkilemez.
İlk olarak, yerel kapsamda $ConfirmPreference değişkeninin değerini görüntülemek için aşağıdaki komutu kullanın:
PS> $ConfirmPreference
High
Aşağıdaki komutları içeren bir Scope.ps1 betiği oluşturun:
$ConfirmPreference = "Low"
"The value of `$ConfirmPreference is $ConfirmPreference."
Betiği çalıştırın. Betik, $ConfirmPreference değişkeninin değerini değiştirir ve ardından betik kapsamındaki değerini raporlar. Çıkış aşağıdaki çıkışa benzemelidir:
The value of $ConfirmPreference is Low.
Ardından, geçerli kapsamdaki $ConfirmPreference değişkeninin geçerli değerini test edin.
PS> $ConfirmPreference
High
Bu örnek, betik kapsamındaki bir değişkenin değerinde yapılan değişikliklerin, değişkenin üst kapsamdaki değerini etkilemediğini gösterir.
Örnek 2: Farklı kapsamlardaki değişken değerini görüntüleme
Yerel kapsamda ve üst kapsamdaki bir değişkenin değerini görüntülemek için kapsam değiştiricilerini kullanabilirsiniz.
İlk olarak, genel kapsamda bir $test değişkeni tanımlayın.
$test = "Global"
Ardından, Sample.ps1 değişkenini tanımlayan bir $test betiği oluşturun. Betikte, $test değişkeninin genel veya yerel sürümlerine başvurmak için bir kapsam değiştirici kullanın.
Sample.ps1'da:
$test = "Local"
"The local value of `$test is $test."
"The global value of `$test is $Global:test."
Sample.ps1çalıştırdığınızda, çıkış aşağıdaki çıkışa benzemelidir:
The local value of $test is Local.
The global value of $test is Global.
Betik tamamlandığında oturumda yalnızca $test genel değeri tanımlanır.
PS> $test
Global
Örnek 3: Üst kapsamdaki bir değişkenin değerini değiştirme
Özel seçeneğini veya başka bir yöntemi kullanarak bir öğeyi korumadığınız sürece, üst kapsamdaki bir değişkenin değerini görüntüleyebilir ve değiştirebilirsiniz.
İlk olarak, genel kapsamda bir $test değişkeni tanımlayın.
$test = "Global"
Ardından, $test değişkenini tanımlayan bir Sample.ps1 betiği oluşturun. Betikte, $test değişkeninin genel veya yerel sürümlerine başvurmak için bir kapsam değiştirici kullanın.
Sample.ps1içinde:
$Global:test = "Local"
"The global value of `$test is $Global:test."
Betik tamamlandığında, $test'ın global değeri değiştirilmiş olur.
PS> $test
Local
Örnek 4: Özel değişken oluşturma
Bir değişken, Private: kapsam değiştiricisi kullanılarak veya Option özelliği Privateolarak ayarlanmış değişken oluşturularak özelleştirilebilir. Özel değişkenler yalnızca oluşturuldukları kapsamda görüntülenebilir veya değiştirilebilir.
Bu örnekte, ScopeExample.ps1 betiği beş işlev oluşturur. İlk işlev, bir alt kapsam oluşturan sonraki işlevi çağırır. İşlevlerden biri, yalnızca oluşturulduğu kapsamda görülebilen özel bir değişkene sahiptir.
PS> Get-Content ScopeExample.ps1
# Start of ScopeExample.ps1
function funcA {
"Setting `$funcAVar1 to 'Value set in funcA'"
$funcAVar1 = "Value set in funcA"
funcB
}
function funcB {
"In funcB before set -> '$funcAVar1'"
$Private:funcAVar1 = "Locally overwrite the value - child scopes can't see me!"
"In funcB after set -> '$funcAVar1'"
funcC
}
function funcC {
"In funcC before set -> '$funcAVar1' - should be the value set in funcA"
$funcAVar1 = "Value set in funcC - Child scopes can see this change."
"In funcC after set -> '$funcAVar1'"
funcD
}
function funcD {
"In funcD before set -> '$funcAVar1' - should be the value from funcC."
$funcAVar1 = "Value set in funcD"
"In funcD after set -> '$funcAVar1'"
'-------------------'
ShowScopes
}
function ShowScopes {
$funcAVar1 = "Value set in ShowScopes"
"Scope [0] (local) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 0 -ValueOnly)'"
"Scope [1] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 1 -ValueOnly)'"
"Scope [2] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 2 -ValueOnly)'"
"Scope [3] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 3 -ValueOnly)'"
"Scope [4] (parent) `$funcAVar1 = '$(Get-Variable funcAVar1 -Scope 4 -ValueOnly)'"
}
funcA
# End of ScopeExample.ps1
PS> .\ScopeExample.ps1
Çıkış, her kapsamdaki değişkenin değerini gösterir. Özel değişkenin, yalnızca oluşturulduğu funcBkapsamı içinde görülebildiğini görebilirsiniz.
Setting $funcAVar1 to 'Value set in funcA'
In funcB before set -> 'Value set in funcA'
In funcB after set -> 'Locally overwrite the value - child scopes can't see me!'
In funcC before set -> 'Value set in funcA' - should be the value set in funcA
In funcC after set -> 'Value set in funcC - Child scopes can see this change.'
In funcD before set -> 'Value set in funcC - Child scopes can see this change.' - should be the value from funcC.
In funcD after set -> 'Value set in funcD'
-------------------
Scope [0] (local) $funcAVar1 = 'Value set in ShowScopes'
Scope [1] (parent) $funcAVar1 = 'Value set in funcD'
Scope [2] (parent) $funcAVar1 = 'Value set in funcC - Child scopes can see this change.'
Scope [3] (parent) $funcAVar1 = 'Locally overwrite the value - child scopes can't see me!'
Scope [4] (parent) $funcAVar1 = 'Value set in funcA'
ShowScopesçıkışında gösterildiği gibi, Get-Variable kullanarak ve bir kapsam numarası belirterek diğer kapsamlardan değişkenlere erişebilirsiniz.
Örnek 5: Uzak komutta yerel değişken kullanma
Yerel oturumda oluşturulan uzak komuttaki değişkenler için Using: kapsam değiştiricisini kullanın. PowerShell, uzak komutlardaki değişkenlerin uzak oturumda oluşturulduğunu varsayar.
Söz dizimi şöyledir:
$Using:<VariableName>
Örneğin, aşağıdaki komutlar yerel oturumda bir $Cred değişkeni oluşturur ve ardından uzak komutta $Cred değişkenini kullanır:
$Cred = Get-Credential
Invoke-Command $s {Remove-Item .\Test*.ps1 -Credential $Using:Cred}
Using: kapsam değiştiricisi PowerShell 3.0'da kullanıma sunulmuştur.
Ayrıca bakınız
PowerShell