检查 UNC 路径/服务器文件夹是否存在



我正在处理一个利用PowerShell脚本的项目,该脚本在远程SQL Server(SSMS)上创建新的登录名,然后检查服务器上是否存在特定文件夹。如果该文件夹尚不存在,脚本将创建该文件夹。

我遇到的问题是我无法验证该文件夹是否存在,因为我正在测试的路径是"\\服务器\文件\日志"形式的UNC路径。我已经尝试了许多不同的解决方案,通过几个小时的在线搜索找到了这些解决方案,即使我正在测试我知道已经存在的服务器和文件夹,所有解决方案都返回 FALSE。

我正在使用PowerGUI编写脚本,我的系统正在使用PowerShell v5。到目前为止我尝试过:

  • Test-Path $path(其中$path已设置为 \\服务器)

  • Test-Path "filesystem::\Srv"

  • [System.IO.Directory]::Exists($path)

  • 我什至尝试[System.IO.Directory]::Exists('G:')使用所有 字母我已将网络服务器映射到以查看是否需要映射到驱动器以使其工作(全部返回 FALSE)

我在这里错过了什么?关于这个话题的任何想法将不胜感激,因为我已经磨练了一段时间,但没有取得任何进展。


编辑:对于以后可能偶然发现的任何人,请阅读评论,我发现这些评论非常有帮助。我的主要问题是我以管理员身份运行PowerShell,该管理员与我的普通用户帐户没有相同的权限。另请注意,Test-Path \server单独不起作用,还必须引用文件夹。

你已经有了正确的答案:

Test-Path $path

Test-Path \server.domain.tldShareName

如果Test-Path返回 false,我可以想到三件可能出错的事情:

  • 该共享在该服务器上不存在,或者至少具有您期望的名称
  • 您的用户无权读取该共享
  • 您正在指定服务器的短名称,并且需要 FQDN 来解析它。这在多域环境中很常见。

重新阅读您的问题后,看起来您可能正在运行Test-Path \server.您不能以这种方式检查服务器是否存在,您必须至少指定服务器和共享名称。如果您想知道服务器是否存在并且处于联机状态,请使用Test-Connection(假设您能够首先ping此服务器)。以下是使用Test-Connection的示例:

$serverName = 'server.domain.tld'
$sharePath = 'ShareName' # you can append more paths here
if( Test-Connection $serverName 2> $null ){
Test-Path "\${serverName}${sharePath}"
}

我曾经遇到过文件存在的问题,但测试路径返回 false。我将测试路径放在一个循环中,该循环最多检查 10 个 x,中间有一秒的暂停。脚本现在工作正常。如果在第一次尝试时找不到文件,则在第二次或第三次尝试时找不到文件。不知道为什么它在第一次尝试时返回 false。

最新更新