Проверка наличия UNC-пути / папки сервера - PullRequest
1 голос
/ 23 мая 2019

Я работаю над проектом, в котором используется сценарий PowerShell, который создает новый логин на удаленном SQL Server (SSMS), а затем проверяет, существует ли конкретная папка на сервере. Если папка еще не существует, сценарий создаст эту папку.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу проверить, существует ли папка, так как проверяемый мной путь - это UNC-путь в форме "\\ server \ Files \ Log". Я перепробовал много разных решений, которые нашел через пару часов поиска в сети, и все решения возвращают ЛОЖЬ, хотя я тестирую сервер и папку, которую, как я знаю, уже существует.

Я использую 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 само по себе не работает, на папку также должна быть ссылка.

1 Ответ

1 голос
/ 23 мая 2019

У вас уже есть правильный ответ:

Test-Path $path

или

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

Если Test-Path возвращает false, я могу подумать о трех вещах, которые могут быть неправильными:

  • Общий ресурс не существует на этом сервере или, по крайней мере, с тем именем, которое вы ожидаете
  • У вашего пользователя нет прав на чтение этой папки
  • Вы указываете короткое имя сервера, и вам необходимо полное доменное имя для его разрешения. Это распространено в многодоменных средах.

EDIT

Перечитав ваш вопрос, похоже, вы могли бы запустить 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}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...