GeraltDieSocke
GeraltDieSocke

Reputation: 1618

How can I set up a default powershell profile for all my co workers at work as simple as possible?

What do I want to achieve?

I have one ps1 file that has all of my functions inside. In the first step I want to convert it into a ps module. Then I want to have the following:

How I tried to solve it

The way me and a colleague have set it up in the past is with this:

(we have a profile.ps1 file that does the following):

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

Then this profile_loader.ps1 baiscally just loads tons of scripts (ps1 files) like this:

. "\\server\share\pathtoanotherscript.ps1

Line after line.

I don't like it and it is too complicated for my 25 other colleagues I want to set up in the future.

Question

What is the best way to achieve this? A good old .bat file that copy and past the ps1 file into their userprofile? Or is there a better way?

Upvotes: 2

Views: 267

Answers (1)

Drew
Drew

Reputation: 4020

As someone who had their $profile wiped and set to a "company default", for the love of god, don't.

If you have to, then I suggest just creating a profile you want everyone to have with all your modules in a shared location, like your securely locked down Sysadmin folder.

Do psedit $proile.AllUsersAllHosts on your machine, modify that, then make a text file with all the hostnames you want to destroy with your own forced profile. Throw this in there to make it import your modules by default.

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

Run this on your machine to deliver your soul crushing $profile to your colleagues who may have had their own setup.

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

Upvotes: 1

Related Questions