我正试图通过PowerShell文档,并且遇到了混乱。
我使用位于here的示例代码创建了一个cmdlet程序集。
我可以通过发出命令加载模块:
Import-Module -Name *NameOfAssembly*
当然,这是因为程序集位于PowerShell可以找到它的文件夹中。
如果我创建模块清单,我能够获取模块清单以加载程序集的唯一方法是在清单的RequiredModules
行添加程序集。文档(位于here)表明这实际上并不加载任何模块。根据我的观察,这与实际发生的事情相矛盾。我不正确地阅读/理解这个吗?如果没有,我错过了什么?是否有更好的方法来获取cmdlet程序集(或程序集)(我认为它们称为二进制模块)部署?
答案 0 :(得分:1)
首先 - 与脚本模块一样,只需将NameOfModule.dll
加载到NameOfModule
$env:PSModulePath
子文件夹中即可加载$dir = mkdir $profile\..\Modules\Greetings -Force
$dllPath = Join-Path -Path $dir.FullName -ChildPath Greetings.dll
Add-Type @'
using System.Management.Automation;
namespace SendGreeting
{
[Cmdlet(VerbsCommunications.Send, "Greeting")]
public class SendGreetingCommand : Cmdlet
{
[Parameter(Mandatory=true)]
public string Name
{
get { return name; }
set { name = value; }
}
private string name;
protected override void ProcessRecord()
{
WriteObject("Hello " + name + "!");
}
}
}
'@ -OutputAssembly $dllPath
Import-Module Greetings -PassThru
RequiredModules
如果您确实需要清单(例如,对于某些元数据或外部文件),您有两种选择,具体取决于PowerShell版本:
您使用的密钥RequiredAssemblies
用于提供命名依赖项的方法。例如。您的代码所依赖的模块。 test.f90:7.52:
module procedure my_module_fortran_new_my_double
1
Error: 'my_module_fortran_new_my_double' at (1) is not a module procedure
类似的工作,因为添加包含PowerShell cmdlet的任何程序集"只是工作" - 但那种方法会隐藏"来自您定义命令的未来用户。