Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden die verschiedenen Möglichkeiten beschrieben, mit denen Sie eine Verbindung herstellen und einen JEA-Endpunkt verwenden können.
Interaktive Verwendung von JEA
Wenn Sie Ihre JEA-Konfiguration testen oder einfache Aufgaben für Benutzer haben, können Sie JEA auf die gleiche Weise wie eine normale PowerShell-Remotingsitzung verwenden. Bei komplexen Remotingaufgaben wird empfohlen, implizites Remoting zu verwenden. Implizites Remoting ermöglicht Anwendern, lokal mit den Datenobjekten zu arbeiten.
Wenn Sie JEA interaktiv verwenden möchten, benötigen Sie Folgendes:
- Der Name des Computers, mit dem Sie eine Verbindung herstellen (kann der lokale Computer sein)
- Der Name des AUF diesem Computer registrierten JEA-Endpunkts
- Anmeldeinformationen, die Zugriff auf den JEA-Endpoint auf diesem Computer haben
Aufgrund dieser Informationen können Sie eine JEA-Sitzung mit den Cmdlets "New-PSSession " oder " Enter-PSSession " starten.
$sessionParams = @{
ComputerName = 'localhost'
ConfigurationName = 'JEAMaintenance'
Credential = Get-Credential
}
Enter-PSSession @sessionParams
Wenn das aktuelle Benutzerkonto Zugriff auf den JEA-Endpunkt hat, können Sie den Parameter "Credential " weglassen.
Wenn sich die PowerShell-Eingabeaufforderung zu [localhost]: PS> ändert, sehen Sie, dass Sie jetzt mit der Remote-JEA-Sitzung interagieren. Sie können ausführen Get-Command , um zu überprüfen, welche Befehle verfügbar sind. Wenden Sie sich an Ihren Administrator, um zu erfahren, ob es Einschränkungen für die verfügbaren Parameter oder zulässigen Parameterwerte gibt.
Denken Sie daran, dass JEA-Sitzungen im NoLanguage Modus funktionieren. Einige der Möglichkeiten, wie Sie PowerShell in der Regel verwenden, sind möglicherweise nicht verfügbar. Sie können beispielsweise keine Variablen verwenden, um Daten zu speichern oder die Eigenschaften von Objekten zu prüfen, die von Cmdlets zurückgegeben werden. Das folgende Beispiel zeigt zwei Ansätze, um die gleichen Befehle im NoLanguage Modus funktionsfähig zu machen.
# 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'
Für komplexere Befehlsaufrufe, die diesen Ansatz erschweren, sollten Sie die Verwendung impliziter Remotings oder das Erstellen von benutzerdefinierten Funktionen in Betracht ziehen, die die benötigten Funktionen umschließen.
Weitere Informationen zu NoLanguageMode finden Sie unter about_Language_Modes.
Verwenden von JEA mit impliziter Remoting
PowerShell verfügt über ein implizites Remotingmodell, mit dem Sie Proxy-Cmdlets von einem Remotecomputer importieren und mit ihnen interagieren können, als wären sie lokale Befehle. Implizites Remoting wird in diesem Hey, Scripting Guy!Blogbeitrag erklärt. Implizites Remoting ist nützlich, wenn Sie mit JEA arbeiten, da es Ihnen ermöglicht, mit JEA-Cmdlets in einem vollständigen Sprachmodus zu arbeiten. Sie können die Registerkartenvervollständigung nutzen, Variablen verwenden, Objekte manipulieren und sogar lokale Skripte einsetzen, um Aufgaben für einen JEA-Endpunkt zu automatisieren. Wenn Sie einen Proxybefehl aufrufen, werden die Daten an den JEA-Endpunkt auf dem Remotecomputer gesendet und dort ausgeführt.
Implizites Remoting funktioniert, indem Cmdlets aus einer bestehenden PowerShell-Sitzung importiert werden. Sie können optional festlegen, dass den Substantiven jedes Proxy-Cmdlets eine Zeichenfolge Ihrer Wahl vorangestellt wird. Mit dem Präfix können Sie die Befehle unterscheiden, die für das entfernte System bestimmt sind. Ein temporäres Skriptmodul, das alle Proxybefehle enthält, wird für die Dauer der lokalen PowerShell-Sitzung erstellt und importiert.
# 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
Von Bedeutung
Einige Systeme können möglicherweise aufgrund von Einschränkungen in den Standard-JEA-Cmdlets eine komplette JEA-Sitzung nicht importieren. Um dies zu umgehen, importieren Sie nur die Befehle, die Sie aus der JEA-Sitzung benötigen, indem Sie explizit ihre Namen für den -CommandName Parameter angeben. Ein zukünftiges Update behebt das Problem beim Importieren vollständiger JEA-Sitzungen auf betroffenen Systemen.
Wenn Sie aufgrund von JEA-Einschränkungen für die Standardparameter keine JEA-Sitzung importieren können, führen Sie die folgenden Schritte aus, um die Standardbefehle aus dem importierten Satz herauszufiltern. Sie können weiterhin Befehle wie Select-Object" verwenden, aber Sie verwenden einfach die lokale Version, die auf Ihrem Computer installiert ist, anstatt die aus der Remote-JEA-Sitzung importierte.
# 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
Sie können auch die durch Proxy geleiteten Cmdlets aus dem impliziten Remoting mithilfe von Export-PSSession beibehalten. Weitere Informationen zur impliziten Remoting finden Sie in der Dokumentation für Import-PSSession und Import-Module.
Programmgesteuertes Verwenden von JEA
JEA kann auch in Automatisierungssystemen und in Benutzeranwendungen verwendet werden, z. B. in internen Helpdesk-Apps und Websites. Der Ansatz entspricht dem Erstellen von Apps, die mit nicht eingeschränkten PowerShell-Endpunkten kommunizieren. Stellen Sie sicher, dass das Programm darauf ausgelegt ist, mit einschränkungen zu arbeiten, die von JEA auferlegt werden.
Für einfache, einmalige Aufgaben können Sie Mithilfe von Invoke-Command Befehle in einer JEA-Sitzung ausführen.
Invoke-Command -ComputerName 'SERVER01' -ConfigurationName 'JEAMaintenance' -ScriptBlock {
Get-Process
Get-Service
}
Um zu überprüfen, welche Befehle verfügbar sind, wenn Sie eine Verbindung zu einer JEA-Sitzung herstellen, führen Sie Get-Command aus und gehen Sie die Ergebnisse durch, um die zulässigen Parameter zu überprüfen.
$commandParameters = @{
ComputerName = 'SERVER01'
ConfigurationName = 'JEAMaintenance'
ScriptBlock = { Get-Command }
}
Invoke-Command @commandParameters |
Where-Object { $_.CommandType -in @('Function', 'Cmdlet') } |
Format-Table Name, Parameters
Wenn Sie eine C#-App erstellen, können Sie einen PowerShell-Runspace erstellen, der eine Verbindung mit einer JEA-Sitzung herstellt, indem Sie den Konfigurationsnamen in einem WSManConnectionInfo-Objekt angeben.
// 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();
}
Verwenden von JEA mit PowerShell Direct
Hyper-V in Windows 10 und Windows Server 2016 bietet PowerShell Direct, ein Feature, mit dem Hyper-V Administratoren virtuelle Computer unabhängig von den Netzwerkkonfigurations- oder Remoteverwaltungseinstellungen auf dem virtuellen Computer verwalten können.
Sie können PowerShell Direct mit JEA verwenden, um einem Hyper-V Administrator eingeschränkten Zugriff auf Ihre VM zu gewähren. Dies kann nützlich sein, wenn Sie die Netzwerkkonnektivität mit Ihrem virtuellen Computer verlieren und einen Rechenzentrumsadministrator benötigen, um die Netzwerkeinstellungen zu beheben.
Für die Verwendung von JEA über PowerShell Direct ist keine zusätzliche Konfiguration erforderlich. Das Gastbetriebssystem, das auf dem virtuellen Computer ausgeführt wird, muss jedoch Windows 10, Windows Server 2016 oder höher sein. Der Hyper-V-Administrator kann eine Verbindung mit dem JEA-Endpunkt herstellen, indem er die Parameter -VMName oder -VMId in PSRemoting-Cmdlets verwendet.
$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
Es wird empfohlen, ein dediziertes Benutzerkonto mit den Mindestrechten zu erstellen, die zum Verwalten des Systems für die Verwendung durch einen Hyper-V-Administrator erforderlich sind. Denken Sie daran, dass sich selbst ein nicht privilegierter Benutzer standardmäßig bei einem Windows-Computer anmelden kann, einschließlich der Verwendung nicht eingeschränkter PowerShell. Auf diese Weise können sie das Dateisystem durchsuchen und mehr über Ihre Betriebssystemumgebung erfahren. Um einen Hyper-V-Administrator zu sperren und auf einen virtuellen Computer nur mit PowerShell Direct und JEA zuzugreifen, müssen Sie dem JEA-Konto des Hyper-V-Administrators den lokalen Anmeldezugriff verweigern.