Czy Powershell ma jakiś odpowiednik .bashrc?

22

Mam niektóre funkcje, które chciałbym załadować domyślnie po otwarciu administracyjnej powłoki PowerShell. Czy jest jakiś odpowiednik do powiedzenia .bashrclub .profilektórego mógłbym użyć do automatycznego importowania skryptów po uruchomieniu powłoki?

leeand00
źródło
Tak, w programie Powershell nazywa się to po prostu „profilem”.
root

Odpowiedzi:

23

Artykuł wspomniany w komentarzu jehada wyjaśnia, że ​​istnieje kilka miejsc, z których PowerShell może załadować profil, co jest tym, czego chcesz. Prawdopodobnie potrzebujesz wersji na użytkownika dla zwykłej konsoli PowerShell. Ścieżka, przy której PowerShell będzie sprawdzał ten plik, jest podana w $profilezmiennej. Możesz utworzyć ten plik i zawierający go katalog za pomocą tego polecenia:

New-Item $profile -Type File -Force

Tworzy plik o nazwie Microsoft.PowerShell_profile.ps1w folderze o nazwie WindowsPowerShellpod folderem Dokumenty. Następnie możesz go otworzyć za pomocą edytora tekstu:

notepad $profile

Wszystko w nim będzie uruchamiane przy każdym uruchomieniu konsoli PowerShell, bez względu na to, czy jesteś podniesiony czy nie. Użyłem tego innego artykułu, aby utworzyć funkcję (której można użyć jako polecenia cmdlet) w celu sprawdzenia, czy bieżąca instancja programu PowerShell jest podniesiona. Umieść to w swoim nowym pliku profilu:

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)
}

Tej funkcji można używać w normalnym środowisku PowerShell, ale można jej także używać do uruchamiania rzeczy w skrypcie profilu, gdy jest się podniesionym:

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

Ponieważ ten plik zawiera kod, który będzie uruchamiany automatycznie nawet w administracyjnej instancji PowerShell, nie chcesz, aby programy działające bez aktualizacji miały do ​​niego dostęp do zapisu. Sugeruję zmianę listy ACL, aby dać dostęp do odczytu konta użytkownika, jednocześnie umożliwiając administratorom pełną kontrolę. (Dziedziczenie będzie musiało zostać najpierw wyłączone). Wtedy będziesz mógł edytować skrypt tylko z podwyższonych programów.

Ben N.
źródło
3
Czy tę długą nazwę Microsoft.PowerShell_profile.ps1można zmienić na just profile.ps1? W pierwszym artykule pojawia się jako$Home\[My ]Documents\WindowsPowerShell\Profile.ps1
nephewtom