我正在开发一个项目,该项目利用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
无效,还必须引用一个文件夹。
答案 0 :(得分:1)
您已经有了正确的答案:
Test-Path $path
或
Test-Path \\server.domain.tld\ShareName
如果Test-Path
返回false,我可以想到三件事可能是错误的:
重新阅读您的问题后,看来您可能正在运行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}"
}