Powershell a-t-il une sorte d'équivalent .bashrc?

22

J'ai certaines fonctions que j'aimerais charger par défaut lorsque j'ouvre un PowerShell administratif. Existe-t-il un équivalent à dire .bashrcou .profileque je pourrais utiliser pour importer automatiquement les scripts lorsque je démarre le shell?

leeand00
la source
Peut-être un profil PowerShell ( blogs.technet.microsoft.com/heyscriptingguy/2012/05/21/… )?
jehad
Oui, dans Powershell, il est clairement appelé "profil".
root

Réponses:

23

L'article mentionné dans le commentaire de jehad explique qu'il existe plusieurs endroits à partir desquels PowerShell peut charger un profil, ce que vous voulez. Vous voulez probablement celui par utilisateur pour la console PowerShell normale. Le chemin par lequel PowerShell recherchera ce fichier est indiqué dans la $profilevariable. Vous pouvez créer ce fichier et son répertoire contenant avec cette commande:

New-Item $profile -Type File -Force

Il crée un fichier appelé Microsoft.PowerShell_profile.ps1dans un dossier appelé WindowsPowerShellsous votre dossier Documents. Ensuite, vous pouvez l'ouvrir avec un éditeur de texte:

notepad $profile

Tout y sera exécuté chaque fois que vous lancerez la console PowerShell, que vous soyez élevé ou non. J'ai utilisé cet autre article pour produire une fonction (que vous pouvez utiliser comme applet de commande) pour vérifier si l'instance PowerShell actuelle est élevée. Mettez ceci dans votre nouveau fichier de profil:

Function Test-Elevated {
  $wid = [System.Security.Principal.WindowsIdentity]::GetCurrent()
  $prp = New-Object System.Security.Principal.WindowsPrincipal($wid)
  $adm = [System.Security.Principal.WindowsBuiltInRole]::Administrator
  $prp.IsInRole($adm)
}

Cette fonction peut être utilisée dans votre expérience PowerShell normale, mais vous pouvez également l'utiliser pour exécuter uniquement des éléments dans votre script de profil lorsque vous exécutez Elevated:

If (Test-Elevated) {
  echo "Be careful!"
} Else {
  echo "Eh, do whatever."
}

Étant donné que ce fichier contient du code qui sera exécuté automatiquement même sous une instance administrative PowerShell, vous ne voulez pas que les programmes exécutés sans niveau d'accès y aient accès en écriture. Je suggère de modifier son ACL pour ne donner à votre compte d'utilisateur qu'un accès en lecture tout en permettant aux administrateurs un contrôle total. (L'héritage devra d'abord être désactivé.) Vous ne pourrez alors modifier le script qu'à partir de programmes élevés.

Ben N
la source
3
Ce nom long peut-il Microsoft.PowerShell_profile.ps1être changé en juste profile.ps1? Dans le premier article, il apparaît comme$Home\[My ]Documents\WindowsPowerShell\Profile.ps1
neveu