Eric Furspan
Eric Furspan

Reputation: 761

How to pass variable from module back to script?

I have noticed that variables inside a module function do not remain in scope after execution returns to the script. I came across Export-ModuleMember but that didn't seem to help, perhaps i'm using it wrong.

FunctionLibrary.psm1

Function AuthorizeAPI
{
   # does a bunch of things to find $access_token
   $access_token = "aerh137heuar7fhes732"
}
Write-Host $access_token
aerh137heuar7fhes732

Export-ModuleMember -Variable access_token -Function AuthorizeAPI

Main script

Import-Module FunctionLibrary

AuthorizeAPI # call to module function to get access_token

Write-Host  $access_token 
# nothing returns

I know as an alternative I could just dot source a separate script and that would allow me to get the access_token but I like the idea of using modules and having all my functions therein. Is this doable? Thanks SO!

Upvotes: 0

Views: 677

Answers (1)

G42
G42

Reputation: 10019

As per @PetSerAl's comment, you can change the scope of your variable. Read up on scopes here. script scope did not work for me when running from console; global did.

$global:access_token = "aerh137heuar7fhes732"

Alternatively, you can return the value form the function it and store in a variable; no scope change needed.

Function

Function AuthorizeAPI
{
   # does a bunch of things to find $access_token
   $access_token = "aerh137heuar7fhes732"
   return $access_token
}

Main Script

Import-Module FunctionLibrary

$this_access_token = AuthorizeAPI # call to module function to get access_token

Write-Host  $this_access_token 

Upvotes: 1

Related Questions