我有半打的PowerShell脚本(.ps1文件)都有相关的功能。有没有一种简单的方法可以将它们组合成一个模块,以便我可以将它们称为普通的CmdLets?
例如,正在运行:
PS> ./get-somedata.ps1 -myParams x
我可以导入模块并写:
PS> get-somedata -myParams x
答案 0 :(得分:2)
您应该创建一个脚本模块。首先,将脚本转换为函数(这样您可以在调用它们时跳过.\
)。这与将脚本内容包装在函数scriptblock中一样简单。实施例
GET-somedata.ps1
$data = get-childitem -filter *.doc
$data | ft -autosize
变成了。
GET-somedata.ps1
function get-somedata {
$data = get-childitem -filter *.doc
$data | ft -autosize
}
然后你可以创建一个包含所有新函数的* .psm1文件,或运行单独脚本的* .psm1文件(因为它们现在包含在函数脚本块中,所以函数将被导入而不是被运行当你运行脚本文件时)。如果您想要更多地控制名称,文件列表,版本等,您可以创建模块清单。上面的链接解释了其中一些。
查看this link。
答案 1 :(得分:1)
我想做同样的事情并且不想创建一个大型模块文件。 (因为我经常编辑我的文件)
所以这就是我所做的。丑陋但效果很好!完成是秒。
$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
}
现在你可以导入模块mycustommodule
并调用一个与原始脚本具有相同名称的函数。 : - )
答案 2 :(得分:0)
有几种选择。
将您的脚本放在$ env:Path的文件夹中,或将脚本文件夹添加到$ env:Path。您也不需要指定.ps1
将脚本转换为函数并将其添加到配置文件脚本($ profile)。当PowerShell启动时,此脚本将运行。您还可以在个人资料中使用您的功能dot source脚本。
将脚本转换为函数并将其添加到module。在使用之前不要忘记导入模块。您可以在powershell配置文件中执行此操作,以便每次启动PowerShell时都可以执行此操作。或者使用powershell v3,它可以自动加载模块。然后确保您的模块位于$PSModulePath。
的其中一个文件夹中