我有六个具有相关功能的 powershell 脚本(.ps1 文件)。有没有一种简单的方法可以将它们组合成一个模块,以便我可以像普通 CmdLets 一样调用它们?
例如,而不是运行:
PS> ./get-somedata.ps1 -myParams x
我可以导入模块并编写:
PS> get-somedata -myParams x
我有六个具有相关功能的 powershell 脚本(.ps1 文件)。有没有一种简单的方法可以将它们组合成一个模块,以便我可以像普通 CmdLets 一样调用它们?
例如,而不是运行:
PS> ./get-somedata.ps1 -myParams x
我可以导入模块并编写:
PS> get-somedata -myParams x
您应该创建一个脚本模块。首先,把你的脚本变成函数(这样你可以.\
在调用它们时跳过)。这就像将脚本内容包装在函数脚本块中一样简单。前任。
获取一些数据.ps1
$data = get-childitem -filter *.doc
$data | ft -autosize
变成了。
获取一些数据.ps1
function get-somedata {
$data = get-childitem -filter *.doc
$data | ft -autosize
}
然后,您可以创建一个包含所有新函数的 *.psm1 文件,或者创建一个运行单独脚本的 *.psm1 文件(因为它们现在包装在函数脚本块中,函数将被导入而不是在运行时运行脚本文件)。如果您想对名称、文件列表、版本等进行更多控制,您可以创建一个模块清单。上面的链接解释了其中一些。
看看这个链接。
好吧,我想做同样的事情,不想创建一个庞大的模块文件。(因为我经常编辑我的文件)
所以这就是我所做的。丑陋但效果很好!完成是几秒钟。
$Module = c:\users\<username>\documents\windowspowershell\module\mycustommodule\mycustommodule.psm1
#Added so when I make changes to scripts I can easily rebuild the module file.
Clear-content $module
$Scripts = c:\<scriptfolder>
$FileList = gci $Scripts
foreach ($File in $FIleList)
{ $name = $File.basename
$OpenFunction = "`n`n`n`n Function $Name { `n"
$CloseFunction = "`n}"
add-content $openfunction -path $module
$File | get-content | add-content -path $module
add-content $closefunction -path $module
}
现在你可以 import-module mycustommodule
并调用与原始脚本同名的函数之一。:-)
有几种选择。
将脚本放在 $env:Path 的文件夹中,或将脚本文件夹添加到 $env:Path。您也不需要指定 .ps1
将您的脚本转换为函数并将它们添加到您的配置文件脚本 ($profile)。此脚本在 powershell 启动时运行。您还可以使用配置文件中的函数对脚本进行点源。
将您的脚本转换为函数并将它们添加到模块中。不要忘记在使用前导入你的模块。您可以在您的 powershell 配置文件中执行此操作,因此每次启动 powershell 时都会执行此操作。或者使用可以自动加载模块的 powershell v3。然后确保您的模块位于$PSModulePath的文件夹之一中。