Есть ли у Powershell какой-нибудь эквивалент .bashrc?

22

У меня есть некоторые функции, которые я хотел бы загрузить по умолчанию при открытии административной оболочки. Есть ли какой-нибудь эквивалент .bashrcили .profileчто я мог бы использовать для автоматического импорта сценариев при запуске оболочки?

leeand00
источник
Может быть, профиль PowerShell ( blogs.technet.microsoft.com/heyscriptingguy/2012/05/21/… )?
Джехад
Да, в Powershell это явно называется «профиль».
root

Ответы:

23

В статье, упомянутой в комментарии jehad, объясняется, что есть несколько мест, из которых PowerShell может загрузить профиль, что вам и нужно. Вы, вероятно, хотите для каждого пользователя обычную консоль PowerShell. Путь, по которому PowerShell будет проверять этот файл, указан в $profileпеременной. Вы можете создать этот файл и содержащий его каталог с помощью этой команды:

New-Item $profile -Type File -Force

Он создает файл с именем Microsoft.PowerShell_profile.ps1в папке, которая называется WindowsPowerShellв папке «Документы». Затем вы можете открыть его с помощью текстового редактора:

notepad $profile

Все в нем будет выполняться всякий раз, когда вы запускаете консоль PowerShell, независимо от того, повышены вы или нет. Я использовал эту другую статью для создания функции (которую вы можете использовать в качестве командлета), чтобы проверить, повышен ли текущий экземпляр PowerShell. Поместите это в ваш новый файл профиля:

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

Эта функция может быть использована в вашем обычном PowerShell, но вы также можете использовать ее для запуска всего лишь в вашем профильном скрипте, когда вы работаете с повышенными правами:

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

Поскольку этот файл содержит код, который будет автоматически запускаться даже в административном экземпляре PowerShell, вы не хотите, чтобы программы, работающие без ограничений, имели к нему доступ для записи. Я предлагаю изменить его ACL, чтобы предоставить вашей учетной записи доступ только для чтения, но при этом предоставить администраторам полный контроль. (Наследование должно быть сначала отключено.) Затем вы сможете редактировать сценарий только из программ с повышенными правами.

Бен Н
источник
3
Можно ли изменить это длинное имя Microsoft.PowerShell_profile.ps1на просто profile.ps1? В первой статье это выглядит как$Home\[My ]Documents\WindowsPowerShell\Profile.ps1
nephewtom