A JEA használata

Ez a cikk a JEA-végpontokhoz való csatlakozás és használat különböző módjait ismerteti.

A JEA interaktív használata

Ha teszteli a JEA-konfigurációt, vagy egyszerű feladatokkal rendelkezik a felhasználók számára, ugyanúgy használhatja a JEA-t, mint egy normál PowerShell-újraformálási munkamenetet. Összetett átnevezési feladatok esetén implicit újramotálás használata javasolt. Az implicit remoting lehetővé teszi a felhasználók számára, hogy helyileg működjenek az adatobjektumokkal.

A JEA interaktív használatához a következőkre van szüksége:

  • Annak a számítógépnek a neve, amelyhez csatlakozik (lehet a helyi gép)
  • A számítógépen regisztrált JEA-végpont neve
  • Hitelesítő adatok, amelyek hozzáféréssel rendelkeznek a JEA-végponthoz a számítógépen

Az információk alapján jeA-munkamenetet indíthat a New-PSSession vagy az Enter-PSSession parancsmagokkal.

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

Ha az aktuális felhasználói fiók rendelkezik hozzáféréssel a JEA-végponthoz, kihagyhatja a hitelesítőadat-paramétert .

Amikor a PowerShell kéri, [localhost]: PS> hogy tudja, hogy most már a távoli JEA-munkamenetet használja. Futtatva Get-Command ellenőrizheti, hogy mely parancsok érhetők el. A rendszergazdától megtudhatja, hogy vannak-e korlátozások az elérhető paraméterekre vagy az engedélyezett paraméterértékekre.

Ne feledje, hogy a JEA-munkamenetek NoLanguage módban működnek. Előfordulhat, hogy a PowerShell használatának néhány módja nem érhető el. Például nem használhat változókat adatok tárolására vagy a parancsmagokból visszaadott objektumok tulajdonságainak vizsgálatára. Az alábbi példa két módszert mutat be, hogy ugyanazokat a parancsokat kapja meg, hogy módban működjenek 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'

Összetettebb parancshívások esetén, amelyek megnehezítik ezt a megközelítést, fontolja meg implicit újraküldést vagy egyéni függvények létrehozását, amelyek a szükséges funkciókat burkolják. További információ: NoLanguageModeabout_Language_Modes.

JEA használata implicit újraegyeztetéssel

A PowerShell implicit remoting modellel rendelkezik, amellyel proxyparancsmagokat importálhat egy távoli gépről, és úgy kezelheti őket, mintha helyi parancsok lennének. Implicit remoting van magyarázva ebben a Hey, Scripting Guy!blogbejegyzés. Az implicit remoting a JEA használatakor hasznos, mivel lehetővé teszi a JEA-parancsmagok teljes nyelvi módban való használatát. A lapkiegészítés, a változók, az objektumok kezelése és a helyi szkriptek használatával automatizálhatja a feladatokat egy JEA-végponton. Amikor proxyparancsot hív meg, az adatok a távoli gépen lévő JEA-végpontra kerülnek, és ott lesznek végrehajtva.

Az implicit újraküldés úgy működik, hogy parancsmagokat importál egy meglévő PowerShell-munkamenetből. Tetszés szerint előtagként előtagot adhat az egyes proxyparancsmagok főneveinek egy tetszőleges sztringgel. Az előtaggal megkülönböztetheti a távoli rendszerhez tartozó parancsokat. A rendszer létrehoz és importál egy ideiglenes szkriptmodult, amely az összes proxyparancsot tartalmazza a helyi PowerShell-munkamenet idejére.

# 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átozásai miatt. Ennek megkerüléséhez csak a JEA-munkamenetből importálja a szükséges parancsokat úgy, hogy explicit módon megadja a nevüket a -CommandName paraméternek. A jövőbeli frissítés a teljes JEA-munkamenetek érintett rendszereken történő importálásával kapcsolatos problémát fogja kezelni.

Ha nem tud JEA-munkamenetet importálni az alapértelmezett paraméterekRE vonatkozó JEA-korlátozások miatt, az alábbi lépéseket követve szűrje ki az alapértelmezett parancsokat az importált készletből. Továbbra is használhat olyan parancsokat, mint a Select-Object, de a távoli JEA-munkamenetből importált helyett csak a számítógépre telepített helyi verziót fogja használni.

# 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

A proxyzott parancsmagokat az Export-PSSession használatával is megőrizheti az implicit remotingtól. Az implicit újraegyezésről további információt az Import-PSSession és az Import-Module dokumentációjában talál.

JEA programozott használata

A JEA automatizálási rendszerekben és felhasználói alkalmazásokban, például belső ügyfélszolgálati alkalmazásokban és webhelyeken is használható. A megközelítés ugyanaz, mint a nem korlátozott PowerShell-végpontokkal kommunikáló alkalmazások készítésénél. Győződjön meg arról, hogy a program úgy van kialakítva, hogy a JEA által előírt korlátozásokkal működjön.

Egyszerű, egyszeri feladatok esetén az Invoke-Command paranccsal futtathat parancsokat egy JEA-munkamenetben.

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

Ha ellenőrizni szeretné, hogy mely parancsok használhatók a JEA-munkamenethez való csatlakozáskor, futtassa Get-Command és iterálja végig az eredményeket az engedélyezett paraméterek kereséséhez.

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

C# alkalmazás létrehozásakor létrehozhat egy Olyan PowerShell-futtatóteret, amely egy JEA-munkamenethez csatlakozik egy WSMan Csatlakozás ionInfo objektum konfigurációs nevének megadásával.

// 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();
}

A JEA használata a PowerShell Direct használatával

A Windows 10-ben és a Windows Server 2016-ban futó Hyper-V a PowerShell Direct szolgáltatást kínálja, amely lehetővé teszi, hogy a Hyper-V-rendszergazdák a virtuális gép hálózati konfigurációja vagy távoli felügyeleti beállításaitól függetlenül a PowerShell-lel felügyelhessék a virtuális gépeket.

A PowerShell Direct és a JEA használatával korlátozott hozzáférést biztosíthat a Hyper-V-rendszergazdáknak a virtuális géphez. Ez akkor lehet hasznos, ha elveszíti a virtuális géphez való hálózati kapcsolatot, és adatközpont-rendszergazdára van szüksége a hálózati beállítások javításához.

A JEA PowerShell Direct-en keresztüli használatához nincs szükség további konfigurációra. A virtuális gépen futó vendég operációs rendszernek azonban Windows 10, Windows Server 2016 vagy újabb verziónak kell lennie. A Hyper-V-rendszergazda a PSRemoting parancsmagok vagy -VMId paraméterek használatával csatlakozhat a -VMName JEA-végponthoz:

$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

Javasoljuk, hogy hozzon létre egy dedikált felhasználói fiókot, amely rendelkezik a Rendszer Hyper-V-rendszergazda általi használatához szükséges minimális jogosultságokkal. Ne feledje, hogy még egy nem hátrányos helyzetű felhasználó is bejelentkezhet alapértelmezés szerint a Windows rendszerű gépekre, beleértve a nem korlátozott PowerShell használatát is. Így böngészhetnek a fájlrendszerben, és többet tudhatnak meg az operációs rendszer környezetéről. Ha zárolni szeretne egy Hyper-V-rendszergazdat, és csak a PowerShell Direct és JEA használatával szeretné elérni őket, meg kell tagadnia a Helyi bejelentkezési jogosultságokat a Hyper-V-rendszergazda JEA-fiókjához.