JEA gebruiken
In dit artikel worden de verschillende manieren beschreven waarop u verbinding kunt maken en een JEA-eindpunt kunt gebruiken.
INTERACTIEF JEA gebruiken
Als u uw JEA-configuratie test of eenvoudige taken voor gebruikers hebt, kunt u JEA op dezelfde manier gebruiken als een gewone externe PowerShell-sessie. Voor complexe externe taken is het raadzaam impliciete externe communicatie te gebruiken. Impliciete externe toegang stelt gebruikers in staat om lokaal met de gegevensobjecten te werken.
Als u JEA interactief wilt gebruiken, hebt u het volgende nodig:
- De naam van de computer waarmee u verbinding maakt (kan de lokale computer zijn)
- De naam van het JEA-eindpunt dat op die computer is geregistreerd
- Referenties die toegang hebben tot het JEA-eindpunt op die computer
Op basis van deze informatie kunt u een JEA-sessie starten met behulp van de cmdlets New-PSSession of Enter-PSSession .
$sessionParams = @{
ComputerName = 'localhost'
ConfigurationName = 'JEAMaintenance'
Credential = Get-Credential
}
Enter-PSSession @sessionParams
Als het huidige gebruikersaccount toegang heeft tot het JEA-eindpunt, kunt u de referentieparameter weglaten.
Wanneer de PowerShell-prompt wordt gewijzigd, [localhost]: PS>
weet u dat u nu communiceert met de externe JEA-sessie. U kunt uitvoeren Get-Command
om te controleren welke opdrachten beschikbaar zijn. Neem contact op met uw beheerder om te zien of er beperkingen zijn voor de beschikbare parameters of toegestane parameterwaarden.
Vergeet niet dat JEA-sessies in NoLanguage
de modus werken. Sommige manieren waarop u powerShell doorgaans gebruikt, zijn mogelijk niet beschikbaar. U kunt bijvoorbeeld geen variabelen gebruiken om gegevens op te slaan of de eigenschappen te inspecteren op objecten die worden geretourneerd door cmdlets. In het volgende voorbeeld ziet u twee benaderingen om dezelfde opdrachten in de modus te laten werken NoLanguage
.
# 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'
Voor complexere opdrachten die deze aanpak moeilijk maken, kunt u overwegen impliciete externe communicatie te gebruiken of aangepaste functies te maken die de functionaliteit verpakken die u nodig hebt.
Zie about_Language_Modes voor meer informatieNoLanguageMode
.
JEA gebruiken met impliciete externe communicatie
PowerShell heeft een impliciet extern model waarmee u proxy-cmdlets van een externe computer kunt importeren en ermee kunt werken alsof het lokale opdrachten zijn. Impliciete externe communicatie wordt uitgelegd in deze Hey, Scripting Guy! blogbericht. Impliciete externe communicatie is handig wanneer u met JEA werkt, omdat u hiermee kunt werken met JEA-cmdlets in een volledige taalmodus. U kunt tabvoltooiing, variabelen, objecten bewerken en zelfs lokale scripts gebruiken om taken te automatiseren op basis van een JEA-eindpunt. Wanneer u een proxyopdracht aanroept, worden de gegevens verzonden naar het JEA-eindpunt op de externe computer en daar uitgevoerd.
Impliciete externe communicatie werkt door cmdlets te importeren uit een bestaande PowerShell-sessie. U kunt eventueel de zelfstandige naamwoorden van elke proxy-cmdlet vooraf laten gaan met een tekenreeks van uw keuze. Met het voorvoegsel kunt u de opdrachten onderscheiden die voor het externe systeem zijn. Er wordt een tijdelijke scriptmodule met alle proxyopdrachten gemaakt en geïmporteerd voor de duur van uw lokale PowerShell-sessie.
# 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
Belangrijk
Sommige systemen kunnen mogelijk geen volledige JEA-sessie importeren vanwege beperkingen in de standaard-JEA-cmdlets. U kunt dit omzeilen door alleen de opdrachten die u nodig hebt uit de JEA-sessie te importeren door expliciet hun namen op te geven voor de -CommandName
parameter. In een toekomstige update wordt het probleem opgelost met het importeren van volledige JEA-sessies op betrokken systemen.
Als u een JEA-sessie niet kunt importeren vanwege JEA-beperkingen voor de standaardparameters, volgt u de onderstaande stappen om de standaardopdrachten uit de geïmporteerde set te filteren. U kunt opdrachten blijven gebruiken, zoals Select-Object
, maar u gebruikt alleen de lokale versie die op uw computer is geïnstalleerd in plaats van de versie die is geïmporteerd uit de externe JEA-sessie.
# 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
U kunt ook de geproxiede cmdlets behouden van impliciete externe communicatie met behulp van Export-PSSession. Zie de documentatie voor Import-PSSession en Import-Module voor meer informatie over impliciete externe communicatie.
Programmatisch JEA gebruiken
JEA kan ook worden gebruikt in automatiseringssystemen en in gebruikerstoepassingen, zoals interne helpdesk-apps en websites. De benadering is hetzelfde als voor het bouwen van apps die communiceren met niet-getrainde PowerShell-eindpunten. Zorg ervoor dat het programma is ontworpen om te werken met beperkingen die door JEA worden opgelegd.
Voor eenvoudige, eenmalige taken kunt u Invoke-Command gebruiken om opdrachten uit te voeren in een JEA-sessie.
Invoke-Command -ComputerName 'SERVER01' -ConfigurationName 'JEAMaintenance' -ScriptBlock {
Get-Process
Get-Service
}
Als u wilt controleren welke opdrachten beschikbaar zijn voor gebruik wanneer u verbinding maakt met een JEA-sessie, voert u de resultaten uit Get-Command
en voert u deze uit om te controleren op de toegestane parameters.
$commandParameters = @{
ComputerName = 'SERVER01'
ConfigurationName = 'JEAMaintenance'
ScriptBlock = { Get-Command }
}
Invoke-Command @commandParameters |
Where-Object { $_.CommandType -in @('Function', 'Cmdlet') } |
Format-Table Name, Parameters
Als u een C#-app bouwt, kunt u een PowerShell-runspace maken die verbinding maakt met een JEA-sessie door de configuratienaam op te geven in een WSManConnectionInfo-object .
// 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();
}
JEA gebruiken met PowerShell Direct
Hyper-V in Windows 10 en Windows Server 2016 biedt PowerShell Direct, een functie waarmee Hyper-V-beheerders virtuele machines kunnen beheren met PowerShell, ongeacht de netwerkconfiguratie of instellingen voor extern beheer op de virtuele machine.
U kunt PowerShell Direct met JEA gebruiken om een Hyper-V-beheerder beperkte toegang te geven tot uw VIRTUELE machine. Dit kan handig zijn als u de netwerkverbinding met uw VIRTUELE machine kwijtraakt en een datacenterbeheerder nodig hebt om de netwerkinstellingen te herstellen.
Er is geen extra configuratie vereist voor het gebruik van JEA via PowerShell Direct. Het gastbesturingssysteem dat op de virtuele machine wordt uitgevoerd, moet echter Windows 10, Windows Server 2016 of hoger zijn. De Hyper-V-beheerder kan verbinding maken met het JEA-eindpunt met behulp van de -VMName
of -VMId
parameters op PSRemoting-cmdlets:
$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
Het is raadzaam om een toegewezen gebruikersaccount te maken met de minimale rechten die nodig zijn om het systeem te beheren voor gebruik door een Hyper-V-beheerder. Houd er rekening mee dat zelfs een niet-gemachtigde gebruiker zich standaard kan aanmelden bij een Windows-computer, inclusief het gebruik van niet-getrainde PowerShell. Hierdoor kunnen ze door het bestandssysteem bladeren en meer informatie krijgen over uw besturingssysteemomgeving. Als u een Hyper-V-beheerder wilt vergrendelen en deze wilt beperken tot alleen toegang tot een VIRTUELE machine met PowerShell Direct met JEA, moet u lokale aanmeldingsrechten weigeren voor het JEA-account van de Hyper-V-beheerder.