【发布时间】:2018-08-15 19:40:10
【问题描述】:
我对存储自定义 Powershell 模块的位置有点困惑。
这是我的Utility.psm1的一个例子
New-Module -Name 'Utility' -ScriptBlock {
function New-File($filename)
{
if(-not [String]::IsNullOrEmpty($filename))
{
New-Item -ItemType File "$filename"
} else {
Write-Error "function touch requires filename as a parameter"
}
}
function Change-DirectoryUp($number)
{
for($i=0; $i -lt $number; $i++)
{
if((pwd).Path -eq 'C:\') { break } else { cd .. }
}
}
function Get-EnabledWindowsFeatures()
{
$features = Get-WindowsOptionalFeature -Online
$features | ? {$_.State -eq 'Enabled'} | select FeatureName
}
}
如果我想在每次打开 Powershell 或 Powershell ISE 时都导入这个模块,我该怎么做?我将Utility.ps1 存储在哪里重要吗?我想避免将完整路径传递给这个文件......但我担心使用相对路径会依赖于“Start-In”路径。
我注意到有一个名为 $env:PSModulePath 的变量,但我的 C: 驱动器中不存在该目录的路径。
我应该创建那个目录并将它们存储在那里吗?如果我这样做,如何导入模块?
【问题讨论】:
-
如果您总是希望它加载到您的会话中,请使用配置文件。
-
@TheIncorrigible1 如果我将所有的代码都放入我的个人资料中,它会变得非常混乱。我希望使用配置文件作为对某些代码和抽象进行分组的一种方式
-
这并不能否定我的说法......只需编写一个带有函数的脚本并将其点源到您的配置文件中,或者如果您愿意,可以从中创建一个模块并使用
Import-Module。 -
@TheIncorrigible1 点源文件与在
New-Module中包装后运行Import-Module之间有什么区别吗?....我还是想不通 -
仅当您的文件正在加载二进制文件、运行前置条件脚本、依赖版本控制等时。如果它只是一个带有 psm1 扩展名的静态脚本,不妨点源它。
标签: powershell powershell-5.0 powershell-ise import-module