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

时间:2019-05-23 16:04:22

标签: powershell

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

我遇到的问题是我无法验证文件夹是否存在,因为我测试的路径是形式为“ \\ server \ Files \ Log”的UNC路径。经过数小时的在线搜索,我尝试了许多不同的解决方案,即使我正在测试我知道已经存在的服务器和文件夹,所有解决方案都返回FALSE。

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

  • Test-Path $path(其中$path已设置为\\ server)

  • Test-Path "filesystem::\\Srv"

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

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

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


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

1 个答案:

答案 0 :(得分:1)

您已经有了正确的答案:

Test-Path $path

Test-Path \\server.domain.tld\ShareName

如果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}"
}