Bagikan melalui


Menggunakan JEA

Artikel ini menjelaskan berbagai cara untuk menyambungkan dan menggunakan titik akhir JEA.

Menggunakan JEA secara interaktif

Jika Anda menguji konfigurasi JEA atau memiliki tugas sederhana untuk pengguna, Anda dapat menggunakan JEA dengan cara yang sama seperti sesi PowerShell jarak jauh biasa. Untuk tugas remoting yang kompleks, disarankan untuk menggunakan implicit remoting. Jarak jauh implisit memungkinkan pengguna untuk beroperasi dengan objek data secara lokal.

Untuk menggunakan JEA secara interaktif, Anda perlu:

  • Nama komputer yang Anda sambungkan (bisa menjadi komputer lokal)
  • Nama titik akhir JEA yang terdaftar di komputer tersebut
  • Kredensial yang memiliki akses ke titik akhir JEA di komputer tersebut

Mengingat informasi tersebut, Anda dapat memulai sesi JEA menggunakan cmdlet New-PSSession atau Enter-PSSession .

$sessionParams = @{
    ComputerName      = 'localhost'
    ConfigurationName = 'JEAMaintenance'
    Credential        = Get-Credential
}
Enter-PSSession @sessionParams

Jika akun pengguna saat ini memiliki akses ke titik akhir JEA, Anda dapat menghilangkan parameter Kredensial .

Saat perintah PowerShell berubah kepada [localhost]: PS> Anda tahu bahwa Anda sekarang berinteraksi dengan sesi JEA jarak jauh. Anda dapat menjalankan Get-Command untuk memeriksa perintah mana yang tersedia. Konsultasikan dengan administrator Anda untuk mempelajari apakah ada batasan pada parameter yang tersedia atau nilai parameter yang diizinkan.

Ingat, sesi JEA beroperasi dalam NoLanguage mode. Beberapa cara Anda biasanya menggunakan PowerShell mungkin tidak tersedia. Misalnya, Anda tidak dapat menggunakan variabel untuk menyimpan data atau memeriksa properti pada objek yang dikembalikan dari cmdlet. Contoh berikut menunjukkan dua pendekatan untuk mendapatkan perintah yang sama agar berfungsi dalam NoLanguage mode.

# Using variables is prohibited in NoLanguage mode. The following will not work:
# $vm = Get-VM -Name 'SQL01'
# Start-VM -VM $vm

# You can use pipes to pass data through to commands that accept input from the pipeline
Get-VM -Name 'SQL01' | Start-VM

# You can also wrap subcommands in parentheses and enter them inline as arguments
Start-VM -VM (Get-VM -Name 'SQL01')

# You can also use parameter sets that don't require extra data to be passed in
Start-VM -VMName 'SQL01'

Untuk pemanggilan perintah yang lebih kompleks yang menyulitkan pendekatan ini, pertimbangkan untuk menggunakan jarak jauh implisit atau membuat fungsi kustom yang membungkus fungsionalitas yang Anda butuhkan. Untuk informasi selengkapnya tentang NoLanguageMode, lihat about_Language_Modes.

Menggunakan JEA dengan remoting implisit

PowerShell memiliki model jarak jauh implisit yang memungkinkan Anda mengimpor cmdlet proksi dari komputer jarak jauh dan berinteraksi dengan mereka seolah-olah mereka adalah perintah lokal. Remoting implisit dijelaskan dalam artikel blog Hey, Scripting Guy. Jarak jauh implisit berguna saat bekerja dengan JEA karena memungkinkan Anda untuk bekerja dengan cmdlet JEA dalam mode bahasa lengkap. Anda dapat menggunakan penyelesaian tab, variabel, memanipulasi objek, dan bahkan menggunakan skrip lokal untuk mengotomatiskan tugas terhadap titik akhir JEA. Setiap kali Anda memanggil perintah proksi, data dikirim ke titik akhir JEA pada komputer jarak jauh dan dijalankan di sana.

Implisit remoting bekerja dengan mengimpor cmdlet dari sesi PowerShell yang ada. Anda dapat secara opsional memilih untuk mengawali kata benda dari setiap cmdlet proksi dengan string yang Anda pilih. Awalan memungkinkan Anda membedakan perintah untuk sistem jarak jauh. Modul skrip sementara yang berisi semua perintah proksi dibuat dan diimpor selama durasi sesi PowerShell lokal Anda.

# Create a new PSSession to your JEA endpoint
$jeaSession = New-PSSession -ComputerName 'SERVER01' -ConfigurationName 'JEAMaintenance'

# Import the entire PSSession and prefix each imported cmdlet with "JEA"
Import-PSSession -Session $jeaSession -Prefix 'JEA'

# Invoke "Get-Command" on the remote JEA endpoint using the proxy cmdlet
Get-JEACommand

Penting

Beberapa sistem mungkin tidak dapat mengimpor seluruh sesi JEA karena kendala dalam cmdlet JEA default. Untuk mengatasi hal ini, hanya impor perintah yang Anda butuhkan dari sesi JEA dengan secara eksplisit memberikan nama mereka ke -CommandName parameter . Pembaruan di masa mendatang akan mengatasi masalah dengan mengimpor seluruh sesi JEA pada sistem yang terpengaruh.

Jika Anda tidak dapat mengimpor sesi JEA karena batasan JEA pada parameter default, ikuti langkah-langkah di bawah ini untuk memfilter perintah default dari set yang diimpor. Anda dapat terus menggunakan perintah seperti Select-Object, tetapi Anda hanya akan menggunakan versi lokal yang diinstal di komputer Anda alih-alih yang diimpor dari sesi JEA jarak jauh.

# Create a new PSSession to your JEA endpoint
$jeaSession = New-PSSession -ComputerName 'SERVER01' -ConfigurationName 'JEAMaintenance'

# Get a list of all the commands on the JEA endpoint
$commands = Invoke-Command -Session $jeaSession -ScriptBlock { Get-Command }

# Filter out the default cmdlets
$jeaDefaultCmdlets = @(
    'Clear-Host'
    'Exit-PSSession'
    'Get-Command'
    'Get-FormatData'
    'Get-Help'
    'Measure-Object'
    'Out-Default'
    'Select-Object'
)
$filteredCommands = $commands.Name | Where-Object { $jeaDefaultCmdlets -notcontains $_ }

# Import only commands explicitly added in role capabilities and prefix each
# imported cmdlet with "JEA"
Import-PSSession -Session $jeaSession -Prefix 'JEA' -CommandName $filteredCommands

Anda juga dapat mempertahankan cmdlet yang diproksikan dari remote implisit menggunakan Export-PSSession. Untuk informasi selengkapnya tentang remoting implisit, lihat dokumentasi untuk Import-PSSession dan Import-Module.

Menggunakan JEA secara terprogram

JEA juga dapat digunakan dalam sistem otomatisasi dan dalam aplikasi pengguna, seperti aplikasi dan situs web helpdesk in-house. Pendekatannya sama dengan membangun aplikasi yang berkomunikasi dengan titik akhir PowerShell yang bebas. Pastikan program ini dirancang untuk bekerja dengan batasan yang diberlakukan oleh JEA.

Untuk tugas sederhana dan satu kali, Anda dapat menggunakan Invoke-Command untuk menjalankan perintah dalam sesi JEA.

Invoke-Command -ComputerName 'SERVER01' -ConfigurationName 'JEAMaintenance' -ScriptBlock {
    Get-Process
    Get-Service
}

Untuk memeriksa perintah mana yang tersedia untuk digunakan saat Anda terhubung ke sesi JEA, jalankan Get-Command dan iterasi melalui hasil untuk memeriksa parameter yang diizinkan.

$commandParameters = @{
    ComputerName      = 'SERVER01'
    ConfigurationName = 'JEAMaintenance'
    ScriptBlock       = { Get-Command }
}
Invoke-Command @commandParameters |
    Where-Object { $_.CommandType -in @('Function', 'Cmdlet') } |
    Format-Table Name, Parameters

Jika Anda membangun aplikasi C#, Anda dapat membuat runspace PowerShell yang tersambung ke sesi JEA dengan menentukan nama konfigurasi dalam objek WSManConnectionInfo .

// using System.Management.Automation;
var computerName = "SERVER01";
var configName   = "JEAMaintenance";
// See https://learn.microsoft.com/dotnet/api/system.management.automation.pscredential
var creds        = // create a PSCredential object here

WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
    false,                 // Use SSL
    computerName,          // Computer name
    5985,                  // WSMan Port
    "/wsman",              // WSMan Path
                           // Connection URI with config name
    string.Format(
        CultureInfo.InvariantCulture,
        "http://schemas.microsoft.com/powershell/{0}",
        configName
    ),
    creds                  // Credentials
);

// Now, use the connection info to create a runspace where you can run the commands
using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
    // Open the runspace
    runspace.Open();

    using (PowerShell ps = PowerShell.Create())
    {
        // Set the PowerShell object to use the JEA runspace
        ps.Runspace = runspace;

        // Now you can add and invoke commands
        ps.AddCommand("Get-Command");
        foreach (var result in ps.Invoke())
        {
            Console.WriteLine(result);
        }
    }

    // Close the runspace
    runspace.Close();
}

Menggunakan JEA dengan PowerShell Direct

Hyper-V di Windows 10 dan Windows Server 2016 menawarkan PowerShell Direct, fitur yang memungkinkan administrator Hyper-V mengelola komputer virtual dengan PowerShell terlepas dari konfigurasi jaringan atau pengaturan manajemen jarak jauh pada komputer virtual.

Anda dapat menggunakan PowerShell Direct dengan JEA untuk memberi administrator Hyper-V akses terbatas ke VM Anda. Ini dapat berguna jika Anda kehilangan konektivitas jaringan ke VM Anda dan memerlukan admin pusat data untuk memperbaiki pengaturan jaringan.

Tidak ada konfigurasi tambahan yang diperlukan untuk menggunakan JEA melalui PowerShell Direct. Namun, sistem operasi tamu yang berjalan di dalam komputer virtual harus Windows 10, Windows Server 2016, atau yang lebih tinggi. Admin Hyper-V dapat terhubung ke titik akhir JEA dengan menggunakan -VMName parameter atau -VMId pada cmdlet PSRemoting:

$sharedParams = @{
    ConfigurationName = 'NICMaintenance'
    Credential        = Get-Credential -UserName 'localhost\JEAformyHoster'
}
# Entering a JEA session using PowerShell Direct when the VM name is unique
Enter-PSSession -VMName 'SQL01' @sharedParams

# Entering a JEA session using PowerShell Direct using VM ids
$vm = Get-VM -VMName 'MyVM' | Select-Object -First 1
Enter-PSSession -VMId $vm.VMId @sharedParams

Disarankan agar Anda membuat akun pengguna khusus dengan hak minimum yang diperlukan untuk mengelola sistem untuk digunakan oleh administrator Hyper-V. Ingat, bahkan pengguna yang tidak memiliki hak istimewa dapat masuk ke komputer Windows secara default, termasuk menggunakan PowerShell yang tidak dibatasi. Hal ini memungkinkan mereka menelusuri sistem file dan mempelajari lebih lanjut tentang lingkungan OS Anda. Untuk mengunci administrator Hyper-V dan membatasinya hanya untuk mengakses VM menggunakan PowerShell Direct dengan JEA, Anda harus menolak hak masuk lokal ke akun JEA admin Hyper-V.