我点了一个"函数库"将文件存入我正在处理的每个Powershell脚本中。
目前,我将此文件放在与脚本相同的目录中,并按如下方式对其进行点源:
. (Join-Path $PSScriptRoot FunctionLibrary.ps1)
一旦脚本进入生产",在与脚本正在执行的操作相关的特定位置的服务器上,这是很好的。但是,当我从我的通用" Powershell"中构建脚本时我的网络驱动器上的文件夹,这意味着我在几个不同的文件夹中以相同的文件结束 - 在编辑一个函数库然后对不同的文件进行不同的编辑之前,这只是时间问题并最终得到了应该是同一个文件的无数版本。
理想情况下,我希望将此函数库文件存储在" G:\ PowerShell \ Function Library"如果这样的文件不存在于脚本的工作目录中,则引用它。
伪的意思是这样的:
If( File Exists in C:\Location ) {
Load C:\Location\File
}
ElseIf( File Exists in "This Directory" ) {
Load "This Directory"\File
}
Else {
Log "Unable to load functions library, exiting"
Exit
}
为了实现这一目标,我只是在做:
. (Join-Path $PSScriptRoot FunctionLibrary.ps1)
. "G:\Powershell\Function Library\FunctionLibrary.ps1"
这样可行,但总是给我一个错误 - 我无法找到一种方法来消除错误。我已尝试过-ErrorAction "SilentlyContinue"
和| Out-Null
,但似乎没有任何区别。
我想这个问题有两个可能的答案,也许回答这两个问题对于这个帖子的未来读者都会有好处:
Test-Path
?)然后点源它是否存在?提前致谢。附:如果有任何主持人想要描述一个更相关的标题,请随意 - 我已经尝试过失败了!
答案 0 :(得分:1)
你基本上已经在那里回答了你自己的问题,只需要跟进你对Test-Path
的思考。通过在尝试点源之前测试文件的可用性,您不会得到任何错误(错误是您尝试点源不存在的文件。)
这是伪代码的调整版本:
if (Test-Path -Path 'C:\Location\file.ps1') {
. 'C:\Location\file.ps1'
}
elseif (Test-Path -Path "$PSScriptRoot\file.ps1") {
. "$PSScriptRoot\file.ps1"
}
else {
Write-Warning -Message 'file.ps1 not found'
}