我们有许多Powershell脚本,它们调用带有可重用函数的“模块”。模块中的一个函数设置隐式远程连接到主DC,然后将活动目录模块导入本地会话。我知道这是有效的,因为我已将该功能粘贴到Powershell中并且它可以工作。但是当脚本加载包含正确导入的函数的模块但是cmdlet不能从主脚本中使用时。我想这与范围有关,但我无法看到如何使其工作。作为参考,我们无法改变调用具有可重用函数的模块的想法,因为许多脚本依赖于它,并且更改它将是一项重大工作。
- 已添加以供以下评论澄清
我有一个脚本,我们称之为Script1,这个脚本做了一些事情,但也使用以下代码从其他脚本模块加载一些附加功能
$Global:ICTSGVModuleLocation="\\server1\Scripts\Support Files\PS Modules\Global Modules"
get-childitem $Script:ICTSGVModuleLocation | foreach-object $_.name {Import-Module "$Global:ICTSGVModuleLocation\$_" -Global}
在其他一个脚本模块中(让我们称之为script2)是一些用于创建隐式远程会话并导入活动目录模块的代码,代码如下
Function Global:ICTSGF.Adconnecter
{Try {$Script:connect = new-pssession -ComputerName "$Global:ICTSGVAdConnectorServer";
invoke-command -session $script:connect {import-module activedirectory -prefix cardiff};
Import-Module (Import-PSSession -session $Script:connect -module ActiveDirectory - AllowClobber) -Global}
Catch {ICTSGF.ScriptOutput "E2" "A4" "Loading Active Directory Module Failed"}
Finally {}}
在主脚本(script1)中,我通过调用Global:ICTSGF.Adconnecter加载该函数。然后加载标题,说明加载活动目录模块,它似乎工作。但是,当我尝试从导入的模块运行命令时,它不起作用
get-cardiffaduser $user
由于