PowerShell使用第三方模块而不安装它

时间:2016-09-16 01:05:46

标签: powershell powershell-module

我相信这是可能的,但找不到任何有用的东西。 我写了一个局域网扫描程序脚本。为了尽可能地自动化,我不依赖于用户的任何输入。该脚本检查本地接口IP地址,并使用缩进网络工具模块计算每个IP地址和ping的数量。

问题是因为我使用的是第三方工具,我必须在任何我想要使用此脚本的机器上安装它。有没有办法可以将这个第三方模块包含在我的脚本中,比如将它们放在同一个文件夹中而不必单独安装?

1 个答案:

答案 0 :(得分:3)

这实际上取决于您希望如何将模块部署到其他计算机。如果要在网络共享上共享或分发zip包,则可以将这些依赖项与模块一起包含在内。只需将Indented.CommonIndented.NetworkTools放在一个带有脚本定义的目录中,如下所示:

MyModule/
└╴MyModule.psm1
└╴Indented.Common/
└╴IndentedNetworkTools/

然后,您可以直接从MyModule.psm1加载这些模块(不将它们安装到全局模块路径):

import-module $psscriptroot\Indented.Common\Indented.Common.psm1
import-module $psscriptroot\Indented.NetworkTools\Indented.NetworkTools.psm1

就是这样。如果你有一个普通的 .ps1 ,而不是 .psm1 模块,这也会有效。

也许更优雅的方式是使用WMF5 PackageManagement。在Indented.NetworkTools中声明MyModule.psd1作为依赖项(NestedModules),然后publish it on PSGallery。然后,您可以在其他计算机上说Install-Module MyModule - 这将安装MyModule及其依赖项。

这种方法的问题是,PowershellGallery(Indented.*模块不是)也可以使用任何声明的依赖项。