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 Using
daha 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ığı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 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 $ps
olarak değerini kullanır$log
.
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
param($log)
Get-WinEvent -LogName $log
} -ArgumentList $ps
Ayrıca bkz.
PowerShell
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin