Korzystanie z usługi JEAUsing JEA

W tym artykule opisano różne sposoby nawiązywania połączenia z punktem końcowym JEA i korzystania z niego.This article describes the various ways you can connect to and use a JEA endpoint.

Korzystanie z usługi JEA interaktywnieUsing JEA interactively

Jeśli testujesz konfigurację usługi JEA lub masz proste zadania dla użytkowników, możesz użyć JEA w taki sam sposób jak w przypadku zwykłej sesji komunikacji zdalnej programu PowerShell.If you're testing your JEA configuration or have simple tasks for users, you can use JEA the same way you would a regular PowerShell remoting session. W przypadku złożonych zadań komunikacji zdalnej zaleca się użycie niejawnych usług zdalnych.For complex remoting tasks, it's recommended to use implicit remoting. Niejawne komunikacja zdalna pozwala użytkownikom na pracę z obiektami danych lokalnie.Implicit remoting allows users to operate with the data objects locally.

Aby korzystać z usługi JEA w sposób interaktywny, potrzebne są:To use JEA interactively, you need:

  • Nazwa komputera, z którym nawiązujesz połączenie (może to być komputer lokalny)The name of the computer you're connecting to (can be the local machine)
  • Nazwa punktu końcowego JEA zarejestrowanego na tym komputerzeThe name of the JEA endpoint registered on that computer
  • Poświadczenia, które mają dostęp do punktu końcowego JEA na tym komputerzeCredentials that have access to the JEA endpoint on that computer

Uwzględniając te informacje, można uruchomić sesję JEA przy użyciu polecenia cmdlet New-PSSession lub Enter-PSSession .Given that information, you can start a JEA session using the New-PSSession or Enter-PSSession cmdlets.

$nonAdminCred = Get-Credential
Enter-PSSession -ComputerName localhost -ConfigurationName JEAMaintenance -Credential $nonAdminCred

Jeśli bieżące konto użytkownika ma dostęp do punktu końcowego JEA, możesz pominąć parametr Credential .If the current user account has access to the JEA endpoint, you can omit the Credential parameter.

Po wyświetleniu monitu programu PowerShell z [localhost]: PS> informacją o tym, że teraz korzystasz z sesji zdalnej jea.When the PowerShell prompt changes to [localhost]: PS> you know that you're now interacting with the remote JEA session. Można uruchomić Get-Command polecenie, aby sprawdzić, które polecenia są dostępne.You can run Get-Command to check which commands are available. Skontaktuj się z administratorem, aby dowiedzieć się, czy istnieją jakiekolwiek ograniczenia dotyczące dostępnych parametrów lub dozwolonych wartości parametrów.Consult with your administrator to learn if there are any restrictions on the available parameters or allowed parameter values.

Należy pamiętać, że sesje JEA działają w trybie NoLanguage.Remember, JEA sessions operate in NoLanguage mode. Niektóre ze sposobów, z których zazwyczaj korzystasz z programu PowerShell, mogą nie być dostępne.Some of the ways you typically use PowerShell may not be available. Na przykład nie można używać zmiennych do przechowywania danych ani inspekcji właściwości obiektów zwróconych z poleceń cmdlet.For instance, you can't use variables to store data or inspect the properties on objects returned from cmdlets. Poniższy przykład przedstawia dwa podejścia do uzyskania tych samych poleceń w trybie NoLanguage.The following example shows two approaches to get the same commands to work in 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'

W przypadku bardziej złożonych wywołań poleceń, które sprawiają, że ta metoda jest trudna, należy rozważyć użycie niejawnej komunikacji zdalnej lub utworzenie funkcji niestandardowych , które zawijają wymaganą funkcjonalność.For more complex command invocations that make this approach difficult, consider using implicit remoting or creating custom functions that wrap the functionality you require.

Korzystanie z JEA z niejawnymi usługami zdalnymiUsing JEA with implicit remoting

Program PowerShell ma niejawny model komunikacji zdalnej, który umożliwia importowanie poleceń cmdlet serwera proxy z maszyny zdalnej i korzystanie z nich w taki sposób, jakby były poleceniami lokalnymi.PowerShell has an implicit remoting model that lets you import proxy cmdlets from a remote machine and interact with them as if they were local commands. Niejawne komunikacji zdalnej wyjaśniono w tym Hej, obsługa skryptów Guy!Implicit remoting is explained in this Hey, Scripting Guy! wpis w blogu.blog post. Niejawne komunikacji zdalnej są przydatne podczas pracy z usługą JEA, ponieważ umożliwia pracę z poleceniami cmdlet JEA w trybie pełnego języka.Implicit remoting is useful when working with JEA because it allows you to work with JEA cmdlets in a full language mode. Możesz użyć uzupełniania kart, zmiennych, manipulowania obiektami, a nawet używać lokalnych skryptów do automatyzowania zadań względem punktu końcowego JEA.You can use tab completion, variables, manipulate objects, and even use local scripts to automate tasks against a JEA endpoint. Za każdym razem, gdy wywołasz polecenie proxy, dane są wysyłane do punktu końcowego JEA na maszynie zdalnej i wykonywane w tym miejscu.Anytime you invoke a proxy command, the data is sent to the JEA endpoint on the remote machine and executed there.

Niejawne wykonanie komunikacji zdalnej przez zaimportowanie poleceń cmdlet z istniejącej sesji programu PowerShell.Implicit remoting works by importing cmdlets from an existing PowerShell session. Opcjonalnie możesz wybrać opcję przedrostka rzeczowników każdego polecenia cmdlet serwera proxy z wybranym ciągiem.You can optionally choose to prefix the nouns of each proxy cmdlet with a string of your choosing. Prefiks umożliwia odróżnienie poleceń dla systemu zdalnego.The prefix allows you to distinguish the commands that are for the remote system. Tymczasowy moduł skryptu zawierający wszystkie polecenia proxy jest tworzony i zaimportowany na czas trwania lokalnej sesji programu PowerShell.A temporary script module containing all the proxy commands is created and imported for the duration of your local PowerShell session.

# 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

Ważne

Niektóre systemy mogą nie być w stanie zaimportować całej sesji JEA ze względu na ograniczenia w domyślnych poleceniach cmdlet JEA.Some systems may not be able to import an entire JEA session due to constraints in the default JEA cmdlets. Aby to zrobić, należy zaimportować tylko potrzebne polecenia z sesji JEA, jawnie dostarczając ich nazwy do -CommandName parametru.To get around this, only import the commands you need from the JEA session by explicitly providing their names to the -CommandName parameter. Przyszła aktualizacja umożliwi rozwiązanie problemu z importowaniem całych sesji JEA w systemach, których to dotyczy.A future update will address the issue with importing entire JEA sessions on affected systems.

Jeśli nie możesz zaimportować sesji JEA ze względu na ograniczenia JEA dla parametrów domyślnych, wykonaj poniższe kroki, aby odfiltrować domyślne polecenia z zaimportowanego zestawu.If you're unable to import a JEA session because of JEA constraints on the default parameters, follow the steps below to filter out the default commands from the imported set. Możesz nadal używać poleceń takich jak Select-Object , ale po prostu użyjesz lokalnej wersji zainstalowanej na komputerze zamiast zaimportowanej ze zdalnej sesji jea.You can continue use commands like Select-Object, but you'll just use the local version installed on your computer instead of the one imported from the remote JEA session.

# 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

Polecenia cmdlet serwera proxy można również utrwalać z niejawnych usług zdalnych przy użyciu polecenia Export-PSSession.You can also persist the proxied cmdlets from implicit remoting using Export-PSSession. Aby uzyskać więcej informacji na temat niejawnych usług zdalnych, zobacz dokumentację dotyczącą importu-PSSession i importu-modułu.For more information about implicit remoting, see the documentation for Import-PSSession and Import-Module.

Korzystanie z JEA programowoUsing JEA programmatically

JEA można także używać w systemach automatyzacji i w aplikacjach użytkowników, takich jak aplikacje i witryny pomocy technicznej w firmie.JEA can also be used in automation systems and in user applications, such as in-house helpdesk apps and websites. Podejście jest takie samo, jak w przypadku kompilowania aplikacji, które komunikują się z nieskonfigurowanymi punktami końcowymi programu PowerShell.The approach is the same as that for building apps that talk to unconstrained PowerShell endpoints. Upewnij się, że program jest przeznaczony do pracy z ograniczeniami narzuconymi przez JEA.Ensure the program is designed to work with limitation imposed by JEA.

W przypadku prostych, jednorazowych zadań można użyć polecenia Invoke , aby uruchomić polecenia w sesji jea.For simple, one-off tasks, you can use Invoke-Command to run commands in a JEA session.

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

Aby sprawdzić, które polecenia są dostępne do użycia podczas łączenia się z sesją JEA, uruchom Get-Command i wykonaj iterację w wynikach, aby sprawdzić, czy są dozwolone parametry.To check which commands are available for use when you connect to a JEA session, run Get-Command and iterate through the results to check for the allowed parameters.

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

Jeśli tworzysz aplikację w języku C#, możesz utworzyć obszar działania programu PowerShell, który nawiązuje połączenie z sesją JEA, określając nazwę konfiguracji w obiekcie WSManConnectionInfo .If you're building a C# app, you can create a PowerShell runspace that connects to a JEA session by specifying the configuration name in a WSManConnectionInfo object.

// using System.Management.Automation;
var computerName = "SERVER01";
var configName   = "JEAMaintenance";
// See https://docs.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();
}

Używanie JEA z programem PowerShell DirectUsing JEA with PowerShell Direct

Funkcja Hyper-V w systemie Windows 10 i Windows Server 2016 oferuje bezpośrednie środowisko PowerShell, funkcję, która umożliwia administratorom funkcji Hyper-V zarządzanie maszynami wirtualnymi za pomocą programu PowerShell niezależnie od konfiguracji sieci lub ustawień zarządzania zdalnego na maszynie wirtualnej.Hyper-V in Windows 10 and Windows Server 2016 offers PowerShell Direct, a feature that allows Hyper-V administrators to manage virtual machines with PowerShell regardless of the network configuration or remote management settings on the virtual machine.

Za pomocą programu PowerShell Direct with JEA można udzielić administratorowi funkcji Hyper-V ograniczonego dostępu do maszyny wirtualnej.You can use PowerShell Direct with JEA to give a Hyper-V administrator limited access to your VM. Może to być przydatne, Jeśli utracisz łączność sieciową z maszyną wirtualną i potrzebujesz administratora centrum danych w celu naprawy ustawień sieci.This can be useful if you lose network connectivity to your VM and need a datacenter admin to fix the network settings.

Do korzystania z JEA za pośrednictwem programu PowerShell Direct nie jest wymagana dodatkowa konfiguracja.No additional configuration is required to use JEA over PowerShell Direct. Jednak system operacyjny gościa działający na maszynie wirtualnej musi być w systemie Windows 10, Windows Server 2016 lub nowszym.However, the guest operating system running inside the virtual machine must be Windows 10, Windows Server 2016, or higher. Administrator funkcji Hyper-V może nawiązać połączenie z punktem końcowym usługi JEA za pomocą -VMName -VMId parametrów lub w poleceniach cmdlet PSRemoting:The Hyper-V admin can connect to the JEA endpoint by using the -VMName or -VMId parameters on PSRemoting cmdlets:

# Entering a JEA session using PowerShell Direct when the VM name is unique
Enter-PSSession -VMName 'SQL01' -ConfigurationName 'NICMaintenance' -Credential 'localhost\JEAformyHoster'

# Entering a JEA session using PowerShell Direct using VM ids
$vm = Get-VM -VMName 'MyVM' | Select-Object -First 1
Enter-PSSession -VMId $vm.VMId -ConfigurationName 'NICMaintenance' -Credential 'localhost\JEAformyHoster'

Zaleca się utworzenie dedykowanego konta użytkownika z minimalnymi prawami wymaganymi do zarządzania systemem w celu użycia przez administratora funkcji Hyper-V.It's recommended you create a dedicated user account with the minimum rights needed to manage the system for use by a Hyper-V administrator. Należy pamiętać, że nawet nieuprzywilejowany użytkownik może zalogować się do komputera z systemem Windows domyślnie, w tym przy użyciu nieograniczonego programu PowerShell.Remember, even an unprivileged user can sign into a Windows machine by default, including using unconstrained PowerShell. Dzięki temu można przeglądać system plików i dowiedzieć się więcej o środowisku systemu operacyjnego.That allows them to browse the file system and learn more about your OS environment. Aby zablokować administratora funkcji Hyper-V i ograniczyć dostęp do maszyny wirtualnej przy użyciu programu PowerShell Direct z JEA, należy odmówić uprawnień lokalnego logowania do konta JEA administratora funkcji Hyper-V.To lock down a Hyper-V administrator and limit them to only access a VM using PowerShell Direct with JEA, you must deny local logon rights to the Hyper-V admin's JEA account.