powershell 无法将“-persist”添加到New-PSDrive -获取错误“网络资源类型不正确”

vvppvyoh  于 2023-01-09  发布在  Shell
关注(0)|答案(2)|浏览(210)

如标题所示,如果我尝试将-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,以便能够为目标驱动器指定凭据)。
有人有什么想法吗?

    • 编辑:**哦,天哪......我简直不敢相信......但是为了防止其他人发现这个问题,我打算离开它。问题是路径中的尾随\。我删除了它,它仍然很好。
sqyvllje

sqyvllje1#

    • 更新**:
  • 此问题已修复(至少)PowerShell 7.0.5-但是,它在 * Windows PowerShell *(v5.1)中仍然存在,不太可能在那里得到修复。
  • 截至v7.1**(撰写本文时的最新稳定版本)仍然存在的一个***相关 * 问题是,使用-Persist也会在真正的错误条件下导致误导性的错误消息:Thanks,dgm
  • 如果目标 * 主机 * 碰巧无法访问/不支持CIFS,您也会收到The network resource type is not correct错误。
  • 如果主机可访问,但目标 * 目录 * 不存在,则会得到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失败,并在使用-Persist时显示模糊的错误消息New-PSDrive : The network resource type is not correct
# 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

我已经报告了这个意外的行为on GitHub,并且PowerShell * Core * 的修复已经亮起绿灯,尽管还不清楚它将在未来的哪个版本中可用(从PowerShell Core 6.2.0-preview.1开始编写)。

ni65a41a

ni65a41a2#

我正在尝试将WebDav文件夹连接为网络驱动器。如果没有参数-persist,它将正常工作。如果我添加"-persist",将出现错误"网络资源类型不正确"
工作:

$secpasswd2 = ConvertTo-SecureString "WebDAV" -AsPlainText -Force
$mycreds2 = New-Object System.Management.Automation.PSCredential ("www.dlp-test.com\WebDAV", $secpasswd2)
New-PSDrive -Name N -Root \\www.dlp-test.com@SSL\DavWWWRoot\webdav -PSProvider FileSystem -Credential $mycreds2

不起作用:

New-PSDrive -Name N -Root \\www.dlp-test.com@SSL\DavWWWRoot\webdav -PSProvider FileSystem -Credential $mycreds2 -Persist

我的PS版本:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1320

相关问题