This topic contains 3 replies, has 3 voices, and was last updated by Profile photo of Jonathan Warnken Jonathan Warnken 1 year, 4 months ago.

  • Author
  • #25962
    Profile photo of Stephen Yeadon
    Stephen Yeadon

    I'm not sure if I'm asking the right question or in the right place but here goes. I have added a new path to the PSModulePath at the machine level. I want the modules under this location to be available at any prompt for any user. However the modules at C:\FooBar are only available when the powershell session is run as admin. I have clearly missed something but I'm not sure what. I don't know if it makes any difference but this is 2008 R2 machine running powershell v4.

    # Figure out what is in the powershell module path
    $CurrentValue = [Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
    $CurrentValue.split(';') | sort

    # Add the new path to our module path
    $NewPath = "C:\FooBar"
    [Environment]::SetEnvironmentVariable("PSModulePath", $CurrentValue + ";$NewPath", "Machine")

    # test to ensure that it has just worked – we should see our new path included
    [Environment]::GetEnvironmentVariable("PSModulePath", "Machine")

    I had assumed that this would be the correct way to acomplish what I wanted rather than editing the alluserallhost profile in sys32.

  • #25970
    Profile photo of Dave Wyatt
    Dave Wyatt

    You seem to have done everything correctly. Do you have an NTFS permissions problem on C:\FooBar that is preventing non-administrators from reading the scripts, perhaps?

  • #25977
    Profile photo of Stephen Yeadon
    Stephen Yeadon

    In order for all users to have access to these modules I have had to reboot the machine. Thanks for the response though it certainly made me think.

  • #26176
    Profile photo of Jonathan Warnken
    Jonathan Warnken

    you need to refresh the environment variable after updating it.

    $env:PSModulePath =[System.Environment]::GetEnvironmentVariable("PSModulePath","Machine") 

    That will update the current powershell session and any new sessions opened after the refresh. Any other sessions open at the time of the refresh will see not see the change until they are closed and reopened or you update the variable in that session.

You must be logged in to reply to this topic.