Sdílet prostřednictvím


Použití funkce JEA

Tento článek popisuje různé způsoby připojení a použití koncového bodu JEA.

Interaktivní používání FUNKCE JEA

Pokud testujete konfiguraci JEA nebo máte jednoduché úlohy pro uživatele, můžete jea použít stejným způsobem jako běžnou relaci vzdálené komunikace PowerShellu. U složitých úloh vzdálené komunikace se doporučuje použít implicitní vzdálené komunikace. Implicitní vzdálené komunikace umožňuje uživatelům pracovat s datovými objekty místně.

Pokud chcete jea používat interaktivně, potřebujete:

  • Název počítače, ke kterému se připojujete (může to být místní počítač)
  • Název koncového bodu JEA zaregistrovaného v tomto počítači
  • Přihlašovací údaje, které mají přístup ke koncovému bodu JEA v tomto počítači

Vzhledem k tomu, že tyto informace, můžete spustit relaci JEA pomocí rutin New-PSSession nebo Enter-PSSession .

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

Pokud má aktuální uživatelský účet přístup ke koncovému bodu JEA, můžete vynechat parametr Credential .

Když se powershellový řádek změní, [localhost]: PS> abyste věděli, že teď pracujete se vzdálenou relací JEA. Spuštěním můžete Get-Command zkontrolovat, které příkazy jsou k dispozici. Obraťte se na správce a zjistěte, jestli existují nějaká omezení dostupných parametrů nebo povolených hodnot parametrů.

Mějte na paměti, že relace JEA fungují v NoLanguage režimu. Některé způsoby, jak obvykle používáte PowerShell, nemusí být k dispozici. Například nemůžete použít proměnné k ukládání dat nebo kontrole vlastností objektů vrácených z rutin. Následující příklad ukazuje dva přístupy k získání stejných příkazů pro práci v NoLanguage režimu.

# 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'

Pokud chcete složitější vyvolání příkazů, které ztěžují tento přístup, zvažte použití implicitního vzdálené komunikace nebo vytvoření vlastních funkcí , které zabalí požadované funkce. Další informace najdete NoLanguageModev tématu about_Language_Modes.

Použití JEA s implicitní vzdálené komunikace

PowerShell má implicitní model vzdálené komunikace, který umožňuje importovat rutiny proxy serveru ze vzdáleného počítače a pracovat s nimi, jako by šlo o místní příkazy. Implicitní komunikace je vysvětlena v tomto Hey, Scripting Guy! blog příspěvek. Implicitní vzdálené komunikace je užitečná při práci s JEA, protože umožňuje pracovat s rutinami JEA v režimu celého jazyka. K automatizaci úloh s koncovým bodem JEA můžete použít dokončování tabulátoru, proměnné, manipulaci s objekty a dokonce i použití místních skriptů. Kdykoli vyvoláte příkaz proxy serveru, data se odešlou do koncového bodu JEA na vzdáleném počítači a spustí se tam.

Implicitní vzdálené komunikace funguje importem rutin z existující relace PowerShellu. Volitelně můžete zvolit předponu podstatných jmen každé rutiny proxy pomocí řetězce podle vašeho výběru. Předpona umožňuje rozlišit příkazy, které jsou určené pro vzdálený systém. Dočasný skriptový modul obsahující všechny příkazy proxy serveru se vytvoří a naimportuje po dobu trvání místní relace PowerShellu.

# 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

Důležité

Některé systémy nemusí být schopné importovat celou relaci JEA z důvodu omezení ve výchozích rutinách JEA. Chcete-li to obejít, importujte pouze příkazy, které potřebujete, z relace JEA tím, že explicitně zadají jejich názvy parametru -CommandName . Budoucí aktualizace bude řešit problém s importem celých relací JEA na ovlivněných systémech.

Pokud nemůžete importovat relaci JEA z důvodu omezení JEA u výchozích parametrů, vyfiltrujte výchozí příkazy z importované sady pomocí následujících kroků. Můžete dál používat příkazy, jako Select-Objectje , ale místo té importované ze vzdálené relace JEA použijete jenom místní verzi nainstalovanou na vašem počítači.

# 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

Pomocí Export-PSSession můžete zachovat také rutiny proxied z implicitní vzdálené komunikace. Další informace o implicitní vzdálené komunikace najdete v dokumentaci pro Import-PSSession a Import-Module.

Programové používání JEA

JEA se dá použít také v automatizačních systémech a v uživatelských aplikacích, jako jsou interní aplikace helpdesku a weby. Přístup je stejný jako při vytváření aplikací, které komunikují s nekomrénovanými koncovými body PowerShellu. Ujistěte se, že je program navržený tak, aby fungoval s omezením, které je nastaveno pro JEA.

U jednoduchých jednorázových úloh můžete pomocí příkazu Invoke-Command spouštět příkazy v relaci JEA.

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

Pokud chcete zkontrolovat, které příkazy jsou k dispozici pro připojení k relaci JEA, spusťte Get-Command a iterujte výsledky a zkontrolujte povolené parametry.

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

Pokud vytváříte aplikaci v jazyce C#, můžete vytvořit prostředí Runspace PowerShellu, které se připojí k relaci JEA zadáním názvu konfigurace v objektu 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();
}

Použití JEA s přímým přístupem PowerShellu

Hyper-V ve Windows 10 a Windows Serveru 2016 nabízí Direct PowerShell, funkci, která správcům Hyper-V umožňuje spravovat virtuální počítače pomocí PowerShellu bez ohledu na konfiguraci sítě nebo nastavení vzdálené správy na virtuálním počítači.

Pomocí PowerShellu Direct s JEA můžete udělit správci Hyper-V omezený přístup k vašemu virtuálnímu počítači. To může být užitečné, pokud ztratíte síťové připojení k virtuálnímu počítači a potřebujete správce datacentra k opravě nastavení sítě.

Není nutná žádná další konfigurace pro použití JEA přes PowerShell Direct. Hostovaný operační systém spuštěný na virtuálním počítači ale musí být Windows 10, Windows Server 2016 nebo novější. Správce Hyper-V se může připojit ke koncovému bodu JEA pomocí -VMName rutin PSRemoting nebo -VMId parametrů:

$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

Doporučujeme vytvořit vyhrazený uživatelský účet s minimálními právy potřebnými ke správě systému pro použití správcem Technologie Hyper-V. Nezapomeňte, že i neprivilegovaný uživatel se může ve výchozím nastavení přihlásit k počítači s Windows, včetně použití neprivilegovaného PowerShellu. To jim umožní procházet systém souborů a získat další informace o vašem prostředí operačního systému. Pokud chcete uzamknout správce Hyper-V a omezit ho jenom na přístup k virtuálnímu počítači pomocí PowerShellu Direct s JEA, musíte místním přihlašovacím právům odepřít účet JEA správce Technologie Hyper-V.