Как мне максимально просто настроить профиль powershell по умолчанию для всех моих коллег на работе?

Чего я хочу достичь?

У меня есть один файл ps1, в котором есть все мои функции. На первом этапе я хочу преобразовать его в модуль ps. Затем я хочу иметь следующее:

  • Коллега получает скрипт или летучую мышь, которую он должен запустить ОДИН РАЗ. Это установит его путь к среде модулей $Env:PSModulePath на путь на сетевом диске, к которому у всех есть доступ.
  • Скопируйте и вставьте пользовательский файл profile.ps1 в пользователей %userprofile%\Documents\WindowsPowershell, которые импортируют модуль.
  • Теперь у каждого пользователя должны быть сценарии powershell, которые я сделал доступными в своей оболочке.

Как я пытался решить эту проблему

То, как я и мой коллега настроили это в прошлом, таково:

(у нас есть файл profile.ps1, который делает следующее):

#set path for profile_loader.ps1
$path = "\\server\share\folderwithscripts";
#call profile_loader.ps1
. "$path"

Затем этот profile_loader.ps1 просто загружает тонны скриптов (файлы ps1), например:

. "\\server\share\pathtoanotherscript.ps1

Линия за строкой.

Мне это не нравится, и это слишком сложно для моих 25 других коллег, которых я хочу создать в будущем.

Вопрос

Как это лучше всего сделать? Старый добрый файл .bat, который копирует и вставляет файл ps1 в свой профиль пользователя? Или есть лучший способ?


person GeraltDieSocke    schedule 23.07.2018    source источник
comment
Если это просто для того, чтобы ваши коллеги могли получить созданный вами модуль, то как насчет настройки ваш собственный сервер PowerShellGet? Таким образом, они смогут устанавливать любые опубликованные вами модули и легко получать обновления. Больше работы заранее, но не нужно возиться с общими файлами и пакетными сценариями, и масштабирование будет лучше по мере добавления пользователей и модулей.   -  person boxdog    schedule 23.07.2018


Ответы (1)


Ради бога, как человек, чьи $profile были стерты и установлены на «корпоративные значения по умолчанию», не делайте этого.

Если вам нужно, я предлагаю просто создать профиль, который вы хотите, чтобы все ваши модули были в общем месте, например, в вашей надежно заблокированной папке системного администратора.

Сделайте psedit $proile.AllUsersAllHosts на своем компьютере, измените его, затем создайте текстовый файл со всеми именами хостов, которые вы хотите уничтожить, с помощью собственного принудительного профиля. Добавьте это туда, чтобы он импортировал ваши модули по умолчанию.

# Checks your server share for any PSM1 files, could change to include PS1 as well I suppose. Long name because its in a $Profile so ¯\_(ツ)_/¯
$ModulePathWithLongNameBecauseSomeoneMayUseThisInAnActualScript = Get-ChildItem -file -Recurse "\\server\share\" -Include "*.psm1"
# Sets module path for other adhoc module calls if they dont want to restart their Powershell
$env:PSModulePath = $env:PSModulePath + ";\\server\share\"

# Imports all PSM1 files from the ModulePath*
Foreach($psm in $ModulePathWithLongNameBecauseSomeoneMayUseThisInAnActualScript){
    Import-Module "$($ModulePath.FullName)"
}

Запустите это на своем компьютере, чтобы донести душераздирающий $profile до ваших коллег, у которых, возможно, была собственная установка.

# Get a list of machines that your staff will use and throw them into a txt or csv etc.
$PCsForForcedProfile = Get-Content "\\server\share\PleaseNo.txt"
Foreach($Colleague in $PCsForForcedProfile){
    Copy-Item "C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1" "\\$Colleague\C$\Windows\System32\WindowsPowerShell\v1.0\" -force
}
person Drew    schedule 23.07.2018
comment
Это просто прекрасно. Большое спасибо. Я приму этот вопрос. - person GeraltDieSocke; 23.07.2018