Невозможно добавить -persist в New-PSDrive - ошибка получения неправильного типа сетевого ресурса

Как следует из заголовка, если я попытаюсь добавить -persist в cmdlt, он вернет ошибку:

New-PSDrive : The network resource type is not correct At line:1 char:1 + New-PSDrive -Name P -Root <redacted> ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (P:PSDriveInfo) [New-PSDrive], Win32Exception + FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand

Для справки, это сеанс администратора в PowerShell, но я получаю точно такие же ответы, если делаю это в сеансе обычного пользователя:

PS> $PSVersionTable.psversion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      16299  666

С самого начала: я подтверждаю, что буква диска, которую я хочу использовать, доступна (в данном случае P)

PS> get-psdrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                  36.80         22.11 FileSystem    C:\                                               windows\system32
Cert                                   Certificate   \
D                                      FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE                  ...ntrol\NetworkProvider\Order
Variable                               Variable
WSMan                                  WSMan

затем я пытаюсь запустить: (я уже определил $locale как переменную, например, '\\foo\bar\').

New-PSDrive -PSProvider FileSystem -Name P -Root $locale -Scope global

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
P                                      FileSystem    \\foo\bar\

Счастливые дни. Это работает. Но, конечно, проводнику Windows это не видно, потому что это просто в этой сессии PS. Итак, я уничтожаю его (remove-psdrive P) и проверяю, что он исчез (get-psdrive), здесь не показан, а затем пытаюсь создать постоянную версию (та же команда, только с -persist):

PS> New-PSDrive -PSProvider FileSystem -Name P -Root $locale -Scope global -Persist
New-PSDrive : The network resource type is not correct
At line:1 char:1
+ New-PSDrive -PSProvider FileSystem -Name P -Root $locale -Scope globa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (P:PSDriveInfo) [New-PSDrive], Win32Exception
    + FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand

И это не удается. Для контекста, я делаю это, чтобы я мог использовать RoboCopy с помощью сценария с удаленными PSDrives (мы хотим использовать robocopy из-за его встроенной отчетности, управления атрибутами и возможности поддерживать файловую структуру в месте назначения, и мы хотим использовать PSDrives, чтобы мы могли указать учетные данные для целевых дисков).

У кого-нибудь есть идеи?

Редактировать: О боже... Я не могу в это поверить.... Но на случай, если кто-то еще найдет это, я оставлю это. Проблема была в конце \ на моем пути. Я удалил это, и это сохранилось просто отлично.


person RSchreib    schedule 12.11.2018    source источник


Ответы (1)


Обновление:

  • Эта проблема была исправлена ​​(по крайней мере) в PowerShell 7.0.5, однако она сохраняется в Windows PowerShell (v5.1) и вряд ли будет там исправлена.

  • связанная проблема, которая все еще существует в v7.1 (последняя стабильная версия на момент написания этой статьи), заключается в том, что использование -Persist также приводит к вводящим в заблуждение сообщениям об ошибках при истинных условиях ошибки: Спасибо, dgm.

    • If the target host happens to be unreachable / not to be supporting CIFS, you also get The network resource type is not correct error.
    • Если хост доступен, но целевой каталог не существует, вы получаете The specified network resource or device is no longer available.
    • Напротив, если вы не используете -Persist, сообщение об ошибке будет более разумным: The specified drive root "\\foo\bar" either does not exist, or it is not a folder. (хотя оно не указывает, какое из двух условий ошибки применяется).

[Только для Windows PowerShell и PowerShell Core 6.x] Как вы обнаружили:

Не указывайте корневые пути дисков с \ в конце, так как это приведет к сбою New-PSDrive с непонятным сообщением об ошибке New-PSDrive : The network resource type is not correct при использовании -Persist:

# Trailing '\': only OK *without* -Persist.
New-PSDrive -root \\foo\bar\ -name N  -PSProvider filesystem

# !! Breaks with -Persist:
New-PSDrive -root \\foo\bar\ -name N  -PSProvider filesystem

# No trailing '\': OK both with and without -Persist
New-PSDrive -root \\foo\bar -name N  -PSProvider filesystem

Я сообщил об этом неожиданном поведении на GitHub и исправление одобрено для PowerShell Core, хотя это неясно в какой будущей версии это будет доступно (написано для PowerShell Core 6.2.0-preview.1).

person mklement0    schedule 12.11.2018
comment
Спасибо, @dgm. Я сложил ваш комментарий в примечание вверху ответа. - person mklement0; 29.03.2021