PowerShell使用第三方模块而不安装它
我相信这是可能的,但找不到任何有用的东西。 我已经写了一个局域网扫描器脚本。为了尽可能实现自动化,我不依赖用户的任何输入。该脚本检查本地接口IP地址,并使用缩进网络工具模块计算每个IP地址的可能IP地址数和ping数。PowerShell使用第三方模块而不安装它
问题是因为我正在使用第三方工具,我必须将它安装在我想要使用此脚本的任何机器上。有没有办法让我的脚本包含第三方模块,比如把它们放在同一个文件夹中,而不必单独安装它?
这真的取决于你想如何将你的模块部署到其他机器。如果你想在网络共享上共享它或者分发一个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。在MyModule.psd1
中声明Indented.NetworkTools
作为依赖项(NestedModules),然后publish it on PSGallery。然后,你可以在其他机器上说Install-Module MyModule
- 这将安装MyModule
和它的依赖关系。
这种方法的问题是任何声明的依赖关系也必须在PowershellGallery上使用(Indented.*
模块没有)。
谢谢qbik和nkosi。我想通了,但我正在进入一个完整的路径,但这似乎更好。再一次感谢你 – Junaid
检查此链接,看看它是否满足您的要求http://windowsitpro.com/blog/powershell-implicit-remoting-never-install-module-again – Nkosi
感谢您的答复,但不幸的是,这将不适用于我。我的脚本将在客户环境中运行,以便快速发现网络设备等。所以我不能将他们的机器远离我们的机器。 – Junaid
但是,如何在一个*服务器的环境中使用它,并让其他人使用它。我知道它看起来像一个黑客,但它可能是一个可行的解决方法。 – Nkosi