Share via


Uzak Değişkenler Hakkında

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 Usingdaha 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)
  • aracılığıyla başlatılan Start-ThreadJob 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-CommandArgumentList 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 $psise değeri olarak kullanır$log.

$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
  param($log)
  Get-WinEvent -LogName $log
} -ArgumentList $ps

Ayrıca bkz.

about_PSSessions

about_Remote

about_Scopes

about_Splatting

about_Variables

Enter-PSSession

Invoke-Command

New-PSSession

Start-ThreadJob