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
Uzak komutlarda yerel ve uzak değişkenlerin nasıl kullanılacağını açıklar.
Uzun açıklama
Uzak bilgisayarlarda çalıştırdığınız komutlarda değişkenleri kullanabilirsiniz. Değişkene bir değer atayın ve değerin yerine değişkenini kullanın.
Varsayılan olarak, uzak komutlardaki değişkenlerin komutu çalıştıran oturumda tanımlandığı varsayılır. Yerel oturumda tanımlanan değişkenler, komutta yerel değişkenler olarak tanımlanmalıdır.
Uzak değişkenleri kullanma
PowerShell, uzak komutlarda kullanılan değişkenlerin komutun çalıştığı oturumda tanımlandığını varsayar.
Bu örnekte $ps değişkeni, Get-WinEvent komutunun çalıştığı geçici oturumda tanımlanır.
Invoke-Command -ComputerName S1 -ScriptBlock {
$ps = "*PowerShell*"; Get-WinEvent -LogName $ps
}
Komut kalıcı bir oturumda çalıştığında PSSession uzak değişkenin bu oturumda tanımlanması gerekir.
$s = New-PSSession -ComputerName S1
Invoke-Command -Session $s -ScriptBlock {$ps = "*PowerShell*"}
Invoke-Command -Session $s -ScriptBlock {Get-WinEvent -LogName $ps}
Yerel değişkenleri kullanma
Uzak komutlarda yerel değişkenleri kullanabilirsiniz, ancak değişkenin yerel oturumda tanımlanması gerekir.
PowerShell 3.0'da başlayarak, Using: kapsam değiştiricisini kullanarak uzak komuttaki bir yerel değişkeni tanımlayabilirsiniz.
Using: söz dizimi aşağıdaki gibidir:
$Using:<VariableName>
Aşağıdaki örnekte, $ps değişkeni yerel oturumda oluşturulur, ancak komutun çalıştığı oturumda kullanılır.
Using: kapsam değiştiricisi $ps yerel değişken olarak tanımlar.
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
Get-WinEvent -LogName $Using:ps
}
Using: kapsam değiştiricisi bir PSSessioniçinde kullanılabilir.
$s = New-PSSession -ComputerName S1
$ps = "*PowerShell*"
Invoke-Command -Session $s -ScriptBlock {Get-WinEvent -LogName $Using:ps}
$Using:var gibi bir değişken başvurusu, çağıranın bağlamındaki değişken $var'in değerine genişletilir. Çağıranın değişken nesnesine erişemezsiniz.
Using: kapsam değiştirici, PSSessioniçindeki bir yerel değişkeni değiştirmek için kullanılamaz. Örneğin, aşağıdaki kod çalışmaz:
$s = New-PSSession -ComputerName S1
$ps = "*PowerShell*"
Invoke-Command -Session $s -ScriptBlock {$Using:ps = 'Cannot assign new value'}
Using:hakkında daha fazla bilgi için bkz. about_Scopes
Splatting yöntemini kullanma
PowerShell splatting komutuna parametre adları ve değerleri koleksiyonunu geçirir. Daha fazla bilgi için bkz. about_Splatting.
Bu örnekte, $Splat splatting değişkeni yerel bilgisayarda ayarlanmış bir karma tablodur.
Invoke-Command uzaktan bilgisayar oturumuna bağlanır.
ScriptBlock,Using:simgesi ile @ kapsam değiştiricisini kullanarak yayılmış değişkeni gösterir.
$Splat = @{ Name = "Win*"; Include = "WinRM" }
Invoke-Command -Session $s -ScriptBlock { Get-Service @Using:Splat }
Using: kapsam değiştiricisinin gerekli olduğu diğer durumlar
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ığı işleri (ayrı iş parçacığı oturumu)
Kontekste bağlı olarak, gömülü değişken değerleri, çağıranın kapsamındaki verilerin bağımsız kopyaları veya bunlara yapılan referanslar olabilir. Uzak ve işlem dışı oturumlarda bunlar her zaman bağımsız kopyalardır. İş parçacığı oturumlarında bunlar referansla geçirilir.
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ı sayıda tür 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 birebir olur. Karmaşık türler için kopya kusurludur. Örneğin, yeniden oluşturulan 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
ArgumentList parametresiyle yerel değişkenleri kullanma
Uzak komut için parametreler tanımlayarak ve yerel değişkeni parametre değeri olarak belirtmek üzere cmdlet'in Invoke-Command parametresini kullanarak uzak komuttaki yerel değişkenleri kullanabilirsiniz.
Uzak komutun parametrelerini tanımlamak için
paramanahtar sözcüğünü kullanın. Parametre adları, yerel değişkenin adıyla eşleşmesi gerekmeyen yer tutuculardır.komutundaki
paramanahtar sözcüğü tarafından tanımlanan parametreleri kullanın.Yerel değişkeni parametre değeri olarak belirtmek için cmdlet'in
Invoke-Commandparametresini kullanın.
Örneğin, aşağıdaki komutlar yerel oturumda $ps değişkenini tanımlar ve ardından bunu uzak bir komutta kullanır. Komut, parametre adı olarak $Log ve değeri olarak $psyerel değişkeni kullanır.
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
param($Log)
Get-WinEvent -LogName $Log
} -ArgumentList $ps
Ayrıca bakınız
PowerShell