Invoke-Command
Komutları yerel ve uzak bilgisayarlarda çalıştırır.
Syntax
Invoke-Command
[-ScriptBlock] <scriptblock>
[-NoNewScope]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-Session] <PSSession[]>]
[-ScriptBlock] <scriptblock>
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-Session] <PSSession[]>]
[-FilePath] <string>
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-ComputerName] <string[]>]
[-ScriptBlock] <scriptblock>
[-Credential <pscredential>]
[-Port <int>]
[-UseSSL]
[-ConfigurationName <string>]
[-ApplicationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-InDisconnectedSession]
[-SessionName <string[]>]
[-HideComputerName]
[-JobName <string>]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[-CertificateThumbprint <string>]
[<CommonParameters>]
Invoke-Command
[[-ComputerName] <string[]>]
[-FilePath] <string>
[-Credential <pscredential>]
[-Port <int>]
[-UseSSL]
[-ConfigurationName <string>]
[-ApplicationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-InDisconnectedSession]
[-SessionName <string[]>]
[-HideComputerName]
[-JobName <string>]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-ConnectionUri] <uri[]>]
[-ScriptBlock] <scriptblock>
[-Credential <pscredential>]
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-InDisconnectedSession]
[-HideComputerName]
[-JobName <string>]
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[-CertificateThumbprint <string>]
[<CommonParameters>]
Invoke-Command
[[-ConnectionUri] <uri[]>]
[-FilePath] <string>
[-Credential <pscredential>]
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-InDisconnectedSession]
[-HideComputerName]
[-JobName <string>]
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-VMId] <guid[]>
[-ScriptBlock] <scriptblock>
-Credential <pscredential>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-ScriptBlock] <scriptblock>
-Credential <pscredential>
-VMName <string[]>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-VMId] <guid[]>
[-FilePath] <string>
-Credential <pscredential>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-FilePath] <string>
-Credential <pscredential>
-VMName <string[]>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-ScriptBlock] <scriptblock>
-HostName <string[]>
[-Port <int>]
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-UserName <string>]
[-KeyFilePath <string>]
[-Subsystem <string>]
[-ConnectingTimeout <int>]
[-SSHTransport]
[-Options <hashtable>]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-ScriptBlock] <scriptblock>
-ContainerId <string[]>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-RunAsAdministrator]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-FilePath] <string>
-ContainerId <string[]>
[-ConfigurationName <string>]
[-ThrottleLimit <int>]
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-RunAsAdministrator]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-ScriptBlock] <scriptblock>
-SSHConnection <hashtable[]>
[-AsJob]
[-HideComputerName]
[-JobName <string>]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
-FilePath <string>
-HostName <string[]>
[-AsJob]
[-HideComputerName]
[-UserName <string>]
[-KeyFilePath <string>]
[-Subsystem <string>]
[-ConnectingTimeout <int>]
[-SSHTransport]
[-Options <hashtable>]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
-FilePath <string>
-SSHConnection <hashtable[]>
[-AsJob]
[-HideComputerName]
[-RemoteDebug]
[-InputObject <psobject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Description
Invoke-Command
Cmdlet, komutları yerel veya uzak bir bilgisayarda çalıştırır ve hatalar da dahil olmak üzere komutlardan gelen tüm çıkışı döndürür. Tek Invoke-Command
bir komut kullanarak komutları birden çok bilgisayarda çalıştırabilirsiniz.
Uzak bilgisayarda tek bir komut çalıştırmak için ComputerName parametresini kullanın. Verileri paylaşan bir dizi ilgili komutu çalıştırmak için cmdlet'ini New-PSSession
kullanarak uzak bilgisayarda bir PSSession (kalıcı bağlantı) oluşturun ve ardından komutunu PSSession'da çalıştırmak için session parametresini Invoke-Command
kullanın. Bağlantısı kesilmiş bir oturumda komut çalıştırmak için InDisconnectedSession parametresini kullanın. Arka plan işinde komut çalıştırmak için AsJob parametresini kullanın.
Komut olarak betik bloğunu çalıştırmak için yerel bilgisayarda da kullanabilirsiniz Invoke-Command
. PowerShell betik bloğunu geçerli kapsamın alt kapsamında hemen çalıştırır.
Uzak bilgisayarda komut çalıştırmak için kullanmadan Invoke-Command
önce about_Remote okuyun.
PowerShell 6.0'dan başlayarak, uzak bilgisayarlara bağlantı kurmak ve komut çağırmak için Secure Shell (SSH) kullanabilirsiniz. SSH yerel bilgisayara yüklenmelidir ve uzak bilgisayar bir PowerShell SSH uç noktası ile yapılandırılmalıdır. SSH tabanlı PowerShell uzak oturumunun avantajı, birden çok platformda (Windows, Linux, macOS) çalışmasıdır. SSH tabanlı oturumda, uzak bilgisayarı ve ilgili bağlantı bilgilerini belirtmek için HostName veya SSHConnection parametrelerini kullanırsınız. PowerShell SSH uzaktan iletişimini ayarlama hakkında daha fazla bilgi için bkz. SSH Üzerinden PowerShell uzaktan iletişim.
Bazı kod örnekleri, satır uzunluğunu azaltmak için sıçrama kullanır. Daha fazla bilgi için bkz. about_Splatting.
Örnekler
Örnek 1: Sunucuda betik çalıştırma
Bu örnek, betiği Server01 bilgisayarında çalıştırır Test.ps1
.
Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01
FilePath parametresi, yerel bilgisayarda bulunan bir betiği belirtir. Betik uzak bilgisayarda çalışır ve sonuçlar yerel bilgisayara döndürülür.
Örnek 2: Uzak sunucuda komut çalıştırma
Bu örnek, Server01 uzak bilgisayarında bir Get-Culture
komut çalıştırır.
Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock {
Get-Culture
}
ComputerName parametresi uzak bilgisayarın adını belirtir. Credential parametresi komutu çalıştırma izni olan Domain01\User01 güvenlik bağlamında çalıştırmak için kullanılır. ScriptBlock parametresi uzak bilgisayarda çalıştırılacak komutu belirtir.
Yanıt olarak PowerShell, User01 hesabı için parolayı ve kimlik doğrulama yöntemini istemektedir. Ardından Server01 bilgisayarında komutunu çalıştırır ve sonucu döndürür.
Örnek 3: Kalıcı bir bağlantıda komut çalıştırma
Bu örnek, Sunucu02 adlı uzak bilgisayarda kalıcı bir bağlantı kullanarak oturumda aynı Get-Culture
komutu çalıştırır.
$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
Invoke-Command -Session $s -ScriptBlock { Get-Culture }
cmdlet'i New-PSSession
Server02 uzak bilgisayarında bir oturum oluşturur ve bunu değişkene $s
kaydeder. Genellikle, yalnızca uzak bilgisayarda bir dizi komut çalıştırdığınızda oturum oluşturursunuz.
Cmdlet, Invoke-Command
Server02'de komutunu çalıştırır Get-Culture
. Session parametresi değişkene $s
kaydedilen oturumu belirtir.
Yanıt olarak PowerShell, Server02 bilgisayarındaki oturumda komutunu çalıştırır.
Örnek 4: Verileri paylaşan bir dizi komutu çalıştırmak için oturum kullanma
Bu örnek, computername ve session parametrelerini kullanmanın etkilerini karşılaştırır Invoke-Command
. Aynı verileri paylaşan bir dizi komutu çalıştırmak için oturumun nasıl kullanılacağını gösterir.
Invoke-Command -ComputerName Server02 -ScriptBlock { $p = Get-Process PowerShell }
Invoke-Command -ComputerName Server02 -ScriptBlock { $p.VirtualMemorySize }
$s = New-PSSession -ComputerName Server02
Invoke-Command -Session $s -ScriptBlock { $p = Get-Process PowerShell }
Invoke-Command -Session $s -ScriptBlock { $p.VirtualMemorySize }
17930240
İlk iki komut, Server02 uzak bilgisayarında komut çalıştırmak için ComputerName parametresini Invoke-Command
kullanır. İlk komut, uzak bilgisayarda PowerShell işlemini almak ve değişkene kaydetmek için cmdlet'ini $p
kullanırGet-Process
. İkinci komut, PowerShell işleminin VirtualMemorySize özelliğinin değerini alır.
ComputerName parametresini kullandığınızda, PowerShell komutu çalıştırmak için yeni bir oturum oluşturur.
Komut tamamlandığında oturum kapatılır. Değişken $p
tek bir bağlantıda oluşturuldu, ancak ikinci komut için oluşturulan bağlantıda yok.
Sorun, uzak bilgisayarda kalıcı bir oturum oluşturup aynı oturumda her iki komutu da çalıştırarak çözülür.
cmdlet'i New-PSSession
Server02 bilgisayarında kalıcı bir oturum oluşturur ve oturumu değişkene $s
kaydeder. İzleyen Invoke-Command
satırlar, aynı oturumda her iki komutu da çalıştırmak için Session parametresini kullanır. Her iki komut da aynı oturumda çalıştırıldığından $p
, değer etkin kalır.
Örnek 5: Bir değişkende depolanan bir betik bloğu ile komut çağırma
Bu örnek, bir değişkende betik bloğu olarak depolanan bir komutun nasıl çalıştırıldığını gösterir. Betik bloğu bir değişkene kaydedildiğinde, değişkeni ScriptBlock parametresinin değeri olarak belirtebilirsiniz.
$command = {
Get-WinEvent -LogName PowerShellCore/Operational |
Where-Object -FilterScript { $_.Message -like '*certificate*' }
}
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command
değişkeni, $command
betik bloğu olarak biçimlendirilmiş komutu depolar Get-WinEvent
. , Invoke-Command
S1 ve S2 uzak bilgisayarlarda depolanan $command
komutu çalıştırır.
Örnek 6: Birkaç bilgisayarda tek bir komut çalıştırma
Bu örnekte, birden çok bilgisayarda tek bir komutu çalıştırmak için nasıl kullanılacağı Invoke-Command
gösterilmektedir.
$parameters = @{
ComputerName = 'Server01', 'Server02', 'TST-0143', 'localhost'
ConfigurationName = 'MySession.PowerShell'
ScriptBlock = { Get-WinEvent -LogName PowerShellCore/Operational }
}
Invoke-Command @parameters
ComputerName parametresi, bilgisayar adlarının virgülle ayrılmış bir listesini belirtir. Bilgisayar listesi, yerel bilgisayarı temsil eden localhost değerini içerir. ConfigurationName parametresi alternatif bir oturum yapılandırması belirtir. ScriptBlock parametresi, her bilgisayardan PowerShellCore/Operasyonel olay günlüklerini almak için çalışırGet-WinEvent
.
Örnek 7: Birden çok bilgisayarda konak programının sürümünü alma
Bu örnek, 200 uzak bilgisayarda çalışan PowerShell konak programının sürümünü alır.
$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {
(Get-Host).Version
}
Yalnızca bir komut çalıştırıldığından, bilgisayarların her birine kalıcı bağlantılar oluşturmanız gerekmez. Bunun yerine, komut bilgisayarları göstermek için ComputerName parametresini kullanır. Bilgisayarları belirtmek için cmdlet'ini Get-Content
kullanarak bilgisayar adları içeren bir dosya olan Machine.txt dosyasının içeriğini alır.
Cmdlet uzak Invoke-Command
bilgisayarlarda bir Get-Host
komut çalıştırır. PowerShell ana bilgisayarının Version özelliğini almak için noktalı gösterimi kullanır.
Bu komutlar birer birer çalışır. Komutlar tamamlandığında, tüm bilgisayarlardaki komutların çıkışı değişkene $version
kaydedilir. Çıktı, verilerin kaynaklandığı bilgisayarın adını içerir.
Örnek 8: Birkaç uzak bilgisayarda arka plan işi çalıştırma
Bu örnek, iki uzak bilgisayarda bir komut çalıştırır. Komutun Invoke-Command
arka plan işi olarak çalışması için AsJob parametresini kullanır. Komutlar uzak bilgisayarlarda çalışır, ancak iş yerel bilgisayarda bulunur. Sonuçlar yerel bilgisayara iletilir.
$s = New-PSSession -ComputerName Server01, Server02
Invoke-Command -Session $s -ScriptBlock { Get-EventLog system } -AsJob
Id Name State HasMoreData Location Command
--- ---- ----- ----- ----------- ---------------
1 Job1 Running True Server01,Server02 Get-EventLog system
$j = Get-Job
$j | Format-List -Property *
HasMoreData : True
StatusMessage :
Location : Server01,Server02
Command : Get-EventLog system
JobStateInfo : Running
Finished : System.Threading.ManualResetEvent
InstanceId : e124bb59-8cb2-498b-a0d2-2e07d4e030ca
Id : 1
Name : Job1
ChildJobs : {Job2, Job3}
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
StateChanged :
$results = $j | Receive-Job
Cmdlet, New-PSSession
Server01 ve Server02 uzak bilgisayarlarda oturumlar oluşturur. Invoke-Command
Cmdlet, oturumların her birinde bir arka plan işi çalıştırır. komutu, komutu arka plan işi olarak çalıştırmak için AsJob parametresini kullanır. Bu komut, iki uzak bilgisayarda çalıştırılacak her iş için bir tane olmak üzere iki alt iş nesnesi içeren bir iş nesnesi döndürür.
Get-Job
komutu, iş nesnesini değişkenine $j
kaydeder. Daha $j
sonra değişken, bir listede iş nesnesinin Format-List
tüm özelliklerini görüntülemek için cmdlet'ine kanalize edilir. Son komut işlerin sonuçlarını alır. içindeki iş nesnesini cmdlet'ine $j
Receive-Job
aktarır ve sonuçları değişkeninde $results
depolar.
Örnek 9: Uzak bilgisayardaki bir komut çalıştırmasında yerel değişkenleri ekleme
Bu örnekte, uzak bilgisayardaki bir komut çalıştırmasına yerel değişkenlerin değerlerinin nasıl dahil olduğu gösterilmektedir. komutu, uzak komuttaki Using
bir yerel değişkeni tanımlamak için kapsam değiştiricisini kullanır. Varsayılan olarak, tüm değişkenlerin uzak oturumda tanımlandığı varsayılır. Kapsam Using
değiştirici PowerShell 3.0'da tanıtıldı. Kapsam değiştirici hakkında Using
daha fazla bilgi için bkz. about_Remote_Variables ve about_Scopes.
$Log = 'PowerShellCore/Operational'
Invoke-Command -ComputerName Server01 -ScriptBlock {
Get-WinEvent -LogName $Using:Log -MaxEvents 10
}
$Log
değişkeni, olay günlüğünün adını (PowerShellCore/Operasyonel) depolar. Cmdlet, Invoke-Command
olay günlüğünden en yeni on olayı almak için Server01 üzerinde çalışır Get-WinEvent
. LogName parametresinin değeri, uzak oturumda değil yerel oturumda oluşturulduğunu belirtmek için kapsam değiştiricisi tarafından Using
öneki oluşturulan değişkendir$Log
.
Örnek 10: Bilgisayar adını gizleme
Bu örnekte, öğesinin HideComputerName parametresini Invoke-Command
kullanmanın etkisi gösterilir.
HideComputerName , bu cmdlet'in döndürdüğü nesneyi değiştirmez. Yalnızca ekranı değiştirir. Etkilenen nesnelerden herhangi birinin PsComputerName özelliğini görüntülemek için Format cmdlet'lerini kullanmaya devam edebilirsiniz.
Invoke-Command -ComputerName S1, S2 -ScriptBlock { Get-Process PowerShell }
PSComputerName Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
-------------- ------- ------ ----- ----- ----- ------ -- -----------
S1 575 15 45100 40988 200 4.68 1392 PowerShell
S2 777 14 35100 30988 150 3.68 67 PowerShell
Invoke-Command -ComputerName S1, S2 -HideComputerName -ScriptBlock {
Get-Process PowerShell
}
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
575 15 45100 40988 200 4.68 1392 PowerShell
777 14 35100 30988 150 3.68 67 PowerShell
İlk iki komut, PowerShell işlemi için bir Get-Process
komut çalıştırmak için kullanırInvoke-Command
. İlk komutun çıktısı, komutun çalıştırıldığı bilgisayarın adını içeren PsComputerName özelliğini içerir. HideComputerName kullanan ikinci komutun çıktısı PsComputerName sütununu içermez.
Örnek 11: Betik bloğunda Param anahtar sözcüğünü kullanma
Param
Anahtar sözcüğü ve ArgumentList parametresi, bir betik bloğundaki adlandırılmış parametrelere değişken değerleri geçirmek için kullanılır. Bu örnekte harfle a
başlayan ve uzantıya .pdf
sahip dosya adları görüntülenir.
Anahtar sözcük hakkında Param
daha fazla bilgi için bkz. about_Language_Keywords.
$parameters = @{
ComputerName = 'Server01'
ScriptBlock = {
Param ($param1, $param2)
Get-ChildItem -Name $param1 -Include $param2
}
ArgumentList = 'a*', '*.pdf'
}
Invoke-Command @parameters
aa.pdf
ab.pdf
ac.pdf
az.pdf
Invoke-Command
ve $param2
adlı iki değişkeni $param1
tanımlayan ScriptBlock parametresini kullanır. Get-ChildItem
değişken adlarıyla Name ve Include adlı adlandırılmış parametreleri kullanır. ArgumentList değerleri değişkenlere geçirir.
Örnek 12: Betik bloğunda $args otomatik değişkenini kullanma
Otomatik $args
değişken ve ArgumentList parametresi, dizi değerlerini bir betik bloğundaki parametre konumlarına geçirmek için kullanılır. Bu örnekte, bir sunucunun dosyaların dizin içeriği .txt
görüntülenir. Get-ChildItem
Path parametresi konum 0, Filter parametresi ise konum 1'dir.
Değişken hakkında $args
daha fazla bilgi için bkz. about_Automatic_Variables
$parameters = @{
ComputerName = 'Server01'
ScriptBlock = { Get-ChildItem $args[0] $args[1] }
ArgumentList = 'C:\Test', '*.txt*'
}
Invoke-Command @parameters
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 6/12/2019 15:15 128 alog.txt
-a--- 7/27/2019 15:16 256 blog.txt
-a--- 9/28/2019 17:10 64 zlog.txt
Invoke-Command
bir ScriptBlock parametresi kullanır ve Get-ChildItem
ve $args[1]
dizi değerlerini belirtir$args[0]
. ArgumentList, dizi değerlerini Get-ChildItem
Yol ve Filtre için parametre konumlarına geçirir$args
.
Örnek 13: Metin dosyasında listelenen tüm bilgisayarlarda betik çalıştırma
Bu örnek, betiği dosyada listelenen tüm bilgisayarlarda çalıştırmak Sample.ps1
için cmdlet'ini Servers.txt
kullanırInvoke-Command
. Komut, betik dosyasını belirtmek için FilePath parametresini kullanır. Bu komut, betik dosyasına uzak bilgisayarlar tarafından erişilemiyor olsa bile betiği uzak bilgisayarlarda çalıştırmanıza olanak tanır.
$parameters = @{
ComputerName = (Get-Content Servers.txt)
FilePath = 'C:\Scripts\Sample.ps1'
ArgumentList = 'Process', 'Service'
}
Invoke-Command @parameters
Komutu gönderdiğinizde, dosyanın içeriği Sample.ps1
bir betik bloğuna kopyalanır ve betik bloğu uzak bilgisayarların her birinde çalıştırılır. Bu yordam, betiğin içeriğini göndermek için ScriptBlock parametresini kullanmaya eşdeğerdir.
Örnek 14: URI kullanarak uzak bilgisayarda komut çalıştırma
Bu örnekte, Tekdüzen Kaynak Tanımlayıcısı (URI) ile tanımlanan uzak bir bilgisayarda komutun nasıl çalıştırıldığı gösterilmektedir. Bu özel örnek, uzak exchange sunucusunda bir Set-Mailbox
komut çalıştırır.
$LiveCred = Get-Credential
$parameters = @{
ConfigurationName = 'Microsoft.Exchange'
ConnectionUri = 'https://ps.exchangelabs.com/PowerShell'
Credential = $LiveCred
Authentication = 'Basic'
ScriptBlock = { Set-Mailbox Dan -DisplayName 'Dan Park' }
}
Invoke-Command @parameters
İlk satır, Get-Credential
Windows Live ID kimlik bilgilerini değişkeninde depolamak için cmdlet'ini $LiveCred
kullanır. PowerShell, kullanıcıdan Windows Live ID kimlik bilgilerini girmesini ister.
$parameters
değişkeni, cmdlet'ine Invoke-Command
geçirilecek parametreleri içeren bir karma tablodur. Cmdlet, Invoke-Command
Microsoft.Exchange oturum yapılandırmasını kullanarak bir Set-Mailbox
komut çalıştırır. ConnectionURI parametresi, Exchange sunucusu uç noktasının URL'sini belirtir. Credential parametresi değişkeninde $LiveCred
depolanan kimlik bilgilerini belirtir. AuthenticationMechanism parametresi, temel kimlik doğrulamasının kullanımını belirtir. ScriptBlock parametresi, komutu içeren bir betik bloğu belirtir.
Örnek 15: Oturum seçeneği kullanma
Bu örnekte SessionOption parametresinin nasıl oluşturulacağı ve kullanılacağı gösterilmektedir.
$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$parameters = @{
ComputerName = 'server01'
UseSSL = $true
ScriptBlock = { Get-HotFix }
SessionOption = $so
Credential = 'server01\user01'
}
Invoke-Command @parameters
Cmdlet, New-PSSessionOption
uzak ucun gelen HTTPS bağlantısını değerlendirirken Sertifika Yetkilisi, Kurallı Ad ve İptal Listeleri'ni doğrulamamalarına neden olan bir oturum seçeneği nesnesi oluşturur. SessionOption nesnesi değişkenine $so
kaydedilir.
Not
Bu denetimleri devre dışı bırakmak sorun giderme için uygundur, ancak açıkça güvenli değildir.
Invoke-Command
Cmdlet uzaktan bir Get-HotFix
komut çalıştırır. SessionOption parametresine $so
değişkeni verilir.
Örnek 16: Uzak komutta URI yeniden yönlendirmesini yönetme
Bu örnekte, uzak komutta URI yeniden yönlendirmesini yönetmek için AllowRedirection ve SessionOption parametrelerinin nasıl kullanılacağı gösterilmektedir.
$max = New-PSSessionOption -MaximumRedirection 1
$parameters = @{
ConnectionUri = 'https://ps.exchangelabs.com/PowerShell'
ScriptBlock = { Get-Mailbox dan }
AllowRedirection = $true
SessionOption = $max
}
Invoke-Command @parameters
cmdlet'i New-PSSessionOption
değişkeninde $max
kaydedilen bir PSSessionOption nesnesi oluşturur. Komut, PSSessionOption nesnesinin MaximumConnectionRedirectionCount özelliğini 1 olarak ayarlamak için MaximumRedirection parametresini kullanır.
Invoke-Command
Cmdlet uzak bir Microsoft Exchange Server üzerinde bir Get-Mailbox
komut çalıştırır. AllowRedirection parametresi, bağlantıyı alternatif bir uç noktaya yönlendirmek için açık izin sağlar. SessionOption parametresi değişkeninde $max
depolanan oturum nesnesini kullanır.
Sonuç olarak, ConnectionURI tarafından belirtilen uzak bilgisayar yeniden yönlendirme iletisi döndürürse, PowerShell bağlantıyı yeniden yönlendirir, ancak yeni hedef başka bir yeniden yönlendirme iletisi döndürürse, yeniden yönlendirme sayısı değeri 1 aşılır ve Invoke-Command
sonlandırılmayan bir hata döndürür.
Örnek 17: Uzak oturumda ağ paylaşımına erişme
Bu örnekte, uzak oturumdan bir ağ paylaşımına erişme gösterilmektedir. Örneği göstermek için üç bilgisayar kullanılır. Server01 yerel bilgisayar, Server02 uzak bilgisayar ve Net03 ağ paylaşımını içerir. Server01, Server02'ye bağlanır ve ardından Sunucu02 ağ paylaşımına erişmek için Net03'e ikinci bir atlama yapar. PowerShell uzaktan iletişiminin bilgisayarlar arasında atlamaları nasıl desteklediği hakkında daha fazla bilgi için bkz. PowerShell Uzaktan İletişiminde ikinci atlamayı yapma.
Gerekli Kimlik Bilgisi Güvenlik Desteği Sağlayıcısı (CredSSP) temsilcisi yerel bilgisayardaki istemci ayarlarında ve uzak bilgisayardaki hizmet ayarlarında etkinleştirilir. Bu örnekteki komutları çalıştırmak için yerel bilgisayarda ve uzak bilgisayarda Yöneticiler grubunun üyesi olmanız gerekir.
Enable-WSManCredSSP -Role Client -DelegateComputer Server02
$s = New-PSSession Server02
Invoke-Command -Session $s -ScriptBlock { Enable-WSManCredSSP -Role Server -Force }
$parameters = @{
ComputerName = 'Server02'
ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
Authentication = 'CredSSP'
Credential = 'Domain01\Admin01'
}
Invoke-Command @parameters
cmdlet'i Enable-WSManCredSSP
, Server01 yerel bilgisayarından Server02 uzak bilgisayarına CredSSP temsilcisi seçmeyi etkinleştirir. Role parametresi, yerel bilgisayardaki CredSSP istemci ayarını yapılandırmak için İstemci'yi belirtir.
New-PSSession
Server02 için bir PSSession nesnesi oluşturur ve nesnesini değişkeninde $s
depolar.
cmdlet'i Invoke-Command
, server02 adlı uzak bilgisayara bağlanmak için değişkenini $s
kullanır. ScriptBlock parametresi uzak bilgisayarda çalışırEnable-WSManCredSSP
. Role parametresi, uzak bilgisayardaki CredSSP sunucu ayarını yapılandırmak için Sunucu'nu belirtir.
değişkeni, $parameters
ağ paylaşımına bağlanmak için parametre değerlerini içerir. cmdlet'i Invoke-Command
içindeki oturumda $s
bir Get-Item
komut çalıştırır. Bu komut, ağ paylaşımından \\Net03\Scripts
bir betik alır. Komut, CredSSP değeriyle Authentication parametresini ve Domain01\Admin01 değeriyle Credential parametresini kullanır.
Örnek 18: Birçok uzak bilgisayarda betik başlatma
Bu örnek, yüzden fazla bilgisayarda bir betik çalıştırır. Yerel bilgisayar üzerindeki etkiyi en aza indirmek için her bilgisayara bağlanır, betiği başlatır ve ardından her bilgisayarla bağlantıyı keser. Betik, bağlantısız oturumlarda çalışmaya devam eder.
$parameters = @{
ComputerName = (Get-Content -Path C:\Test\Servers.txt)
InDisconnectedSession = $true
FilePath = '\\Scripts\Public\ConfigInventory.ps1'
SessionOption = @{
OutputBufferingMode = 'Drop'
IdleTimeout = [timespan]::FromHours(12)
}
}
Invoke-Command @parameters
komutu betiği çalıştırmak için kullanır Invoke-Command
. ComputerName parametresinin değeri, uzak Get-Content
bilgisayarların adlarını bir metin dosyasından alan bir komutdur. InDisconnectedSession parametresi, komutu başlatır başlatmaz oturumların bağlantısını keser. FilePath parametresinin değeri, her bilgisayarda çalışan betiktirInvoke-Command
.
SessionOption değeri bir karma tablodur. OutputBufferingMode değeri olarak, Drop
IdleTimeout değeri ise 12 saat olarak ayarlanır.
Bağlantısız oturumlarda çalıştırılan komut ve betiklerin sonuçlarını almak için cmdlet'ini Receive-PSSession
kullanın.
Örnek 19: SSH kullanarak uzak bilgisayarda komut çalıştırma
Bu örnekte, Secure Shell (SSH) kullanarak uzak bir bilgisayarda komut çalıştırma işlemi gösterilmektedir. SSH uzak bilgisayarda parola isteyecek şekilde yapılandırılmışsa parola istemi alırsınız. Aksi takdirde SSH anahtar tabanlı kullanıcı kimlik doğrulamasını kullanmanız gerekir.
Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * }
Örnek 20: SSH kullanarak uzak bir bilgisayarda komut çalıştırma ve kullanıcı kimlik doğrulama anahtarı belirtme
Bu örnekte, SSH kullanarak uzak bilgisayarda bir komutun nasıl çalıştırılacağını ve kullanıcı kimlik doğrulaması için bir anahtar dosyasının nasıl belirtileceğini gösterir. Anahtar kimlik doğrulaması başarısız olmadığı ve uzak bilgisayar temel parola kimlik doğrulamasına izin verecek şekilde yapılandırılmadığı sürece sizden parola istenmez.
$parameters = @{
HostName = 'UserA@LinuxServer01'
ScriptBlock = { Get-MailBox * }
KeyFilePath = '/UserA/UserAKey_rsa'
}
Invoke-Command
Örnek 21: İş olarak SSH kullanarak birden çok uzak bilgisayarda betik dosyası çalıştırma
Bu örnekte, SSH ve SSHConnection parametre kümesi kullanılarak birden çok uzak bilgisayarda bir betik dosyasının nasıl çalıştırlanacağı gösterilmektedir. SSHConnection parametresi, her bilgisayar için bağlantı bilgilerini içeren bir karma tablo dizisi alır. Bu örnek, hedef uzak bilgisayarların anahtar tabanlı kullanıcı kimlik doğrulamasını destekleyecek şekilde yapılandırılmış SSH'ye sahip olmasını gerektirir.
$sshConnections = @(
@{
HostName = "WinServer1"
UserName = "Domain\UserA"
KeyFilePath = "C:\Users\UserA\id_rsa"
}
@{
HostName = "UserB@LinuxServer5"
KeyFilePath = "/Users/UserB/id_rsa"
}
)
$results = Invoke-Command -FilePath c:\Scripts\GetInfo.ps1 -SSHConnection $sshConnections
Örnek 22: SSH seçeneklerini kullanarak uzak bir SSH oturumuna bağlanma
Bu örnekte, SSH seçeneklerini kullanarak uzak Linux tabanlı bir makinede betik dosyasının nasıl çalıştırılacakları gösterilmektedir. Options parametresi, uzak sistemle kurulan bağlantıyı temel alınan ssh
komuta seçenek olarak geçirilen değerlerin karma tablosu alır.
$options = @{
Port=22
User = 'UserB'
Host = 'LinuxServer5'
}
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -KeyFilePath '/Users/UserB/id_rsa' -Options $options
Parametreler
-AllowRedirection
Bu bağlantının alternatif bir Tekdüzen Kaynak Tanımlayıcısı'na (URI) yeniden yönlendirilmesine izin verir.
ConnectionURI parametresini kullandığınızda, uzak hedef farklı bir URI'ye yeniden yönlendirmeye yönelik bir yönerge döndürebilir. Varsayılan olarak, PowerShell bağlantıları yeniden yönlendirmez, ancak bağlantıyı yeniden yönlendirmesine izin vermek için bu parametreyi kullanabilirsiniz.
MaximumConnectionRedirectionCount oturum seçeneği değerini değiştirerek bağlantının yeniden yönlendirilme sayısını da sınırlayabilirsiniz. Cmdlet'in New-PSSessionOption
MaximumRedirection parametresini kullanın veya tercih değişkeninin MaximumConnectionRedirectionCount özelliğini $PSSessionOption
ayarlayın. Varsayılan değer 5 olur.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ApplicationName
Bağlantı URI'sinin uygulama adı kesimini belirtir. Komutunda ConnectionURI parametresini kullanmadığınızda uygulama adını belirtmek için bu parametreyi kullanın.
Varsayılan değer, yerel bilgisayardaki tercih değişkeninin değeridir $PSSessionApplicationName
. Bu tercih değişkeni tanımlanmamışsa, varsayılan değer WSMAN'dır. Bu değer çoğu kullanım için uygundur. Daha fazla bilgi için bkz. about_Preference_Variables.
WinRM hizmeti, bağlantı isteğine hizmet vermek üzere bir dinleyici seçmek için uygulama adını kullanır. Bu parametrenin değeri, uzak bilgisayardaki bir dinleyicinin URLPrefix özelliğinin değeriyle eşleşmelidir.
Type: | String |
Position: | Named |
Default value: | $PSSessionApplicationName if set on the local computer, otherwise WSMAN |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-ArgumentList
Scriptblock için parametrelerin değerlerini sağlar. Betik bloğundaki parametreler ArgumentList'e sağlanan dizi değerinden konuma göre geçirilir. Bu, dizi sıçraması olarak bilinir. ArgumentList'in davranışı hakkında daha fazla bilgi için bkz. about_Splatting.
Type: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-AsJob
Bu cmdlet'in uzak bilgisayarda arka plan işi olarak komutunu çalıştırdığını gösterir. Tamamlanması uzun zaman alan komutları çalıştırmak için bu parametreyi kullanın.
AsJob parametresini kullandığınızda, komut işi temsil eden bir nesne döndürür ve ardından komut istemini görüntüler. İş biterken oturumda çalışmaya devam edebilirsiniz. İşi yönetmek için cmdlet'lerini *-Job
kullanın. İş sonuçlarını almak için cmdlet'ini Receive-Job
kullanın.
AsJob parametresi, bir Start-Job
cmdlet'i uzaktan çalıştırmak için cmdlet'ini kullanmaya Invoke-Command
benzer. Ancak AsJob ile, iş uzak bir bilgisayarda çalıştırılıyor olsa bile yerel bilgisayarda oluşturulur. Uzak işin sonuçları otomatik olarak yerel bilgisayara döndürülür.
PowerShell arka plan işleri hakkında daha fazla bilgi için bkz. about_Jobs ve about_Remote_Jobs.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Authentication
Kullanıcının kimlik bilgilerini doğrulamak için kullanılan mekanizmayı belirtir. CredSSP kimlik doğrulaması yalnızca Windows Vista, Windows Server 2008 ve Windows işletim sisteminin sonraki sürümlerinde kullanılabilir.
Bu parametre için kabul edilebilir değerler şunlardır:
- Varsayılan
- Temel
- Credssp
- Özet
- Kerberos
- Anlaşma
- NegotiateWithImplicitCredential
Varsayılan değer Varsayılan'dır.
Bu parametrenin değerleri hakkında daha fazla bilgi için bkz . AuthenticationMechanism Sabit Listesi.
Dikkat
Kullanıcının kimlik bilgilerinin kimlik doğrulaması için uzak bir bilgisayara geçirildiği Kimlik Bilgisi Güvenlik Desteği Sağlayıcısı (CredSSP) kimlik doğrulaması, uzak ağ paylaşımına erişme gibi birden fazla kaynakta kimlik doğrulaması gerektiren komutlar için tasarlanmıştır. Bu mekanizma, uzak işlemin güvenlik riskini artırır. Uzak bilgisayarın güvenliği aşılırsa, bu bilgisayara geçirilen kimlik bilgileri ağ oturumunu denetlemek için kullanılabilir. Daha fazla bilgi için bkz . Kimlik Bilgileri Güvenlik Desteği Sağlayıcısı.
Type: | AuthenticationMechanism |
Accepted values: | Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential |
Position: | Named |
Default value: | Default |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CertificateThumbprint
Bağlantısı kesilmiş oturuma bağlanma izni olan bir kullanıcı hesabının dijital ortak anahtar sertifikasını (X509) belirtir. Sertifikanın sertifika parmak izini girin.
Sertifikalar, istemci sertifikası tabanlı kimlik doğrulamasında kullanılır. Bunlar yalnızca yerel kullanıcı hesaplarıyla eşlenebilir ve etki alanı hesaplarıyla çalışmaz.
Sertifika parmak izini almak için PowerShell Cert: sürücüsünde veya Get-Item
Get-ChildItem
komutunu kullanın.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ComputerName
Komutun üzerinde çalıştığı bilgisayarları belirtir. Varsayılan, yerel bilgisayardır.
ComputerName parametresini kullandığınızda, PowerShell yalnızca belirtilen komutu çalıştırmak için kullanılan geçici bir bağlantı oluşturur ve ardından kapatılır. Kalıcı bir bağlantıya ihtiyacınız varsa Session parametresini kullanın.
Virgülle ayrılmış bir listede bir veya daha fazla bilgisayarın NETBIOS adını, IP adresini veya tam etki alanı adını yazın. Yerel bilgisayarı belirtmek için bilgisayar adını, localhost'ı veya bir nokta (.
) yazın.
ComputerName değerinde bir IP adresi kullanmak için komutun Credential parametresini içermesi gerekir. Bilgisayar HTTPS aktarımı için yapılandırılmalıdır veya uzak bilgisayarın IP adresi yerel bilgisayarın WinRM TrustedHosts listesine eklenmelidir. TrustedHosts listesine bilgisayar adı ekleme yönergeleri için bkz. Güvenilen Ana Bilgisayar Listesine Bilgisayar Ekleme.
Windows Vista ve Windows işletim sisteminin sonraki sürümlerinde, yerel bilgisayarı ComputerName değerine eklemek için PowerShell'i Yönetici olarak çalıştır seçeneğini kullanarak çalıştırmanız gerekir.
Type: | String[] |
Aliases: | Cn |
Position: | 0 |
Default value: | Local computer |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ConfigurationName
Yeni PSSession için kullanılan oturum yapılandırmasını belirtir.
Oturum yapılandırması için bir yapılandırma adı veya tam kaynak URI'sini girin. Yalnızca yapılandırma adını belirtirseniz, aşağıdaki şema URI'sinin başına eklenir: http://schemas.microsoft.com/PowerShell
.
SSH ile kullanıldığında, bu parametre hedefte kullanılacak alt sistemi içinde sshd_config
tanımlandığı şekilde belirtir. SSH için varsayılan değer alt sistemdir powershell
.
Oturumun oturum yapılandırması uzak bilgisayarda bulunur. Belirtilen oturum yapılandırması uzak bilgisayarda yoksa, komut başarısız olur.
Varsayılan değer, yerel bilgisayardaki tercih değişkeninin değeridir $PSSessionConfigurationName
. Bu tercih değişkeni ayarlı değilse varsayılan değer Microsoft.PowerShell'dir. Daha fazla bilgi için bkz. about_Preference_Variables.
Type: | String |
Position: | Named |
Default value: | $PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-ConnectingTimeout
İlk SSH bağlantısının tamamlanması için izin verilen milisaniye cinsinden süreyi belirtir. Bağlantı belirtilen süre içinde tamamlanmazsa bir hata döndürülür.
Bu parametre PowerShell 7.2'de tanıtıldı
Type: | Int32 |
Position: | Named |
Default value: | Unlimited |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ConnectionUri
Oturumun bağlantı uç noktasını tanımlayan bir Tekdüzen Kaynak Tanımlayıcısı (URI) belirtir. URI tam nitelikli olmalıdır.
Bu dizenin biçimi aşağıdaki gibidir:
<Transport>://<ComputerName>:<Port>/<ApplicationName>
Varsayılan değer aşağıdaki gibidir:
http://localhost:5985/WSMAN
Bağlantı URI'sini belirtmezseniz, bağlantı URI'sinin değerlerini belirtmek için UseSSL ve Bağlantı Noktası parametrelerini kullanabilirsiniz.
URI'nin Aktarım kesimi için geçerli değerler HTTP ve HTTPS'dir. Aktarım kesimiyle bağlantı URI'sini belirtirseniz ancak bağlantı noktası belirtmezseniz, oturum şu standart bağlantı noktalarıyla oluşturulur: HTTP için 80 ve HTTPS için 443. PowerShell uzaktan iletişiminde varsayılan bağlantı noktalarını kullanmak için HTTP için 5985 veya HTTPS için 5986 bağlantı noktasını belirtin.
Hedef bilgisayar bağlantıyı farklı bir URI'ye yeniden yönlendirirse, komutunda AllowRedirection parametresini kullanmadığınız sürece PowerShell yeniden yönlendirmeyi engeller.
Type: | Uri[] |
Aliases: | URI, CU |
Position: | 0 |
Default value: | http://localhost:5985/WSMAN |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ContainerId
Kapsayıcı kimlikleri dizisini belirtir.
Type: | String[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Credential
Bu eylemi gerçekleştirme izni olan bir kullanıcı hesabı belirtir. Varsayılan, mevcut kullanıcıdır.
User01 veya Domain01\User01 gibi bir kullanıcı adı yazın veya cmdlet tarafından Get-Credential
oluşturulan bir PSCredential nesnesi girin. Bir kullanıcı adı yazarsanız parolayı girmeniz istenir.
Kimlik bilgileri bir PSCredential nesnesinde depolanır ve parola bir SecureString olarak depolanır.
Not
SecureString veri koruması hakkında daha fazla bilgi için bkz. SecureString ne kadar güvenli?.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-EnableNetworkAccess
Bu cmdlet'in geri döngü oturumlarına etkileşimli bir güvenlik belirteci eklediğini gösterir. Etkileşimli belirteç, geri döngü oturumunda diğer bilgisayarlardan veri alan komutları çalıştırmanıza olanak tanır. Örneğin, oturumda xml dosyalarını uzak bir bilgisayardan yerel bilgisayara kopyalayan bir komut çalıştırabilirsiniz.
Geri döngü oturumu, aynı bilgisayarda ortaya çıkan ve biten bir PSSession'dır . Geri döngü oturumu oluşturmak için ComputerName parametresini atlar veya değerini nokta (.
), localhost veya yerel bilgisayarın adı olarak ayarlayın.
Varsayılan olarak, geri döngü oturumları bir ağ belirteci kullanılarak oluşturulur ve bu da uzak bilgisayarlarda kimlik doğrulaması için yeterli izin sağlamayabilir.
EnableNetworkAccess parametresi yalnızca geri döngü oturumlarında etkilidir. Uzak bilgisayarda oturum oluştururken EnableNetworkAccess kullanırsanız, komut başarılı olur, ancak parametresi yoksayılır.
Oturum kimlik bilgilerini diğer bilgisayarlara devreden Authentication parametresinin CredSSP değerini kullanarak bir geri döngü oturumunda uzaktan erişime izin verebilirsiniz.
Bilgisayarı kötü amaçlı erişimden korumak için, EnableNetworkAccess kullanılarak oluşturulan etkileşimli belirteçlere sahip bağlantısı kesilmiş geri döngü oturumları yalnızca oturumun oluşturulduğu bilgisayardan yeniden bağlanabilir. CredSSP kimlik doğrulaması kullanan bağlantısız oturumlar diğer bilgisayarlardan yeniden bağlanabilir. Daha fazla bilgi için bkz. Disconnect-PSSession
.
Bu parametre PowerShell 3.0'da kullanıma sunulmuştur.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Bu cmdlet'in bir veya daha fazla uzak bilgisayarda çalıştırıldığı yerel bir betik belirtir. Betiğin yolunu ve dosya adını girin veya bir betik yolunu adresine yöneltin Invoke-Command
. Betik yerel bilgisayarda veya yerel bilgisayarın erişebileceği bir dizinde bulunmalıdır. Betikteki parametrelerin değerlerini belirtmek için ArgumentList kullanın.
Bu parametreyi kullandığınızda, PowerShell belirtilen betik dosyasının içeriğini bir betik bloğuna dönüştürür, betik bloğunu uzak bilgisayara iletir ve uzak bilgisayarda çalıştırır.
Type: | String |
Aliases: | PSPath |
Position: | 1 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HideComputerName
Bu cmdlet'in çıkış ekranındaki her nesnenin bilgisayar adını atladığını gösterir. Varsayılan olarak, nesneyi oluşturan bilgisayarın adı ekranda görünür.
Bu parametre yalnızca çıkış görüntüsünü etkiler. Nesneyi değiştirmez.
Type: | SwitchParameter |
Aliases: | HCN |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HostName
Secure Shell (SSH) tabanlı bağlantı için bir bilgisayar adları dizisi belirtir. Bu, Uzak bilgisayara bağlantının Windows WinRM yerine SSH kullanılarak yapılması dışında ComputerName parametresine benzer.
Bu parametre PowerShell 6.0'da kullanıma sunulmuştur.
Type: | String[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InDisconnectedSession
Bu cmdlet'in bağlantısı kesilmiş bir oturumda bir komut veya betik çalıştırdığını gösterir.
InDisconnectedSession parametresini kullandığınızda, Invoke-Command
her uzak bilgisayarda kalıcı bir oturum oluşturur, ScriptBlock veya FilePath parametresi tarafından belirtilen komutu başlatır ve oturum bağlantısını keser. Komutlar bağlantısız oturumlarda çalışmaya devam eder. InDisconnectedSession , uzak oturumlarla bağlantı kurmadan komut çalıştırmanızı sağlar. Sonuç döndürülmeden önce oturumun bağlantısı kesildiğinden , InDisconnectedSession tüm komut sonuçlarının oturumlar arasında bölünmek yerine yeniden bağlanan oturuma döndürülmesini sağlar.
InDisconnectedSession'iSession parametresi veya AsJob parametresiyle kullanamazsınız.
InDisconnectedSession kullanan komutlar, bağlantısı kesilmiş oturumu temsil eden bir PSSession nesnesi döndürür. Komut çıkışını döndürmez. Bağlantısı kesilmiş oturuma bağlanmak için veya Receive-PSSession
cmdlet'lerini kullanınConnect-PSSession
. Oturumda çalıştırılan komutların sonuçlarını almak için cmdlet'ini Receive-PSSession
kullanın. Bağlantısı kesilmiş bir oturumda çıkış oluşturan komutları çalıştırmak için OutputBufferingMode oturum seçeneğinin değerini Drop olarak ayarlayın. Bağlantısı kesilmiş oturuma bağlanmayı planlıyorsanız oturumdaki boşta kalma zaman aşımını oturumu silmeden önce bağlanmanız için yeterli süre sağlayacak şekilde ayarlayın.
SessionOption parametresinde veya tercih değişkeninde çıkış arabelleği modunu ve boşta kalma zaman aşımını $PSSessionOption
ayarlayabilirsiniz. Oturum seçenekleri hakkında daha fazla bilgi için bkz New-PSSessionOption
. ve about_Preference_Variables.
Bağlantısı Kesilmiş Oturumlar özelliği hakkında daha fazla bilgi için bkz. about_Remote_Disconnected_Sessions.
Bu parametre PowerShell 3.0'da kullanıma sunulmuştur.
Type: | SwitchParameter |
Aliases: | Disconnected |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Komutun girişini belirtir. Nesneleri içeren bir değişken girin veya nesneleri alan bir komut veya ifade yazın.
InputObject parametresini kullanırken, giriş nesnelerini temsil etmek için ScriptBlock parametresinin değerindeki otomatik değişkeni kullanın$Input
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-JobName
Arka plan işi için kolay bir ad belirtir. Varsayılan olarak, işler olarak adlandırılır Job<n>
; burada <n>
sıra numarasıdır.
Bir komutta JobName parametresini kullanırsanız, komut bir iş olarak çalıştırılır ve Invoke-Command
komuta AsJob dahil etmeseniz bile bir iş nesnesi döndürür.
PowerShell arka plan işleri hakkında daha fazla bilgi için bkz. about_Jobs.
Type: | String |
Position: | Named |
Default value: | Job<n> |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-KeyFilePath
Uzak bilgisayardaki bir kullanıcının kimliğini doğrulamak için Secure Shell (SSH) tarafından kullanılan anahtar dosya yolunu belirtir.
SSH, kullanıcı kimlik doğrulamasının temel parola kimlik doğrulamasına alternatif olarak özel ve ortak anahtarlar aracılığıyla gerçekleştirilmesini sağlar. Uzak bilgisayar anahtar kimlik doğrulaması için yapılandırılmışsa, bu parametre kullanıcıyı tanımlayan anahtarı sağlamak için kullanılabilir.
Bu parametre PowerShell 6.0'da kullanıma sunulmuştur.
Type: | String |
Aliases: | IdentityFilePath |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-NoNewScope
Bu cmdlet'in geçerli kapsamda belirtilen komutu çalıştırdığını gösterir. Varsayılan olarak, Invoke-Command
komutları kendi kapsamlarında çalıştırır.
Bu parametre yalnızca geçerli oturumda çalışan komutlarda, yani hem ComputerName hem de Session parametrelerini atlayan komutlarda geçerlidir.
Bu parametre PowerShell 3.0'da kullanıma sunulmuştur.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Options
Uzak SSH tabanlı bir oturuma bağlanırken kullanılan SSH seçeneklerinin karma tablosu belirtir. Olası seçenekler, ssh komutunun Unix tabanlı sürümü tarafından desteklenen tüm değerlerdir.
Parametreler tarafından açıkça geçirilen tüm değerler , Seçenekler karma tablosuna geçirilen değerlerden önceliklidir. Örneğin, Bağlantı Noktası parametresinin kullanılması, Seçenekler karma tablosuna geçirilen tüm Port
anahtar-değer çiftlerini geçersiz kılar.
Bu parametre PowerShell 7.3'e eklendi.
Type: | Hashtable |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Port
Bu komut için kullanılan uzak bilgisayardaki ağ bağlantı noktasını belirtir. Uzak bilgisayara bağlanmak için, uzak bilgisayarın bağlantının kullandığı bağlantı noktasını dinliyor olması gerekir. Varsayılan bağlantı noktaları 5985 (HTTP için WinRM bağlantı noktası) ve 5986 'dır (HTTPS için WinRM bağlantı noktası).
Alternatif bir bağlantı noktası kullanmadan önce, uzak bilgisayardaki WinRM dinleyicisini bu bağlantı noktasında dinleyecek şekilde yapılandırın. Dinleyiciyi yapılandırmak için PowerShell istemine aşağıdaki iki komutu yazın:
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>
Gerekmedikçe Port parametresini kullanmayın. Komutta ayarlanan bağlantı noktası, komutun çalıştığı tüm bilgisayarlar veya oturumlar için geçerlidir. Alternatif bir bağlantı noktası ayarı, komutun tüm bilgisayarlarda çalışmasını engelleyebilir.
Type: | Int32 |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RemoteDebug
Çağrılan komutu uzak PowerShell oturumunda hata ayıklama modunda çalıştırmak için kullanılır.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAsAdministrator
Bu cmdlet'in yönetici olarak bir komut çağırdığını gösterir.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Çalıştırılacak komutları belirtir. Betik bloğu oluşturmak için komutları küme ayraçları ({ }
) içine alın. komutu uzaktan çalıştırmak için kullanılırken Invoke-Command
, komuttaki tüm değişkenler uzak bilgisayarda değerlendirilir.
Not
Scriptblock parametreleri yalnızca konuma göre ArgumentList'ten geçirilebilir. Anahtar parametreleri konuma göre geçirilemez. SwitchParameter türü gibi davranan bir parametreye ihtiyacınız varsa, bunun yerine boole türü kullanın.
Type: | ScriptBlock |
Aliases: | Command |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Session
Bu cmdlet'in komutunu çalıştırdığı bir oturum dizisini belirtir. PSSession nesnelerini içeren bir değişken veya veya komutu gibi PSSession nesnelerini oluşturan veya alan bir New-PSSession
Get-PSSession
komut girin.
PSSession oluşturduğunuzda, PowerShell uzak bilgisayara kalıcı bir bağlantı kurar. Verileri paylaşan bir dizi ilgili komutu çalıştırmak için PSSession kullanın. Tek bir komut veya bir dizi ilişkisiz komut çalıştırmak için ComputerName parametresini kullanın. Daha fazla bilgi için bkz. about_PSSessions.
Type: | PSSession[] |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SessionName
Bağlantısı kesilmiş bir oturum için kolay bir ad belirtir. Sonraki komutlarda, örneğin bir Get-PSSession
komutta oturuma başvurmak için adını kullanabilirsiniz. Bu parametre yalnızca InDisconnectedSession parametresiyle geçerlidir.
Bu parametre PowerShell 3.0'da kullanıma sunulmuştur.
Type: | String[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SessionOption
Oturum için gelişmiş seçenekleri belirtir. Cmdlet'ini kullanarak New-PSSessionOption
oluşturduğunuz bir SessionOption nesnesi veya anahtarların oturum seçeneği adları ve değerlerin oturum seçeneği değerleri olduğu bir karma tablosu girin.
Not
SessionOption için bir karma tablo belirtirseniz, PowerShell karma tablosu bir System.Management.Autiomation.Remoting.PSSessionOption nesnesine dönüştürür. Karma tablo içinde belirtilen anahtarların değerleri, nesnesinin eşleşen özelliğine yazılır. Bu, çağrısından New-PSSessionOption
farklı davranır. Örneğin, IdleTimeout gibi zaman aşımı özellikleri için System.TimeSpan değerleri, bir tamsayı değerini milisaniye yerine değer çizgilerine dönüştürür.
PSSessionOption nesnesi ve özellikleri hakkında daha fazla bilgi için bkz. PSSessionOption
Seçenekler için varsayılan değerler, ayarlanmışsa tercih değişkeninin $PSSessionOption
değerine göre belirlenir. Aksi takdirde, varsayılan değerler oturum yapılandırmasında ayarlanan seçenekler tarafından oluşturulur.
Oturum seçeneği değerleri, tercih değişkeninde ve oturum yapılandırmasında $PSSessionOption
ayarlanan oturumlar için varsayılan değerlerden önceliklidir. Ancak bunlar oturum yapılandırmasında ayarlanan maksimum değer, kota veya sınırlardan öncelikli değildir.
Varsayılan değerleri içeren oturum seçeneklerinin açıklaması için bkz New-PSSessionOption
. . Tercih değişkeni hakkında $PSSessionOption
bilgi için bkz. about_Preference_Variables. Oturum yapılandırmaları hakkında daha fazla bilgi edinmek için bkz. about_Session_Configurations.
Type: | PSSessionOption |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SSHConnection
Bu parametre, her karma tablosunun Secure Shell (SSH) bağlantısı kurmak için gereken bir veya daha fazla bağlantı parametresi içerdiği karma tablo dizisini alır. SSHConnection parametresi, her oturumun farklı bağlantı bilgileri gerektirdiği birden çok oturum oluşturmak için kullanışlıdır.
Karma tablo aşağıdaki üyelere sahiptir:
- ComputerName (veya HostName)
- Bağlantı noktası
- Username
- KeyFilePath (veya IdentityFilePath)
ComputerName (veya HostName), gerekli olan tek anahtar-değer çiftidir.
Bu parametre PowerShell 6.0'da kullanıma sunulmuştur.
Type: | Hashtable[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SSHTransport
Uzak bağlantının Secure Shell (SSH) kullanılarak kurulduğunu gösterir.
PowerShell varsayılan olarak uzak bir bilgisayara bağlanmak için Windows WinRM kullanır. Bu anahtar, PowerShell'i SSH tabanlı uzak bağlantı kurmak için HostName parametresini kullanmaya zorlar.
Bu parametre PowerShell 6.0'da kullanıma sunulmuştur.
Type: | SwitchParameter |
Accepted values: | true |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Subsystem
Yeni PSSession için kullanılan SSH alt sistemini belirtir.
Bu, sshd_config'de tanımlandığı gibi hedefte kullanılacak alt sistemi belirtir. Alt sistem, önceden tanımlanmış parametrelerle belirli bir PowerShell sürümünü başlatır. Belirtilen alt sistem uzak bilgisayarda yoksa, komut başarısız olur.
Bu parametre kullanılmazsa, varsayılan alt sistemdir powershell
.
Type: | String |
Position: | Named |
Default value: | powershell |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ThrottleLimit
Bu komutu çalıştırmak için oluşturulabilecek en fazla eş zamanlı bağlantı sayısını belirtir. Bu parametreyi atlar veya 0 değerini girerseniz varsayılan değer olan 32 kullanılır.
Kısıtlama sınırı yalnızca geçerli komut için geçerlidir; oturuma veya bilgisayara uygulanmaz.
Type: | Int32 |
Position: | Named |
Default value: | 32 |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UserName
Uzak bilgisayarda komut çalıştırmak için kullanılan hesabın kullanıcı adını belirtir. Kullanıcı kimlik doğrulama yöntemi, Secure Shell'in (SSH) uzak bilgisayarda nasıl yapılandırıldığına bağlıdır.
SSH temel parola kimlik doğrulaması için yapılandırılmışsa kullanıcı parolası istenir.
SSH anahtar tabanlı kullanıcı kimlik doğrulaması için yapılandırılmışsa KeyFilePath parametresi aracılığıyla bir anahtar dosyası yolu sağlanabilir ve parola istemi gerçekleşmez. İstemci kullanıcı anahtarı dosyası bilinen bir SSH konumunda yer alıyorsa anahtar tabanlı kimlik doğrulaması için KeyFilePath parametresi gerekmez ve kullanıcı kimlik doğrulaması kullanıcı adına göre otomatik olarak gerçekleşir. Daha fazla bilgi için platformunuzun anahtar tabanlı kullanıcı kimlik doğrulaması hakkındaki SSH belgelerine bakın.
Bu gerekli bir parametre değildir. UserName parametresi belirtilmezse, bağlantı için geçerli oturum açmış kullanıcı adı kullanılır.
Bu parametre PowerShell 6.0'da kullanıma sunulmuştur.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseSSL
Bu cmdlet'in uzak bilgisayara bağlantı kurmak için Güvenli Yuva Katmanı (SSL) protokolunu kullandığını gösterir. Varsayılan olarak SSL kullanılmaz.
WS-Management ağ üzerinden aktarılan tüm PowerShell içeriğini şifreler. UseSSL parametresi, verileri HTTP yerine HTTPS üzerinden gönderen ek bir korumadır.
Bu parametreyi kullanıyorsanız ancak komut için kullanılan bağlantı noktasında SSL kullanılamıyorsa, komut başarısız olur.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-VMId
Sanal makinelerin kimlik dizisini belirtir.
Type: | Guid[] |
Aliases: | VMGuid |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-VMName
Sanal makinelerin ad dizisini belirtir.
Type: | String[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Girişler
Betik bloğundaki bir komutu öğesine yöneltebilirsiniz Invoke-Command
. komutundaki $Input
giriş nesnelerini temsil etmek için otomatik değişkenini kullanın.
Çıkışlar
System.Management.Automation.PSRemotingJob
AsJob parametresini kullanırsanız, bu cmdlet bir iş nesnesi döndürür.
InDisconnectedSession parametresini kullanırsanız, bu cmdlet bir PSSession nesnesi döndürür.
Varsayılan olarak, bu cmdlet ScriptBlock parametresinin değeri olan çağrılan komutun çıkışını döndürür.
Notlar
PowerShell, için Invoke-Command
aşağıdaki diğer adları içerir:
- Tüm platformlar:
icm
Windows Vista'da ve Windows işletim sisteminin sonraki sürümlerinde, yerel bilgisayarda bir komut çalıştırmak için ComputerName parametresini Invoke-Command
kullanmak için, PowerShell'i Yönetici olarak çalıştır seçeneğini kullanarak çalıştırmanız gerekir.
Komutları birden çok bilgisayarda çalıştırdığınızda PowerShell, bilgisayarlara listede göründükleri sırayla bağlanır. Ancak, komut çıkışı uzak bilgisayarlardan alınma sırasına göre görüntülenir ve bu farklı olabilir.
Çalıştıran komuttan kaynaklanan hatalar, Invoke-Command
komut sonuçlarına eklenir.
Yerel komuttaki hataları sonlandıracak hatalar, uzak komutta sonlandırılmayan hatalar olarak değerlendirilir. Bu strateji, bir bilgisayardaki sonlandırma hatalarının çalıştırıldığı tüm bilgisayarlarda komutu kapatmamasını sağlar. Bu uygulama, tek bir bilgisayarda uzak komut çalıştırıldığında bile kullanılır.
Uzak bilgisayar yerel bilgisayarın güvendiği bir etki alanında değilse, bilgisayar kullanıcının kimlik bilgilerini doğrulayamayabilir. Uzak bilgisayarı WS-Management'taki güvenilen konaklar listesine eklemek için, sağlayıcıda WSMAN
aşağıdaki komutu kullanın; burada <Remote-Computer-Name>
uzak bilgisayarın adıdır:
Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>
InDisconnectedSession parametresini kullanarak bir PSSession bağlantısını kestiğinizde oturum durumu Bağlantısı Kesildi ve kullanılabilirlik Yok şeklindedir. State özelliğinin değeri geçerli oturuma göredir. Bağlantısı Kesildi değeri, PSSession'un geçerli oturuma bağlı olmadığı anlamına gelir. Ancak bu, PSSession'un tüm oturumlarla bağlantısının kesildiğini göstermez. Farklı bir oturuma bağlı olabilir. Oturuma bağlanıp bağlanamayacağınızı veya yeniden bağlanabileceğinizi belirlemek için Kullanılabilirlik özelliğini kullanın.
HiçbiriKullanılabilirlik değeri, oturuma bağlanabileceğinizi gösterir. Meşgul değeri, başka bir oturuma bağlı olduğundan PSSession'a bağlanamadığınızı gösterir. Oturumların State özelliğinin değerleri hakkında daha fazla bilgi için bkz . RunspaceState. Oturumların Kullanılabilirlik özelliğinin değerleri hakkında daha fazla bilgi için bkz . RunspaceAvailability.
HostName ve SSHConnection parametreleri PowerShell 6.0'dan başlayarak dahil edildi. Secure Shell (SSH) temelinde PowerShell uzaktan iletişim sağlamak için eklendiler. PowerShell ve SSH birden çok platformda (Windows, Linux, macOS) desteklenir ve PowerShell uzaktan iletişim, PowerShell ve SSH'nin yüklenip yapılandırıldığı bu platformlar üzerinde çalışır. Bu, yalnızca WinRM'yi temel alan önceki Windows uzaktan iletişiminden ayrıdır ve WinRM'ye özgü özelliklerin ve sınırlamaların çoğu geçerli değildir. Örneğin WinRM tabanlı kotalar, oturum seçenekleri, özel uç nokta yapılandırması ve bağlantı kesme/yeniden bağlantı özellikleri şu anda desteklenmemektedir. PowerShell SSH uzaktan iletişimini ayarlama hakkında daha fazla bilgi için bkz. SSH Üzerinden PowerShell Uzaktan İletişimi.
Yürütülebilir ssh
dosya, yapılandırma verilerini aşağıdaki sırayla aşağıdaki kaynaklardan elde eder:
- komut satırı seçenekleri
- kullanıcının yapılandırma dosyası (~/.ssh/config)
- sistem genelinde yapılandırma dosyası (/etc/ssh/ssh_config)
Aşağıdaki cmdlet parametreleri parametreler ve seçeneklerle ssh
eşlenir:
Cmdlet parametresi | ssh parametresi | eşdeğer ssh -o seçeneği |
---|---|---|
-KeyFilePath |
-i <KeyFilePath> |
-o IdentityFile=<KeyFilePath> |
-UserName |
-l <UserName> |
-o User=<UserName> |
-Port |
-p <Port> |
-o Port=<Port> |
-ComputerName -Subsystem |
-s <ComputerName> <Subsystem> |
-o Host=<ComputerName> |
Parametreler tarafından açıkça geçirilen tüm değerler , Seçenekler karma tablosuna geçirilen değerlerden önceliklidir. Dosyalar hakkında ssh_config
daha fazla bilgi için bkz. ssh_config(5).
İlişkili Bağlantılar
Geri Bildirim
Gönderin ve geri bildirimi görüntüleyin