Aracılığıyla paylaş


Invoke-Command

Komutları yerel ve uzak bilgisayarlarda çalıştırır.

Syntax

Invoke-Command
      [-StrictMode <Version>]
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      [-Port <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-Subsystem <String>]
      [-ConnectingTimeout <Int32>]
      [-SSHTransport]
      [-Options <Hashtable>]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-Subsystem <String>]
      [-ConnectingTimeout <Int32>]
      [-SSHTransport]
      [-Options <Hashtable>]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      -SSHConnection <Hashtable[]>
      [-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 çıktıları 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. Veri paylaşan bir dizi ilgili komut ç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. Bir arka plan işinde komut çalıştırmak için AsJob parametresini kullanın.

Komut dosyası bloğunu komut olarak ç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 komutları çağırmak için Secure Shell 'i (SSH) kullanabilirsiniz. SSH yerel bilgisayara yüklenmelidir ve uzak bilgisayar bir PowerShell SSH uç noktası ile yapılandırılmalıdır. SSH tabanlı bir 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 SSH Bağlan ion parametrelerini kullanırsınız. PowerShell SSH uzaktan iletişimini ayarlama hakkında daha fazla bilgi için bkz . SSH Üzerinden PowerShell Uzaktan İletişimi.

Bazı kod örnekleri, satır uzunluğunu azaltmak için sıçramayı 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, komut çalıştırma iznine sahip bir kullanıcı 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 bir 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 bir 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, 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'i 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: Veri paylaşan bir dizi komut çalıştırmak için oturum kullanma

Bu örnek, computername ve session parametrelerini kullanmanın etkilerini karşılaştırırInvoke-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 iki komutu da çalıştırarak çözülür.

Cmdlet, 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ğuyla 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ı belirtmek için ComputerName parametresini kullanır. Bilgisayarları belirtmek için cmdlet'ini Get-Content kullanarak Machine.txt dosyasının (bilgisayar adları dosyası) 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'i New-PSSession Server01 ve Server02 uzak bilgisayarlarında oturumlar oluşturur. Invoke-Command Cmdlet, oturumların her birinde bir arka plan işi çalıştırır. komutu , asjob parametresini kullanarak komutu arka plan işi olarak çalıştırır. Bu komut, iki uzak bilgisayarda çalıştırılacak işlerin her biri 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şkene $j kaydeder. Daha $j sonra değişken, iş nesnesinin Format-List tüm özelliklerini bir listede 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 $jReceive-Job aktarır ve sonuçları değişkende $results depolar.

Örnek 9: Uzak bilgisayardaki bir komut çalıştırmasında yerel değişkenleri ekleme

Bu örnekte, uzak bilgisayarda çalıştırılacak bir komutta 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 kullanıma sunulmuştur. 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 öneklenen değişkendir$Log.

Örnek 10: Bilgisayar adını gizleme

Bu örnekte, parametresinin HideComputerName parametresini Invoke-Commandkullanmanı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-Commandve $param2adlı iki değişkeni $param1 tanımlayan ScriptBlock parametresini kullanır. Get-ChildItemdeğ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-ChildItemPath 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-Commandbir 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şilemese 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, değişkende Get-Credential Windows Live ID kimlik bilgilerini 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 geçirilecek Invoke-Command 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. Bağlan ionURI parametresi, Exchange sunucusu uç noktasının URL'sini belirtir. Credential parametresi, değişkende $LiveCred depolanan kimlik bilgilerini belirtir. AuthenticationMechanism parametresi, temel kimlik doğrulamasının kullanımını belirtir. ScriptBlock parametresi, komutunu içeren bir betik bloğu belirtir.

Örnek 15: Oturum seçeneği kullanma

Bu örnekte SessionOption parametresi oluşturma ve kullanma 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şkene $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 bir 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 değişkenine New-PSSessionOption kaydedilmiş $max bir PSSessionOption nesnesi oluşturur. Komut, PSSessionOption nesnesinin Maximum Bağlan ionRedirectionCount özelliğini 1 olarak ayarlamak için MaximumRedirection parametresini kullanır.

Cmdlet uzak Invoke-Command bir Microsoft Exchange Server'da 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, Bağlan ionURI 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, 1'in yeniden yönlendirme sayısı değeri 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 nasıl erişildi 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şimi'nde ikinci atlamayı yapma.

Gerekli Kimlik Bilgisi Güvenlik Destek 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önetici istrators 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 temsilini etkinleştirir. Role parametresi, yerel bilgisayarda 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şkende $s depolar.

cmdlet'i Invoke-Command , uzak bilgisayar Olan Server02'ye bağlanmak için değişkenini $s kullanır. ScriptBlock parametresi uzak bilgisayarda çalışırEnable-WSManCredSSP. Role parametresi, Uzak bilgisayarda CredSSP sunucu ayarının yapılandırılır sunucusunu belirtir.

değişkeni, $parameters ağ paylaşımına bağlanmak için parametre değerlerini içerir. cmdlet'i Invoke-Command içindeki $soturumda 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\Yönetici 01 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ı kesilmiş 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 bilgisayarların adlarını bir metin dosyasından alan bir komutdurGet-Content. 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 olarakDrop, IdleTimeout değeri ise 12 saat olarak ayarlanır.

Bağlantısız oturumlarda çalışan 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ıldıysa bir 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 SSH Bağlan ion parametre kümesini kullanarak birden çok uzak bilgisayarda bir betik dosyasının nasıl çalıştırılmaya çalışılması gösterilmektedir. SSH Bağlan ion 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 SSH oturumuna Bağlan

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.

Bağlan ionURI parametresini kullandığınızda, uzak hedef farklı bir URI'ye yönlendirme yönergesi 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.

Ayrıca Maximum Bağlan ionRedirectionCount oturum seçeneği değerini değiştirerek bağlantının yeniden yönlendirilme sayısını sınırlayabilirsiniz. Cmdlet'in New-PSSessionOption MaximumRedirection parametresini kullanın veya tercih değişkeninin Maximum Bağlan ionRedirectionCount özelliğini $PSSessionOption ayarlayın. Varsayılan değer 5'tir.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

Bağlantı URI'sinin uygulama adı kesimini belirtir. Komutta Bağlan ionURI 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 dinleyicinin URLPrefix özelliğinin değeriyle eşleşmelidir.

Type:String
Position:Named
Default value:$PSSessionApplicationName if set on the local computer, otherwise WSMAN
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ArgumentList

Betik bloğu 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsJob

Bu cmdlet'in uzak bir 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. İş tamamlarken 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, cmdlet'i kullanarak cmdlet'i Start-Job uzaktan çalıştırmaya benzerInvoke-Command. 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
Required: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 aşağıdaki gibidir:

  • 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 Numaralandırması.

Dikkat

Kullanıcının kimlik bilgilerinin kimlik doğrulaması için uzak bir bilgisayara geçirildiği Kimlik Bilgisi Güvenlik Destek 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 Bilgisi Güvenlik Desteği Sağlayıcısı.

Type:AuthenticationMechanism
Accepted values:Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential
Position:Named
Default value:Default
Required:False
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 izi almak için PowerShell Cert: sürücüsünde veya Get-ItemGet-ChildItem komutunu kullanın.

Type:String
Position:Named
Default value:None
Required:False
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 listeye 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 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
Required:False
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_configtanımlandığı gibi 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
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ConnectingTimeout

İlk SSH bağlantısının tamamlanması için izin verilen süreyi milisaniye cinsinden belirtir. Bağlantı belirtilen süre içinde tamamlanmazsa bir hata döndürülür.

Bu parametre PowerShell 7.2'de kullanıma sunulmuştur

Type:Int32
Position:Named
Default value:Unlimited
Required:False
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 olarak nitelenmiş 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'si 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 numaralı bağlantı noktasını belirtin.

Hedef bilgisayar bağlantıyı farklı bir URI'ye 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ContainerId

Kapsayıcı kimlikleri dizisini belirtir.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Credential

Bu eylemi gerçekleştirme iznine sahip 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 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
Required:False
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 kaynaklanıp 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ıyorsanız, komut başarılı olur, ancak parametre 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
Required: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
Required:True
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
Required: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
Required:True
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 oturumlara bağlantı kurmadan komutları ç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'i Session parametresiyle 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 Connect-PSSession kullanın. 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 Bırak olarak ayarlayın. Bağlantısı kesilmiş oturuma bağlanmayı planlıyorsanız oturumu silmeden önce bağlanmanız için yeterli süre sağlayacak şekilde oturumdaki boşta kalma zaman aşımını 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
Required: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
Required:False
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> bir 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 eklemeseniz 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>
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyFilePath

Secure Shell (SSH) tarafından uzak bilgisayardaki bir kullanıcının kimliğini doğrulamak için 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
Required:False
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ıştırılacak 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
Required: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ı parametresini kullanmak, 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
Required:False
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 bağlantının kullandığı bağlantı noktasında dinliyor olmalıdır. 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ını 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\>

Gerekmediği sürece Bağlantı Noktası 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
Required:False
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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAsAdministrator

Bu cmdlet'in bir komutu Yönetici istrator olarak çağırdığını gösterir.

Type:SwitchParameter
Position:Named
Default value:False
Required: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

Betik bloğunun 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
Required:True
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 Get-PSSession komutu gibi PSSession nesnelerini oluşturan veya alan bir New-PSSession komut girin.

PSSession oluşturduğunuzda PowerShell uzak bilgisayara kalıcı bir bağlantı kurar. Veri paylaşan bir dizi ilgili komutu çalıştırmak için PSSession kullanın. Tek bir komut veya ilişkisiz bir dizi 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionName

Bağlantısı kesilmiş bir oturum için kolay bir ad belirtir. Komutu gibi Get-PSSession sonraki komutlarda oturuma başvurmak için bu adı 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
Required:False
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 gibi bir SessionOption nesnesi veya anahtarların oturum seçeneği adları ve değerlerin oturum seçeneği değerleri olduğu bir karma tablo girin.

Not

SessionOption için bir karma tablo belirtirseniz PowerShell, karma tabloyu System.Management.Autiomation.Remoting.PSSessionOption nesnesine dönüştürür. Karma tablo içinde belirtilen anahtarların değerleri, nesnenin eşleşen özelliğine yazılır. Bu, çağrısından New-PSSessionOptionfarklı davranır. Örneğin, IdleTimeout gibi zaman aşımı özellikleri için System.TimeSpan değerleri, bir tamsayı değerini milisaniye yerine onay işaretine 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
Required:False
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 bir karma tablo dizisi alır. SSH Bağlan ion 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), gereken tek anahtar-değer çiftidir.

Bu parametre PowerShell 6.0'da kullanıma sunulmuştur.

Type:Hashtable[]
Position:Named
Default value:None
Required:True
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
Required: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
Required:False
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
Required:False
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 bulunuyorsa anahtar tabanlı kimlik doğrulaması için KeyFilePath parametresi gerekli değildir 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
Required:False
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 iletilen 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VMId

Sanal makinelerin kimlik dizisini belirtir.

Type:Guid[]
Aliases:VMGuid
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VMName

Sanal makinelerin ad dizisini belirtir.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

Girişler

ScriptBlock

Betik bloğundaki bir komutu öğesine yöneltebilirsiniz Invoke-Command. Komuttaki $Input giriş nesnelerini göstermek 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.

PSSession

InDisconnectedSession parametresini kullanırsanız, bu cmdlet bir PSSession nesnesi döndürür.

Object

Varsayılan olarak, bu cmdlet ScriptBlock parametresinin değeri olan çağrılan komutun çıkışını döndürür.

Notlar

PowerShell için aşağıdaki diğer adları Invoke-Commandiç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, Yönetici olarak çalıştır seçeneğini kullanarak PowerShell'i ç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 çıktısı uzak bilgisayarlardan alınma sırasına göre görüntülenir ve bu farklı olabilir.

Komutun çalıştırıldığından kaynaklanan hatalar, komut Invoke-Command sonuçlarına eklenir. Yerel komuttaki hataları sonlandıracak hatalar, uzak bir komutta sonlandırılmayan hatalar olarak değerlendirilir. Bu strateji, bir bilgisayardaki sonlandırıcı hataları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 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 oturuma yeniden bağlanıp bağlanamayacağınızı belirlemek için Kullanılabilirlik özelliğini kullanın.

Hiçbiri Kullanı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.

PowerShell 6.0'dan başlayarak HostName ve SSH Bağlan ion parametreleri dahil edildi. Secure Shell(SSH) tabanlı PowerShell uzaktan iletişimini sağlamak için eklendiler. PowerShell ve SSH birden çok platformda (Windows, Linux, macOS) desteklenir ve PowerShell ve SSH'nin yüklendiği ve yapılandırıldığı bu platformlar üzerinde PowerShell uzaktan iletişim ç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ğlanma ö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 kaynaklardan aşağıdaki sırayla elde eder:

  1. komut satırı seçenekleri
  2. kullanıcının yapılandırma dosyası (~/.ssh/config)
  3. sistem genelinde yapılandırma dosyası (/etc/ssh/ssh_config)

Aşağıdaki cmdlet parametreleri parametrelere ve seçeneklere 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).