2010-06-06 8 views
5

Come utilizzare una funzione nel mio profilo sulla macchina remota quando si utilizza Enter-PSSession sul computer locale per aprire una sessione remota di PowerShell.Profili remoti PowerShell

+0

qualsiasi soluzione finale con codice sorgente completo? – Kiquenet

risposta

-1

Non è possibile. Quando si avvia una sessione interattiva remota con enter-pssession, viene caricato un profilo remoto. Inoltre, viene caricato solo il profilo a livello macchina in $ pshome. Se si desidera disporre di funzioni remote, è necessario inizializzarle nello script di avvio della configurazione della sessione remota. Dai un'occhiata a get/set-pssessionconfiguration sul server remoto.

+0

È cambiato qualcosa nel modo in cui vengono gestite queste cose? Sono con powershell 5.1 e ho creato un profile.ps1 in C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ solo per impostare un alias, che funziona quando si utilizza la shell localmente. Ma quando ci si connette a quella macchina usando Enter-PSSession, l'alias non funziona ... – Alex

+0

@Alex Forse potrebbe essere necessario riavviare il servizio WinRM sul server? Un riavvio dovrebbe farlo, ma se questo è un po 'pesante, allora "restart-service winrm" dovrebbe funzionare. Oppure, le cose potrebbero essere cambiate come dici tu ... – x0n

15

Con Jonz e x0n:

Quando si utilizzano sessioni PSSession con le configurazioni di sessione di default, nessuno script profilo di esecuzione.

All'avvio di una sessione interattiva remota con Enter-PSSession, viene caricato un profilo remoto. Inoltre, viene caricato solo il profilo a livello macchina in $pshome.

Se si desidera una sessione per essere preconfigurato (per caricare funzioni personalizzate, snap-in, moduli, ecc), aggiungere uno script profilo per un nuovo sessionconfiguration (per loro inizializzazione nello script di avvio del configurazione della sessione remota).

Il cmdlet Register-PSSessionConfiguration crea e registra una nuova configurazione di sessione sul computer locale. Utilizzare Get-PSSessionConfiguration per visualizzare le configurazioni di sessione esistenti. Sia Get-PSSessionConfiguration che Register-PSSessionConfiguration richiedono diritti elevati (avviare PowerShell con l'opzione "Esegui come amministratore").

Nel computer di destinazione, dove profile.ps1 contiene tutte le funzioni:

Register-PSSessionConfiguration -Name WithProfile -StartupScript $PsHome\Profile.ps1 

Per utilizzare questa sessione preconfigurato è necessario digitare, dal computer locale:

Enter-PSSession -ComputerName $computername -ConfigurationName WithProfile 

o

Enter-PSSession -ComputerName $computername -ConfigurationName WithProfile -Credential [email protected] 

(dove $computername è il nome host del re mote server in cui è stata registrata la pssessionconfiguration).

Una buona fonte sul servizio remoto di PowerShell è Administrator's Guide to Powershell Remoting.

Riferimenti:
Powershell Remoting: Use Functions loaded in Powershell remote Profile? http://jrich523.wordpress.com/2010/07/21/update-creating-a-profile-for-a-remote-session/

comprensione e l'utilizzo PowerShell profili
http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/04/understanding-and-using-powershell-profiles.aspx

I sei diversi percorsi profilo di Windows PowerShell e utilizzare

Pagina corrente r, host corrente - console
$ HOME [My] Documenti \ WindowsPowerShell \ Profile.ps1

Utente corrente, tutti gli host
$ HOME [mio] Documenti \ Profile.ps1

Tutto Gli utenti, host corrente - console
$ PsHome \ Microsoft.PowerShell_profile.ps1

Tutti gli utenti, tutti gli host 012.380.073.162. $ PsHome \ Profile.ps1

Utente corrente, host corrente - ISE
$ casa [mio] Documenti \ WindowsPowerShell \ Microsoft.PowerShellISE_profile.ps1

tutti gli utenti, host corrente - ISE
$ PsHome \ Profiles Microsoft.PowerShellISE_profile.ps1

di Windows PowerShell
http://msdn.microsoft.com/en-us/library/bb613488%28VS.85%29.aspx

Questo profilo si applica a tutti gli utenti e tutte le shell.
% windir% \ system32 \ WindowsPowerShell \ v1.0 \ Profile.ps1

Questo profilo si applica a tutti gli utenti, ma solo alla shell Microsoft.PowerShell.
% windir% \ system32 \ WindowsPowerShell \ v1.0 \ Microsoft.PowerShell_profile.ps1

Questo profilo è valida solo per l'utente corrente, ma riguarda tutte le shell.
% USERPROFILE% \ Documenti \ WindowsPowerShell \ Profile.ps1

Questo profilo si applica solo per l'utente corrente e la shell Microsoft.PowerShell.
% UserProfile% \ Documenti \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1

+0

"Inoltre, viene caricato solo il profilo a livello macchina in $ pshome." Questo è cambiato ad un certo punto? Con Windows 8.1 e WIndoes Server 2012, Enter-PSSession non esegue alcun profilo PowerShell sul computer di destinazione. –

+0

@GreenstoneWalker - Sto vedendo anche questo. Con un server Win 2008 R2/PS 3.0. – smaglio81

+0

Se non vuoi dipendere da una specifica versione o lingua di Windows, usa: '[Ambiente] :: GetFolderPath ('MyDocuments')' – mtman

4

Jason, Nel mio caso, ho voluto avere il mio profilo PowerShell seguire me quando sono comandate a distanza in un altro computer.

Ho creato una funzione wrapper Remote che accetta un nomecomputer, crea una sessione, carica il profilo nella sessione e utilizza enter-pssession.

Ecco il codice qui sotto:

function Remote($computername){ 
if(!$Global:credential){ 
$Global:credential = Get-Credential 
} 
$session = New-PSSession -ComputerName $computername -Credential $credential 
Invoke-Command -FilePath $profile -Session $session 
Enter-PSSession -Session $session 
} 

Si potrebbe modificare il parametro Invoke-Command -FilePath di prendere qualsiasi tipo di file di vostro gradimento.