PowerShell 在不安装的情况下使用第三方模块

PowerShell Use third party module without installing it

我相信这是可能的,但找不到任何有用的东西。 我写了一个局域网扫描仪脚本。为了尽可能自动化,我不依赖用户的任何输入。该脚本检查本地接口 IP 地址,并使用 Indented Network Tools 模块计算可能的 IP 地址数量,并对每个 IP 地址执行 ping 命令。

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

这实际上取决于您希望如何将模块部署到其他机器。如果您想在网络共享上共享它或分发一个 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. Declare Indented.NetworkTools as dependencies (NestedModules) in MyModule.psd1, then publish it on PSGallery。然后,您可以在其他机器上说 Install-Module MyModule - 这将安装 MyModule 及其依赖项。

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