Куда поместить сценарии профиля PowerShell, если стандартные расположения запрещены?

#powershell

#powershell

Вопрос:

В нашей корпоративной среде у меня возникают трудности с созданием сценариев профиля PowerShell.

Чтобы пользователи не могли записывать документы на локальный диск, каталог «Documents» должен находиться на сетевом диске. Обычно это «H:» (домашний) диск.

Аналогично, пользователям запрещено писать под C:WindowsSystem32 .

Куда я могу поместить сценарий профиля ISE, если эти два недоступны?

PSVersion 5.0.10586.117

 PS C:WindowsSystem32WindowsPowerShellv1.0> $HOME, $PSHOME
C:Userspwatson
C:WindowsSystem32WindowsPowerShellv1.0
  

См. Также: Справка-О about_Profiles

Когда я не подключен к сети, это настройки $profile . Я все еще не могу писать под C:WindowsSystem32 и эти CurrentUser значения недопустимы.

 PS C:WindowsSystem32WindowsPowerShellv1.0> $profile | Get-Member -Type NoteProperty | ForEach-Object {$_.ToString
()}
string AllUsersAllHosts=C:WindowsSystem32WindowsPowerShellv1.0profile.ps1
string AllUsersCurrentHost=C:WindowsSystem32WindowsPowerShellv1.0Microsoft.PowerShell_profile.ps1
string CurrentUserAllHosts=WindowsPowerShellprofile.ps1
string CurrentUserCurrentHost=WindowsPowerShellMicrosoft.PowerShell_profile.ps1
PS C:WindowsSystem32WindowsPowerShellv1.0>
  

Комментарии:

1. К моему сведению, вы являетесь пользователем в этой среде или администратором? Почему пользователю требуется доступ на запись к сценарию?

2. @wOxxOm — Это не то место, где в документе Microsoft указано, что скрипты могут быть размещены. Вы знаете, что это работает?

3. @Kage — я пользователь. Это моя машина разработки. У меня есть разрешение «администратор», но не для записи под System32.

4. @Liturgist, нет, это не сработало, я удалил комментарий.

5. Я обнаружил, что могу поместить файл profile.ps1 в $profile.CurrentUserAllHosts , и оболочка будет использовать его. Значение находится в форме UNC, \SERVERSHAREuserMy Documents... . Когда я не подключен к сети, у меня не будет доступного профиля.

Ответ №1:

Один из вариантов — создать ярлык с целью, подобной этой:

 %systemRoot%System32WindowsPowerShellv1.0powershell.exe -NoExit -file C:somewheremyprofile.ps1
  

и затем всегда используйте этот ярлык для запуска PowerShell.

На самом деле это не использует встроенную концепцию профиля PowerShell, но это точечный поиск файла ps1, который ведет себя почти так же, как файл профиля.

Если вы хотите запустить PowerShell с cmd.exe , создайте пакетный файл с тем же содержимым, что и выше, и поместите его где-нибудь на вашем пути (если у вас есть разрешения на это).

Комментарии:

1. Я собираюсь выбрать это в качестве ответа, потому что это может кому-то помочь. Я могу попробовать это, но я думаю, что могут быть вещи, потерянные при неиспользовании концепции разработанного профиля. Есть еще $PSCommandPath , $PSScriptRooot , и $env:PSModulePath с этим нужно разобраться.