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

Jun*_*aid 5 powershell powershell-module

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

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

qbi*_*bik 7

这实际上取决于您希望如何将您的模块部署到其他机器上。如果您想在网络共享上共享它或分发 zip 包,那么您可以将这些依赖项与您的模块一起包含在内。只要把Indented.CommonIndented.NetworkTools在一个目录中有你的脚本定义,就像这样:

MyModule/
??MyModule.psm1
??Indented.Common/
??IndentedNetworkTools/
Run Code Online (Sandbox Code Playgroud)

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

import-module $psscriptroot\Indented.Common\Indented.Common.psm1
import-module $psscriptroot\Indented.NetworkTools\Indented.NetworkTools.psm1
Run Code Online (Sandbox Code Playgroud)

就是这样。如果您有一个普通的.ps1,而不是一个.psm1模块,这也将起作用。

也许更优雅的方法是使用WMF5 PackageManagement。在 中声明Indented.NetworkTools为依赖项 (NestedModules) MyModule.psd1,然后将其发布到 PSGallery 上。然后,您可以Install-Module MyModule在其他机器上说- 这将安装MyModule并且它是依赖项。

这种方法的问题在于,任何声明的依赖项也必须在 PowershellGallery 上可用(哪些Indented.*模块不是)。