windows@允许映射挂载http链接@挂载局域网http链接的webdav磁盘

资源管理器挂载网络驱动器👺

  • 对于共享文件夹(smb)协议(\\server\sharefolder)类型的连接可以直接挂载
  • 对于https安全连接也可以挂载
  • 但是对于http协议链接,新系统可能需要修改注册表,使得系统能够挂载http链接
  • 这里给出一个命令行版本,操作更简单

允许http链接映射为磁盘驱动器(命令行方式修改注册表)😊

  • 下面的操作将是的windows能够将http链接映射为驱动器

  • 首先,您需要使用管理员方式打开cmd或者powershell

  • 如果目标明确,执行以下命令行

    • reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v  BasicAuthLevel /t REG_DWORD /d 2 /f
      
      reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v  FileSizeLimitInBytes /t REG_DWORD /d 0xffffffff /f
      
      # Restart-Service WebClient #如果是powershell,可以restart-service 代替下面的2个语句
      net stop WebClient
      net start WebClient
      
      
      
      
  • 这里使用了/f参数强制修改,否则中途会让你确认,就是输入yes即可,如果那您不放心,可以去掉/f参数

演示(optional)

  • 可以先查询一下原来的值

    [BAT:78%][MEM:35.12% (11.13/31.70)GB][14:56:31]
    [~\Desktop]
    PS>reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v  BasicAuthlevel
    
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
        BasicAuthlevel    REG_DWORD    0x1
    

    也可以用powershell来查看,可以分别用gpgpv来查看,也可以用全称get-itempropertyget-itempropertyValue

    PS C:\Users\cxxu> Get-ItemPropertyValue -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters' -Name BasicAuthLevel
    2
    PS C:\Users\cxxu> (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters' -Name BasicAuthLevel).BasicAuthLevel
    2
    
  • 用管理员权限修改

    [BAT:78%][MEM:35.07% (11.12/31.70)GB][14:56:52]
    [~\Desktop]
    PS>reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v  BasicAuthLevel /t REG_DWORD /d 2
    Value BasicAuthLevel exists, overwrite(Yes/No)? yes
    The operation completed successfully.
    
    
可选更改:文件大小限制
  • reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v  FileSizeLimitInBytes /t REG_DWORD /d 0xffffffff
    
  • 实操

    #查询修改前的值
    [BAT:78%][MEM:35.89% (11.38/31.70)GB][15:01:25]
    [~\Desktop]
    PS>reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v  FileSizeLimitInBytes
    
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
        FileSizeLimitInBytes    REG_DWORD    0x2faf080
    
    [BAT:78%][MEM:35.80% (11.35/31.70)GB][15:02:32]
    [~\Desktop]
    PS>reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v  FileSizeLimitInBytes /t REG_DWORD /d 0xffffffff
    Value FileSizeLimitInBytes exists, overwrite(Yes/No)? yes
    The operation completed successfully.
    
刷新使配置生效
  • 可以通过重启计算机来刷新
  • 也可以通过以下重启服务的方式刷新
重启webclient服务
  • 我们用管理员权限打开powershell操作:

    • 可选:Get-Service webclient查看服务详情
    • 再用Restart-Service WebClient重启服务
    [BAT:78%][MEM:34.73% (11.01/31.70)GB][15:04:40]
    [~\Desktop]
    PS>Get-Service WebClient
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  WebClient          WebClient
    
    
    [BAT:78%][MEM:34.73% (11.01/31.70)GB][15:04:44]
    [~\Desktop]
    PS>Restart-Service WebClient
    

基本网络盘映射和挂载操作

执行映射

  • 关闭所有powershell(如果有的话),(离开管理员权限命令行窗口)打开另一个普通权限的命令行窗口),例如

  • 重新打开一个powershell进行驱动器映射(使用net use命令,详情另见它文)

    • powershell

      $DriveLetter='W'
      # $HostAddress='127.0.0.1'
      $HostAddress='192.168.1.178'#局域网内的另一个主机示例
      $Port=5244
      net use "$($DriveLetter):" "http://$($HostAddress):$($Port)/dav" /p:yes /savecred 
      
      
      
    • cmd

      @echo off
      set DriveLetter=W
      set HostAddress=127.0.0.1
      set Port=5244
      
      net use "%DriveLetter%:" "http://%HostAddress%:%Port%/dav" /p:yes /savecred
      

Note

  • 挂载完毕后检查是否挂载成功

  • 如果映射命令提示执行成功,但是资源管理器中却没有看到新的磁盘,需要打开新的普通权限的命令行窗口重新执行

    • net use #检查挂载情况(如果没有成功列出空列表,那么重新执行挂载命令)
      
      #再执行挂载之前,打开一个普通权限的命令行窗口(挂载不需要管理员权限,不需要时就尽量不要用管理员权限来执行命令,遵循权限最小原则可以减少将来访问文件权限时遇到不必要权限问题的麻烦
      
      PS C:\Users\cxxu> net use W: http://192.168.1.178:5244/dav /p:yes /savecred
      为“192.168.1.178”输入用户名: admin
      输入 192.168.1.178 的密码:(如果有密码,则输入密码,字符是透明的,不要输错)
      命令成功完成。
      
      #虽然命令行提示执行成功,但是需要手动检查实际上是否挂载,本例子中,如果成功,应该可以找到W:盘
      
      

      如果返回提示空的语句,参考下面

      #下面是检查列表为空的情况,这时候我们需要打开新的命令行窗口重新执行一遍上面的挂载命令
      PS C:\Users\cxxu> net use
      会记录新的网络连接。
      
      列表是空的。
      # 尝试重新挂载(可以再打开一个新的命令行窗口,挂载不需要管理员权限)
      PS C:\Users\cxxu> net use W: http://192.168.1.178:5244/dav /p:yes /savecred
      命令成功完成。
      
      PS C:\Users\cxxu> net use
      会记录新的网络连接。
      
      
      状态       本地        远程                      网络
      
      -------------------------------------------------------------------------------
                   W:        \\192.168.1.178@5244\dav  Web Client Network
      命令成功完成。
      
    • 如果还是不行,尝试重启系统后再查看是否能够映射(挂载)成功

  • 检查挂载:直接执行net use,可以看到挂载列表,如果非空,说明有网络磁盘挂载上了

powershell函数封装

  • 这里用到的函数Mount-NetDrive是对net use的封装

    • function Mount-NetDrive
      {
          <# 
          .SYNOPSIS
          挂载http链接形式的网络驱动器,通常用于局域网挂载
          这里是对net use 的一个封装,而Powershell 的New-PSDrive命令并不那么好用,链接识别有一定问题
          $HostAddress =$iqoo10pro
          .DESCRIPTION
          为了方便省事,这里记住密码,不用每次都输入密码
          net use W: "http://$HostAddress:5244/dav" /p:yes /savecred 
          目前已知New-PSDrive有挂载问题是,报错如下
          New-PSDrive: The specified drive root "\\192.168.1.178:5244\dav" either does not exist, or it is not a folder.
      
          .EXAMPLE
          PS☀️[BAT:74%][MEM:31.02% (9.84/31.71)GB][9:54:22]
          # [~\Desktop]
          PS> Mount-NetDrive -HostAddress 192.168.1.165 -DriveLetter M -Port 5244
          The command completed successfully.
      
          New connections will be remembered.
      
      
          Status       Local     Remote                    Network
      
          -------------------------------------------------------------------------------
                      M:        \\192.168.1.165@5244\dav  Web Client Network
          Unavailable  W:        http://localhost:5244/dav Web Client Network
          The command completed successfully.
          .EXAMPLE
          [BAT:78%][MEM:37.64% (11.93/31.70)GB][15:31:09]
          [~]
          PS>Mount-NetDrive -host $iqoo10pro -DriveLetter M -Port 5244
          
          The command completed successfully.
      
          .EXAMPLE
          如果重复执行同一个映射,并且第一次执行操作成功,那么第二次会提示失败(盘符被占用)
          [BAT:78%][MEM:37.46% (11.87/31.70)GB][15:31:32]
          [~]
          PS>Mount-NetDrive -host $iqoo10pro -DriveLetter M -Port 5244
          System error 85 has occurred.
      
          The local device name is already in use.
          #>
          param(
              # 手机端ip地址
              $HostAddress = 'localhost',
              $CompleteUri = '',
              $DriveLetter = 'M',
              $Port = '5244'
          )
          $uri = ($CompleteUri) ? $CompleteUri : "http://$($HostAddress):$($Port)/dav"
          
          net use "${DriveLetter}:" $uri /p:yes /savecred 
          
          #检查映射结果
          net use
      }
      

记住登录密码@自动映射选项

  • /savecred 保存登录凭证

  • /p:yes 永久记住

取消映射

  • 使用net use <DriverName:> /delete来取消映射

  • [BAT:78%][MEM:37.94% (12.03/31.70)GB][15:27:58]
    [M:\]
    PS>net use M: /delete
    There are open files and/or incomplete directory searches pending on the connection to M:.
    
    Is it OK to continue disconnecting and force them closed? (Y/N) [N]: Y
    M: was deleted successfully.
    
  • 封装成powershell函数

    function Remove-NetDrive
    {
        <#
        .SYNOPSIS
        This function removes a network drive mapping.
    
        .DESCRIPTION
        This function uses the `net use` command to remove a network drive mapping. The drive letter to be removed is specified as a parameter. If no drive letter is provided, the default is 'M'.
    
        .PARAMETER DriverLetter
        The drive letter of the network drive to be removed. Default is 'M'.
    
        .EXAMPLE
        Remove-NetDrive -DriverLetter 'Z'
    
        This command removes the network drive mapping associated with the drive letter 'Z'.
    
        .NOTES
        This function does not require administrative privileges to remove a network drive mapping.
        #>
        param (
            $DriverLetter = 'M'
        )
        net use "${DriverLetter}:" /delete
    }
    

取消记住密码(凭证管理)

  • 另见它文关于Credential Manager的使用
posted @ 2024-04-18 22:07  xuchaoxin1375  阅读(260)  评论(0)    收藏  举报  来源