PowerShell 在不安装的情况下使用第三方模块
PowerShell Use third party module without installing it
我相信这是可能的,但找不到任何有用的东西。
我写了一个局域网扫描仪脚本。为了尽可能自动化,我不依赖用户的任何输入。该脚本检查本地接口 IP 地址,并使用 Indented Network Tools 模块计算可能的 IP 地址数量,并对每个 IP 地址执行 ping 命令。
问题是因为我使用的是第三方工具,所以我必须将它安装在任何我想使用该脚本的机器上。有没有一种方法可以将这个第三方模块包含在我的脚本中,比如将它们放在同一个文件夹中而不必单独安装?
这实际上取决于您希望如何将模块部署到其他机器。如果您想在网络共享上共享它或分发一个 zip 包,那么您可以将这些依赖项与您的模块一起包含在内。只需将 Indented.Common
和 Indented.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.*
模块不可用)。
我相信这是可能的,但找不到任何有用的东西。 我写了一个局域网扫描仪脚本。为了尽可能自动化,我不依赖用户的任何输入。该脚本检查本地接口 IP 地址,并使用 Indented Network Tools 模块计算可能的 IP 地址数量,并对每个 IP 地址执行 ping 命令。
问题是因为我使用的是第三方工具,所以我必须将它安装在任何我想使用该脚本的机器上。有没有一种方法可以将这个第三方模块包含在我的脚本中,比如将它们放在同一个文件夹中而不必单独安装?
这实际上取决于您希望如何将模块部署到其他机器。如果您想在网络共享上共享它或分发一个 zip 包,那么您可以将这些依赖项与您的模块一起包含在内。只需将 Indented.Common
和 Indented.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.*
模块不可用)。