2016-09-16 48 views
1

我相信这是可能的,但找不到任何有用的东西。 我已经写了一个局域网扫描器脚本。为了尽可能实现自动化,我不依赖用户的任何输入。该脚本检查本地接口IP地址,并使用缩进网络工具模块计算每个IP地址的可能IP地址数和ping数。PowerShell使用第三方模块而不安装它

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

+0

检查此链接,看看它是否满足您的要求http://windowsitpro.com/blog/powershell-implicit-remoting-never-install-module-again – Nkosi

+0

感谢您的答复,但不幸的是,这将不适用于我。我的脚本将在客户环境中运行,以便快速发现网络设备等。所以我不能将他们的机器远离我们的机器。 – Junaid

+0

但是,如何在一个中央服务器的环境中使用它,并让其他人使用它。我知道它看起来像一个黑客,但它可能是一个可行的解决方法。 – Nkosi

回答

2

这真的取决于你想如何将你的模块部署到其他机器。如果你想在网络共享上共享它或者分发一个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。在MyModule.psd1中声明Indented.NetworkTools作为依赖项(NestedModules),然后publish it on PSGallery。然后,你可以在其他机器上说Install-Module MyModule - 这将安装MyModule和它的依赖关系。

这种方法的问题是任何声明的依赖关系也必须在PowershellGallery上使用(Indented.*模块没有)。

+0

谢谢qbik和nkosi。我想通了,但我正在进入一个完整的路径,但这似乎更好。再一次感谢你 – Junaid