A JEA használataUsing JEA

Ez a cikk ismerteti a JEA-végpontokhoz való kapcsolódás különböző módszereit és használatát.This article describes the various ways you can connect to and use a JEA endpoint.

A JEA interaktív használataUsing JEA interactively

Ha teszteli a JEA-konfigurációt, vagy egyszerű feladatokat használ a felhasználók számára, ugyanúgy használhatja a JEA-t, mint egy hagyományos PowerShell-távelérési munkamenetet.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. Az összetett távelérési feladatok esetében ajánlott az implicit táveléréshasználata.For complex remoting tasks, it's recommended to use implicit remoting. Az implicit távelérés lehetővé teszi, hogy a felhasználók helyileg működjenek együtt az adatobjektumokkal.Implicit remoting allows users to operate with the data objects locally.

A JEA interaktív használatához a következőkre lesz szüksége:To use JEA interactively, you need:

  • Annak a számítógépnek a neve, amelyhez csatlakozik (a helyi gép lehet)The name of the computer you're connecting to (can be the local machine)
  • A számítógépen regisztrált JEA-végpont neveThe name of the JEA endpoint registered on that computer
  • A számítógépen található JEA-végponthoz hozzáféréssel rendelkező hitelesítő adatokCredentials that have access to the JEA endpoint on that computer

Ezen információk alapján elindíthat egy JEA-munkamenetet a New-PSSession vagy a ENTER-PSSession parancsmaggal.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

Ha az aktuális felhasználói fiók rendelkezik hozzáféréssel az JEA-végponthoz, kihagyhatja a hitelesítő adat paramétert.If the current user account has access to the JEA endpoint, you can omit the Credential parameter.

Amikor a PowerShell felszólítja, [localhost]: PS> hogy tudja, hogy most már együttműködik a távoli JEA-munkamenettel.When the PowerShell prompt changes to [localhost]: PS> you know that you're now interacting with the remote JEA session. A futtatásával Get-Command ellenőrizhető, hogy mely parancsok érhetők el.You can run Get-Command to check which commands are available. Forduljon a rendszergazdához, és Ismerje meg, hogy van-e korlátozás az elérhető paraméterekkel vagy az engedélyezett paraméterek értékeivel kapcsolatban.Consult with your administrator to learn if there are any restrictions on the available parameters or allowed parameter values.

Ne feledje, hogy a JEA-munkamenetek nem nyelvi módban működnek.Remember, JEA sessions operate in NoLanguage mode. Előfordulhat, hogy a PowerShell használatának néhány módja nem érhető el.Some of the ways you typically use PowerShell may not be available. Például nem használhat változókat adatok tárolására, vagy megvizsgálhatja a parancsmagokból visszaadott objektumok tulajdonságait.For instance, you can't use variables to store data or inspect the properties on objects returned from cmdlets. Az alábbi példa két módszert mutat be, amelyekkel ugyanazokat a parancsokat lehet a nem nyelvi módban dolgozni.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'

Az ezt a megközelítést megnehezíti, összetettebb parancs-hívásokhoz használjon implicit távelérést , vagy hozzon létre olyan egyéni függvényeket , amelyek betakarják a szükséges funkciókat.For more complex command invocations that make this approach difficult, consider using implicit remoting or creating custom functions that wrap the functionality you require.

JEA használata implicit távelérésselUsing JEA with implicit remoting

A PowerShell implicit távelérési modellel rendelkezik, amely lehetővé teszi a proxy-parancsmagok távoli gépről történő importálását, és a velük való interakciót, mintha helyi parancsok lennének.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. Az implicit távelérést ebben a Hey, Scripting Guy -ban ismertetjük.Implicit remoting is explained in this Hey, Scripting Guy! blogbejegyzés.blog post. Az implicit távelérés akkor hasznos, ha a JEA dolgozik, mivel lehetővé teszi a JEA-parancsmagok teljes nyelvi módban való használatát.Implicit remoting is useful when working with JEA because it allows you to work with JEA cmdlets in a full language mode. Használhatja a TAB-kiegészítést, a változókat, az objektumok módosítását, és akár helyi parancsfájlokat is használhat a JEA-végpontra irányuló feladatok automatizálásához.You can use tab completion, variables, manipulate objects, and even use local scripts to automate tasks against a JEA endpoint. A proxy parancs meghívása után az adatküldés a távoli gépen található JEA-végpontra történik, és ott hajtja végre.Anytime you invoke a proxy command, the data is sent to the JEA endpoint on the remote machine and executed there.

Az implicit távelérés úgy működik, hogy parancsmagokat importál egy meglévő PowerShell-munkamenetből.Implicit remoting works by importing cmdlets from an existing PowerShell session. Opcionálisan megadhatja, hogy az egyes proxy-parancsmagok neve előtaggal legyen elválasztva.You can optionally choose to prefix the nouns of each proxy cmdlet with a string of your choosing. Az előtag lehetővé teszi a távoli rendszerhez tartozó parancsok megkülönböztetését.The prefix allows you to distinguish the commands that are for the remote system. A rendszer az összes proxy parancsot tartalmazó ideiglenes parancsfájl-modult hozza létre és importálja a helyi PowerShell-munkamenet időtartama alatt.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

Fontos

Előfordulhat, hogy egyes rendszerek nem tudnak teljes JEA-munkamenetet importálni az alapértelmezett JEA-parancsmagok korlátai miatt.Some systems may not be able to import an entire JEA session due to constraints in the default JEA cmdlets. Ennek megkezdéséhez csak a szükséges parancsokat kell importálnia a JEA-munkamenetből, ha explicit módon megadja nevüket a -CommandName paraméternek.To get around this, only import the commands you need from the JEA session by explicitly providing their names to the -CommandName parameter. A jövőbeli frissítések a teljes JEA-munkamenetek importálásával foglalkoznak az érintett rendszereken.A future update will address the issue with importing entire JEA sessions on affected systems.

Ha nem tudja importálni a JEA-munkamenetet az alapértelmezett paraméterek JEA megkötése miatt, kövesse az alábbi lépéseket az importált készlet alapértelmezett parancsainak kiszűréséhez.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. Továbbra is használhatja az olyan parancsokat, mint a Select-Object , de a távoli JEA-munkamenetből importált helyett csak a számítógépen telepített helyi verziót fogja használni.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

Az export-PSSessionhasználatával is megtarthatja a proxyn belüli parancsmagokat az implicit távelérésből.You can also persist the proxied cmdlets from implicit remoting using Export-PSSession. Az implicit távoli eljáráshívás szolgáltatással kapcsolatos további információkért tekintse meg az import-PSSession és az import-Moduledokumentációját.For more information about implicit remoting, see the documentation for Import-PSSession and Import-Module.

A JEA programozott módon történő használataUsing JEA programmatically

A JEA automatizálási rendszerekben és felhasználói alkalmazásokban is használhatók, például a házon belüli segélyszolgálat alkalmazásaiban és webhelyein.JEA can also be used in automation systems and in user applications, such as in-house helpdesk apps and websites. A módszer ugyanaz, mint a nem korlátozott PowerShell-végpontokkal kommunikáló alkalmazások létrehozásához.The approach is the same as that for building apps that talk to unconstrained PowerShell endpoints. Győződjön meg arról, hogy a program úgy van kialakítva, hogy a JEA által megszabott korlátozásokkal működjön.Ensure the program is designed to work with limitation imposed by JEA.

Egyszerű, egyszeri feladatokhoz használhatja a Meghívási parancsot a JEA-munkamenetben lévő parancsok futtatásához.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 }

A JEA-munkamenethez való csatlakozáskor használható parancsok megadásához futtassa a parancsot, Get-Command és ismételje meg az eredményeket az engedélyezett paraméterek kereséséhez.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

Ha C#-alkalmazást hoz létre, létrehozhat egy JEA-munkamenethez csatlakozó PowerShell-RunSpace egy WSManConnectionInfo -objektumban található konfigurációs név megadásával.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();
}

A JEA használata a PowerShell DirecttelUsing JEA with PowerShell Direct

A Hyper-V a Windows 10 és a Windows Server 2016 rendszerben a PowerShell Directszolgáltatást kínálja, amely lehetővé teszi a Hyper-v-rendszergazdák számára a virtuális gépek kezelését a PowerShell-lel, függetlenül a virtuális gép hálózati konfigurációjától vagy távoli felügyeleti beállításaitól.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.

A JEA használatával a PowerShell Directtel engedélyezheti a Hyper-V-rendszergazda számára a virtuális gép elérését.You can use PowerShell Direct with JEA to give a Hyper-V administrator limited access to your VM. Ez akkor lehet hasznos, ha elveszti a hálózati kapcsolatot a virtuális géppel, és szükség van egy adatközpont-rendszergazdára a hálózati beállítások kijavításához.This can be useful if you lose network connectivity to your VM and need a datacenter admin to fix the network settings.

A JEA használatához nincs szükség további konfigurációra a PowerShell Direct használatával.No additional configuration is required to use JEA over PowerShell Direct. A virtuális gépen futó vendég operációs rendszernek azonban Windows 10, Windows Server 2016 vagy újabb rendszernek kell lennie.However, the guest operating system running inside the virtual machine must be Windows 10, Windows Server 2016, or higher. A Hyper-V rendszergazdája a -VMName PSRemoting-parancsmagok vagy paraméterek használatával tud csatlakozni az JEA-végponthoz -VMId :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'

Javasoljuk, hogy hozzon létre egy dedikált felhasználói fiókot a rendszer a Hyper-V-rendszergazda általi használatához szükséges minimális jogosultságokkal.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. Ne feledje, hogy még egy nem rendszerjogosultságú felhasználó is bejelentkezhet a Windows rendszerű gépre, például a nem korlátozott PowerShell használatával.Remember, even an unprivileged user can sign into a Windows machine by default, including using unconstrained PowerShell. Ez lehetővé teszi számukra, hogy böngésszék a fájlrendszert, és többet tudjon meg az operációs rendszer környezetéről.That allows them to browse the file system and learn more about your OS environment. Ha le szeretné zárni a Hyper-V-rendszergazdát, és korlátozni szeretné a virtuális gépeket a JEA-mel közvetlenül a PowerShell közvetlen használatával, meg kell tagadnia a helyi bejelentkezési jogosultságokat a Hyper-V rendszergazdai JEA fiókjához.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.