1

我正在将一个“函数库”文件点源到我正在处理的每个 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 中对文件进行点源处理并忽略无法找到的文件中的任何错误?

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

4

1 回答 1

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'
}
于 2018-03-16T09:48:23.467 回答