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

Powershell 正在检查UNC路径/服务器文件夹是否存在,powershell,Powershell,我正在从事一个项目,该项目利用PowerShell脚本在远程SQL Server(SSMS)上创建新登录名,然后检查服务器上是否存在特定文件夹。如果文件夹不存在,脚本将创建该文件夹 我遇到的问题是,我无法验证文件夹是否存在,因为我正在测试的路径是格式为“\\server\Files\Log”的UNC路径。我已经尝试了许多不同的解决方案,通过几个小时的在线搜索,我发现所有的解决方案都返回FALSE,即使我正在测试一个我知道已经存在的服务器和文件夹 我正在使用PowerGUI编写脚本,我的系统正在使

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

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

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

  • 测试路径$Path
    (其中
    $Path
    已设置为\\server)

  • 测试路径“文件系统::\\Srv”

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

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

我错过了什么?任何关于这个话题的想法都将不胜感激,因为我已经在这个问题上苦思冥想了一段时间,没有取得任何进展



编辑:如果有人以后偶然发现这一点,请阅读评论,我发现这非常有帮助。我的主要问题是,我以管理员身份运行PowerShell,但其权限与我的普通用户帐户不同。另请注意,
测试路径\\server
单独不起作用,还必须引用文件夹。

您已经有了正确的答案:

测试路径$Path

测试路径\\server.domain.tld\ShareName

如果
testpath
返回false,我可以想到三件可能是错误的事情:

  • 该共享在该服务器上不存在,或者至少不存在您期望的名称
  • 您的用户没有读取该共享的权限
  • 您正在指定服务器的短名称,需要FQDN来解析它。这在多域环境中很常见
编辑 重新阅读您的问题后,您可能正在运行
测试路径\\server
。不能通过这种方式检查服务器是否存在,必须至少指定服务器和共享名。如果您想知道服务器是否存在并且处于联机状态,请使用
测试连接
(假设您首先能够
ping
此服务器)。下面是使用
测试连接的示例:

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

服务器是否确实有共享
\\server\Files
?如果没有,请尝试
Test Path'\\server\G$\Files\Log'
。我不确定为什么会出现此问题,我可以使用Test Path\\server\folder\file.txt,它返回true。当您使用我使用的格式时,会出现什么错误?注意:请确保包含文件的扩展名:)@AnsgarWiechers我将询问这里一些更有经验的开发人员,看看是否确实有一个没有人通知我的共享。谢谢您的回答。我认为这个问题与你的第二点有关。如果我只是单独使用powershell(而不是脚本编辑器),那么当我以管理员身份运行时会得到FALSE,而当我以正常方式运行powershell时会得到TRUE。我是新来的,同事们告诉我总是以管理员的身份运行PS,但这显然不是一件好事,尤其是在这种情况下。我将进一步探讨这一方面。这取决于您的环境,因为有非默认设置可以更改这一点,但通常只要您的外壳只是属于您的用户的提升外壳,您就应该仍然具有相同的网络权限。如果您以非您的用户的本地管理员身份运行Powershell,则您将没有所需的权限。此外,默认情况下,映射驱动器不会显示在提升的会话中,尽管您可以在运行时使用
New PSDrive
还原它们。最后一个提示是,如果您的环境不允许您将自己的shell提升为admin,但您必须以本地管理员的身份运行shell,查看使用
Get-Credential
cmdlet创建
PSCredential
。在这种情况下,只需使用您的普通用户名和密码创建一个
PSCredential
,它可以传递到大多数其他可能需要身份验证的cmdlet中,包括
Test Path
。我非常感谢您所做的评论,因为我希望这些评论对我自己和其他人将来可能有用。我也没有意识到您不能只使用
testpath\\server
,这可能也是一个问题。我很高兴你回答了这个非常初级的问题,因为我还没有找到任何文章充分讨论这些细节。谢谢