2010-06-06 5 views

Répondre

-1

Vous ne pouvez pas. Lors du démarrage d'une session interactive distante avec enter-pssession, un profil distant est chargé. En outre, seul le profil de niveau machine dans $ pshome est chargé. Si vous souhaitez que les fonctions distantes soient disponibles, vous devez les initialiser dans le script de démarrage de la configuration de la session à distance. Jetez un oeil à get/set-pssessionconfiguration sur le serveur distant.

+0

Est-ce que quelque chose a changé dans la façon dont ces choses sont traitées? Je suis avec PowerShell 5.1 et j'ai créé un profile.ps1 dans C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ juste pour définir un alias, qui fonctionne lorsque vous utilisez le shell localement. Mais lors de la connexion à cette machine en utilisant Enter-PSSession, l'alias ne fonctionne pas ... – Alex

+0

@Alex Peut-être que vous devrez peut-être redémarrer le service WinRM à la fin du serveur? Un redémarrage devrait le faire, mais si c'est un peu lourd alors "restart-service winrm" devrait fonctionner. Ou, les choses peuvent avoir changé comme vous le dites ... – x0n

15

Par jonz et x0n:

Lorsque vous utilisez PSSession avec les configurations de session par défaut, exécutez pas de scripts de profil. Lors du démarrage d'une session interactive à distance avec Enter-PSSession, un profil distant est chargé. De plus, seul le profil de niveau machine $pshome est chargé.

Si vous voulez une session à préconfiguré (pour charger des fonctions personnalisées, snap-ins, modules, etc.), ajoutez un script de profil à un nouveau sessionconfiguration (pour les initialiser dans le script de démarrage du configuration de session à distance).

La cmdlet Register-PSSessionConfiguration crée et enregistre une nouvelle configuration de session sur l'ordinateur local. Utilisez Get-PSSessionConfiguration pour afficher les configurations de session existantes. Get-PSSessionConfiguration et Register-PSSessionConfiguration requièrent des droits élevés (démarrez PowerShell avec l'option "Exécuter en tant qu'administrateur").

Dans l'ordinateur cible, où profile.ps1 contient toutes vos fonctions:

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

Pour utiliser cette séance préconfiguré vous tapez, à partir de l'ordinateur local:

Enter-PSSession -ComputerName $computername -ConfigurationName WithProfile 

ou

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

(où $computername est le nom d'hôte de la re serveur de mote où vous avez enregistré la configuration de pssession). Une bonne source sur PowerShell Remoting est le Administrator's Guide to Powershell Remoting.

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

Comprendre et utiliser les profils PowerShell
http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/04/understanding-and-using-powershell-profiles.aspx

Les six différents chemins de profil Windows PowerShell et utiliser

utilisation actuelle r, hôte actuel - console
$ Accueil [Mes] Documents \ WindowsPowerShell \ Profile.ps1

Utilisateur actuel, tous les hôtes
$ Accueil [Mon] Documents \ Profile.ps1

Tous utilisateurs, Current Host - console
$ PsHome \ Microsoft.PowerShell_profile.ps1

Tous les utilisateurs, Tous les hôtes
$ PsHome \ Profile.ps1

utilisateur actuel, hôte actuel - ISE
$ Accueil [Mon] Documents \ WindowsPowerShell \ Microsoft.PowerShellISE_profile.ps1

Tous les utilisateurs, Current Host - ISE
$ PsHome \ Microsoft.PowerShellISE_profile.ps1

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

Ce profil s'applique à tous les utilisateurs et tous les shells.
% windir% \ system32 \ WindowsPowerShell \ v1.0 \ profile.ps1

Ce profil s'applique à tous les utilisateurs, mais seulement à la coquille Microsoft.PowerShell.
% windir% \ system32 \ WindowsPowerShell \ v1.0 \ Microsoft.PowerShell_profile.ps1

Ce profil applique uniquement à l'utilisateur actuel, mais affecte toutes les coquilles.
% UserProfile% \ Mes documents \ WindowsPowerShell \ profile.ps1

Ce profil applique uniquement à l'utilisateur actuel et la coquille Microsoft.PowerShell.
% UserProfile% \ Mes documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1

+0

"En outre, seul le profil de niveau machine dans $ pshome est chargé." Est-ce que cela a changé à un moment donné? Avec Windows 8.1 et WIndoes Server 2012, Enter-PSSession n'exécute aucun profil Powershell sur la machine cible. –

+0

@GreenstoneWalker - Je vois ça aussi. Avec un serveur Win 2008 R2/PS 3.0. – smaglio81

+0

Si vous ne voulez pas dépendre d'une version ou d'une langue spécifique de Windows, utilisez: '[Environment] :: GetFolderPath ('MyDocuments')' – mtman

4

Jason, Dans mon cas, je voulais avoir mon profil Powershell me suivre quand je télécommandables dans un autre ordinateur.

J'ai créé une fonction wrapper Remote qui prend un nom d'ordinateur, crée une session, charge votre profil dans la session et utilise enter-pssession.

Voici le code ci-dessous:

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 
} 

Vous pouvez modifier le paramètre -FilePath Invoke-Command pour prendre un fichier de votre goût.