about_Remote_Variables
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şkenine 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, komutunda 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ırıldığı oturumda tanımlandığını varsayar.
Bu örnekte değişkeni, $ps
komutun çalıştığı geçici oturumda Get-WinEvent
tanımlanır.
Invoke-Command -ComputerName S1 -ScriptBlock {
$ps = "*PowerShell*"; Get-WinEvent -LogName $ps
}
Komut kalıcı bir oturumda ( PSSession) çalıştığında, 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, kapsam değiştiricisini Using
kullanarak uzak komuttaki bir yerel değişkeni tanımlayabilirsiniz.
söz dizimi Using
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. Kapsam Using
değiştiricisi yerel değişken olarak tanımlanır $ps
.
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
Get-WinEvent -LogName $Using:ps
}
Kapsam Using
değiştirici bir PSSession'da kullanılabilir.
$s = New-PSSession -ComputerName S1
$ps = "*PowerShell*"
Invoke-Command -Session $s -ScriptBlock {Get-WinEvent -LogName $Using:ps}
Gibi $using:var
bir değişken başvurusu, çağıranın bağlamından değişkenin $var
değerine genişletir. Çağıranın değişken nesnesine erişemezseniz.
Kapsam Using
değiştirici , PSSession iç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'}
hakkında Using
daha fazla bilgi için bkz . about_Scopes
Sıçramayı kullanma
PowerShell splatting komutuna parametre adları ve değerlerinden oluşan bir koleksiyon geçirir. Daha fazla bilgi için bkz. about_Splatting.
Bu örnekte, sıçrayan değişken, $Splat
yerel bilgisayarda ayarlanmış bir karma tablodur. uzak Invoke-Command
bilgisayar oturumuna bağlanır. ScriptBlock, at (@
) simgesine sahip kapsam değiştiricisini, sıçramış değişkeni temsil etmek için kullanırUsing
.
$Splat = @{ Name = "Win*"; Include = "WinRM" }
Invoke-Command -Session $s -ScriptBlock { Get-Service @Using:Splat }
'Kullanma' 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 Using
değişken değerleri eklemek için kapsam değiştiricisine ihtiyacınız vardır; böylece oturum dışı kod bunlara erişebilir. Kapsam Using
değiştirici aşağıdaki bağlamlarda desteklenir:
- ComputerName, HostName, SSHConnection veya Session parametreleri (uzak oturum) kullanılarak başlatılan
Invoke-Command
uzaktan yürütülen komutlar - Ile başlatılan
Start-Job
arka plan işleri (işlem dışı oturum) - veya
ForEach-Object -Parallel
aracılığıylaStart-ThreadJob
başlatılan iş parçacığı işleri (ayrı iş parçacığı oturumu)
Bağlama bağlı olarak, katıştırılmış değişken değerleri çağıranın kapsamındaki verilerin bağımsız kopyaları veya buna yapılan başvurulardır. Uzak ve işlem dışı oturumlarda her zaman bağımsız kopyalardır. İş parçacığı oturumlarında başvuru tarafından geçirilir.
Değişken değerleri seri hale getirme
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'e 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.Version gibi basit türler için kopya tam olarak kullanılır. 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
ArgumentList parametresiyle yerel değişkenleri kullanma
Uzak komut için parametreler tanımlayarak ve cmdlet'in ArgumentList parametresini Invoke-Command
kullanarak yerel değişkeni parametre değeri olarak belirterek uzak komuttaki yerel değişkenleri kullanabilirsiniz.
Uzak komutun
param
parametrelerini tanımlamak için anahtar sözcüğünü kullanın. Parametre adları, yerel değişkenin adıyla eşleşmesi gerekmeyen yer tutuculardır.komutundaki anahtar sözcüğü tarafından
param
tanımlanan parametreleri kullanın.Parametre değeri olarak yerel değişkeni belirtmek için cmdlet'in
Invoke-Command
ArgumentList parametresini kullanın.
Örneğin, aşağıdaki komutlar değişkeni yerel oturumda tanımlar $ps
ve ardından uzak bir komutta kullanır. Komutu parametre adı olarak, yerel değişkeni $ps
ise değeri olarak kullanır$log
.
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
param($log)
Get-WinEvent -LogName $log
} -ArgumentList $ps