来自不同位置的点源文件

时间:2018-03-16 08:46:44

标签: powershell

我点了一个"函数库"将文件存入我正在处理的每个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?)然后点源它是否存在?
  • 如何在Powershell中对源文件进行点源并忽略无法找到的文件中的任何错误?

提前致谢。附:如果有任何主持人想要描述一个更相关的标题,请随意 - 我已经尝试过失败了!

1 个答案:

答案 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'
}