Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell run script with Import-Module

I have created a module for my admin group with some functions that automate some procedures we commonly perform (add administrators to remote machines, C drive cleanup, etc...)

One of the prerequisites for these functions is the generation of a series of 7 credentials, one for each domain we work in.

Is there a way to get a scriptblock to run when you import a module, or is this something I should add to each persons profile?

A commenter mentioned I could just add it to the module.psm1 file, but that didn't work. Here is the code I am trying to run.

$creds = Import-Csv [csvfile]
$key = Get-Content [keyfile]
foreach ($cred in $creds) {
    $user = $cred.User
    $password = $cred.Hash | ConvertTo-SecureString -Key $key
    $i = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$password
    New-Variable -Name ($cred.Domain + "_Cred") -Value $i -Force
    }

Running this manually works fine, but it isn't creating the credentials when run from the Import-Module command.

like image 702
Acerbity Avatar asked Nov 23 '15 20:11

Acerbity


2 Answers

Any code that's not a function will run when you import the module.

like image 92
briantist Avatar answered Oct 15 '22 16:10

briantist


A handy tip when working with modules: & and . have what may be undocumented functionality. With either you can give two arguments, the first is a module reference (from get-module or similar) and second is a script. With the module reference parameter the script will run in the context of the module. So for example:

& $myMod {$usa_cred} 

will output the value of $use_cred even if it hasn't been exported. This is useful for debugging scripts. Also modules can have embedded modules and & $myMod {gmo} will list those sub modules. By nesting & or . you can access sub-modules context.

like image 25
Χpẘ Avatar answered Oct 15 '22 14:10

Χpẘ