PowerShell sessioni remote e la portata domanda: Comandi sembrano funzionare a livello locale
-
25-09-2019 - |
Domanda
Ecco un esempio di script che i tentativi di creare una sessione remota su un server, quindi utilizzare WMI per ottenere un elenco di pool di applicazioni IIS del server, ed elencare i loro nomi:
function Test-Remoting
{
[CmdletBinding()]
param
(
)
begin
{
Enter-PSSession TestServer
$appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6
$appPools | ForEach-Object {
$appPool = $_;
$appPool.Name
}
Exit-PSSession
}
}
Questa funzione è contenuta in un file chiamato "Test-Remoting.ps1." Apro PowerShell, CD nella directory che contiene il file, Dot-source il file in, e chiamare la funzione:
PS C:\Users\moskie> . .\Test-Remoting.ps1
PS C:\Users\moskie> Test-Remoting
Ma il risultato di questo script è un elenco dei pool di applicazioni sul mio locale macchina e non TestServer.
In alternativa, se corro le seguenti linee (identici a quelli in funzione) manualmente al PowerShell prompt I do ottenere l'elenco delle piscine app sul server remoto:
PS C:\Users\moskie> Enter-PSSession TestServer
[TestServer]: PS C:\> $appPools = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" -Authentication 6
[TestServer]: PS C:\> $appPools | ForEach-Object { $appPool = $_; $appPools.Name }
<a list of the names of the application pools on TestServer>
[TestServer]: PS C:\>
penso che ci sia un concetto che sono ignari, per quanto riguarda PowerShell remoting e la portata. Qualcuno può aiutare a spiegare questo comportamento?
Soluzione
Credo Enter / Exit-PSSession si intende un uso più interattivo. Dalla aiuto Enter-PSSession:
SYNOPSIS
Starts an interactive session with a remote computer.
In uno script, utilizzare New-PSSession e Invoke-Command in questo modo:
$session = New-PSSession server01
Invoke-Command -Session $session {hostname}
Remove-PSSession -Session $session
Aggiornamento: per eseguire uno script completo utilizzare in remoto il parametro FilePath su Invoke-Command:
icm server01 -FilePath C:\users\keith\myscript.ps1 -arg 1,2
In questo modo copiare lo script al computer remoto server01 ed eseguirlo lì con i parametri forniti.