我几乎没有尝试将Powershell脚本放入模块中。在同一模块中,我还打算加载一个用于生成令牌的c#dll。 DLL使用System.Management.Automation。
#content of asr.psm1
Import-Module ".\tokengenerator\PowershellTokenGenerator.dll"
Get-ChildItem $psscriptroot\*.ps1 -Recurse | ForEach-Object { . $_.FullName }
文件夹令牌生成器包含用于生成OAuth2.0令牌的dll。如何在同一模块下加载powershell模块和C#cmdlet。但是,当我尝试加载模块时,出现以下错误。
Import-Module D:\repo\src\aadsr\setup\asr.psm1
Import-Module : The specified module '.\tokengenerator\PowershellTokenGenerator.dll' was not loaded because no valid module file was found in any module directory. At D:\repo\src\aadsr\setup\asr.psm1:1 char:1
+ Import-Module ".\tokengenerator\PowershellTokenGenerator.dll"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (.\tokengenerato...enGenerator.dll:String) [Import-Module], FileNotFoundException
+ FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand
答案 0 :(得分:3)
使用:
Import-Module "$PSScriptRoot\tokengenerator\PowershellTokenGenerator.dll"
以确保找到相对于 script模块的(*.psm1
)位置的DLL,反映在自动变量$PSScriptRoot
中。
相比之下,如果您使用Import-Module ".\..."
,则会相对于当前位置(.
)查找DLL,无论它是什么。