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ş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 değişkeni, komutun $ps ç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, uzak komuttaki Using yerel bir değişkeni tanımlamak için kapsam değiştiricisini kullanabilirsiniz.

söz dizimi Using aşağıdaki gibidir:

$Using:<VariableName>

Aşağıdaki örnekte, $ps değişken yerel oturumda oluşturulur, ancak komutun çalıştığı oturumda kullanılır. Kapsam Using değiştiricisi yerel değişken olarak tanımlar $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ğerleri koleksiyonunu geçirir. Daha fazla bilgi için bkz . about_Splatting.

Bu örnekte, splatting değişkeni, $Splat yerel bilgisayarda ayarlanmış bir karma tablodur. uzak Invoke-Command bilgisayar oturumuna bağlanır. ScriptBlockUsing, at (@) simgesine sahip kapsam değiştiricisini kullanarak sıçramış 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 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, SSH Bağlan ion 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ığıyla Start-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 bunlar her zaman bağımsız kopyalardır. İş parçacığı oturumlarında bunlar başvuruyla 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'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 tamdı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 parametre değeri olarak yerel değişkeni belirtmek için cmdlet'in Invoke-Command ArgumentList parametresini kullanarak uzak komutta 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.

  • komutunda 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 ve yerel değişkeni $psolarak değerini kullanır$log.

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

Ayrıca bkz.