文章目录
  • windows系统下的简单共享文件方案👺
  • 就近共享
  • 设置共享文件夹(推荐)
  • 配置共享文件夹
  • 准备👺
  • 选择一个合适的目录创建共享文件夹
  • 创建共享文件夹
  • 使用命令行net share方式创建和管理
  • 三种共享文件夹的访问权限对比
  • 指定共享权限
  • 为不同用户分别指定权限
  • 访问控制权限查看
  • 使用powershell中的SmbShare模块命令
  • 使用shrpubw程序引导创建
  • 使用资源管理器图形界面创建和管理
  • 匿名访问问题@创建一个专门用来访问共享文件夹的凭证用户
  • 查看共享文件夹的网络路径👺
  • 使用powershell管理共享文件夹👺
  • 常用命令
  • 基础命令
  • 挂载类的命令
  • 创建共享文件夹
  • 参数解释
  • 修改共享文件夹
  • 删除共享文件夹
  • 查看现有共享文件夹(推荐方法)
  • 示例:完整的创建和配置共享文件夹过程
  • 访问共享文件夹👺
  • 资源管理器打开共享文件夹
  • 命令行打开共享文件夹
  • 共享文件夹相关操作
  • 查看所有已经共享的文件夹👺
  • 停止某个文件的共享
  • 共享文件夹的访问控制补充
  • 匿名访问问题😊
  • 强制启用匿名访问
  • 协议相关信息参考


windows系统下的简单共享文件方案👺

windows系统下局域网内传输文件的简单方法有2中,其中最简单的是NearBy Sharing(就近共享)

另一种是共享文件夹,更加通用和强大,支持老系统,和非windows系统访问资源

就近共享

支持单个和多个文件共享,配置最简单,但是要求传输文件的机器都是windows10以上的设备,而且不能直接共享文件夹目录,也没法直接点播和预览常见格式,比如视频和音乐等

  • 不过,有相关的android软件能够让android设备也支持就近共享
  • 注意手机端发送比较容易,但是接收需要获取蓝牙Mac地址,您需要先打开手机蓝牙开关(否则地址不可用),然后到系统设置里找到(状态信息里的蓝牙Mac地址);这个地址比较长,您可以截图,然后用ocr识别,或者支持屏幕提取文字的功能也可以直接提取
  • 填写后点击下一步即可

好处就是配置少,开个开关就行,成功率高,可以用wifi,也可以用蓝牙传输,不要求有路由器

 在 Windows 中与附近的设备共享内容 - Microsoft 支持

设置共享文件夹(推荐)
  • 官方文档,列举出了问题清单和相应的解决办法和步骤,已经给出了最佳实践,这里补充一些细节(整合其他设置方案)

配置共享文件夹

准备👺

为了更好的理解windows的共享文件夹及其相关功能,可以阅读一下准备工作,尽管这不是必须的

windows@文件高级共享设置@网络发现功能@从资源管理器网络中访问远程桌面

选择一个合适的目录创建共享文件夹

  • 为了避免共享文件夹创建完成后,其他用户无法访问(尽管登录成功,但内容是空的),建议把共享文件夹建立或选择在非用户目录下,例如,C:\share这类简短的目录;而C:\User\UserX\...这类目录(这个目录是用户Userx的家目录下的某个目录,不妨记为目录P)则容易与到权限问题,比如您创建了一个普通用smb分发给需要的设备访问共享文件夹P,可能会读取不到内容,除非您使用UserX的身份访问才可以读取目录P里的内容

创建共享文件夹

使用命令行net share方式创建和管理

 Net share | Microsoft Learn

建议在win10之前的系统中使用,虽然截至win11为止还通用,但这类方法不在被维护,新系统用powershell的方法

net share <ShareName>
net share <ShareName>=<drive>:<DirectoryPath> [/grant:<user>,{read | change |full}] [/users:<number> | /unlimited] [/remark:<text>] [/cache:{manual | documents | programs | BranchCache |none} ]
net share [/users:<number> | /unlimited] [/remark:<text>] [/cache:{manual | documents | programs | BranchCache |none} ]
net share {<ShareName> | <DeviceName> | <drive>:<DirectoryPath>} /delete
net share <ShareName> \\<ComputerName> /delete
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

示例:

  • 管理员身份打开一个命令行窗口
  • 假设我的机器上有一个目录C:\sharePlus,那么我执行以下语句net share DemoShareNew=C:\shareNew /remark:"demo share new"可以创建一个名为DemoShare的共享文件夹;
  • 注意到,我们可以不暴露被共享的文件夹的真实名字,而可以取一个便于共享的简单别名
PS> net share DemoShare=C:\sharePlus /remark:"demo share"
DemoShare was shared successfully.
  • 1.
  • 2.
  • 此时其他计算机可以访问Demoshare这个名字来访问该目录中的内容
  • 例如,创建共享文件夹的机器名为colorfulcxxu,并且启用了网络发现,在另一台也启用了网络发现的windows中执行start \\colorfulcxxu\demoshare,就可以访问共享文件夹demoshare
  • Note
  • 被共享的文件夹路径结尾不要有\,而且参数是/,否则会无法识别(解析错误)
  • 如果无法访问或读取内容,请检查并设置共享文件夹的权限控制,参考文档或者下节中的介绍
三种共享文件夹的访问权限对比

权限对比总结

  • read(读取):仅允许查看和读取文件,适用于需要只读访问权限的用户。
  • change(更改):允许创建、修改和删除文件和文件夹,但不能更改共享设置,适用于需要对文件进行操作但不需要更改权限的用户。
  • full(完全控制):允许所有操作,包括更改共享设置,适用于需要完全管理文件和文件夹的用户。

选择适当的权限级别取决于用户的需求和安全性要求。合理分配权限可以有效地保护文件安全,同时满足用户的使用需求。

指定共享权限

上述方法创建共享文件夹的方式十分简单,通常使用共享文件夹的主人(拥有者)身份访问不会遇到权限问题,但是必要时需要再设置访问控制权限,简单期间,可以设置为everyone 拥有访问权限

语法

用法说明

`/grant:,{read

change

PS☀️[BAT:70%][MEM:40.4% (12.81/31.71)GB][19:52:23]
#⚡️[cxxu@COLORFULCXXU][C:\]
PS> net share DemoShareFC=C:\share1 /remark:"share folder grant everyone" /grant:everyone,full
DemoShareFC was shared successfully.

PS> net share

Share name   Resource                        Remark

-------------------------------------------------------------------------------
IPC$                                         Remote IPC
DemoShare    C:\sharePlus                    demo share
DemoShareFC  C:\share1                       share folder grant everyone
share        C:\share                        ColorfulCxxuShare
Users        C:\Users
The command completed successfully.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
为不同用户分别指定权限

实操示例:为用户smb仅分配只读权限,为用户cxxu分配完全控制的权限

PS> net share DemoShareMultipleGrant=C:\share1 /grant:smb,read /grant:cxxu,full
DemoShareMultipleGrant was shared successfully.
  • 1.
  • 2.
访问控制权限查看

我们可以用Get-Acl来查看指定目录或文件的访问控制权限

PS> Get-Acl C:\sharePlus |fl

Path   : Microsoft.PowerShell.Core\FileSystem::C:\sharePlus
Owner  : COLORFULCXXU\cxxu
Group  : COLORFULCXXU\cxxu
Access : BUILTIN\Administrators Allow  FullControl
         NT AUTHORITY\SYSTEM Allow  FullControl
         BUILTIN\Users Allow  ReadAndExecute, Synchronize
         NT AUTHORITY\Authenticated Users Allow  Modify, Synchronize
         NT AUTHORITY\Authenticated Users Allow  -536805376
Audit  :
Sddl   : O:S-1-5-21-1150093504-2233723087-916622917-1001G:S-1-5-21-1150093504-2233723
         087-916622917-1001D:AI(A;OICIID;FA;;;BA)(A;OICIID;FA;;;SY)(A;OICIID;0x1200a9
         ;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

但是,这不等同于共享文件夹的访问控制权限

使用powershell中的SmbShare模块命令

 SmbShare Module | Microsoft Learn

这个模块中命令众多,适合于windows10以及之后的系统使用

后面单独开一节介绍常用的几个命令

使用shrpubw程序引导创建
  • 使用共享文件夹引导程序shrpubw.exe,这是一个windows系统自带的一个使用程序
  • 打开windows命令行,输入shrpubw.exe即可启动
  • shrpubw.exe 是一个在 Microsoft Windows 操作系统中用于帮助用户创建和配置共享文件夹的向导程序。这个可执行文件(.exe)是系统自带的一部分,由 Microsoft Corporation 开发,主要用于简化网络共享设置过程。
    当用户需要在网络上共享本地计算机上的某个文件夹,以便其他网络用户可以访问时,可以通过运行 shrpubw.exe 启动“创建共享文件夹向导”。该向导提供了图形化界面,引导用户完成以下步骤:
  1. 选择要共享的文件夹路径。
  2. 设置共享名,即网络上其他用户看到的共享资源的名称。
  3. 配置共享权限,包括哪些用户或组可以访问此共享,并确定他们的读写权限级别。
  • 该引导软件支持它会更改防火墙使得共享文件夹能够生效(通常不需要我们自己再去设置防火墙)
  • 总的来说这是个很方便的程序,但是注意,windows为了安全,匿名访问可能是不被允许的,如果需要匿名,可能要改注册表策略组等,我的建议是创建一个名为smb的用户专门用来访问共享文件夹就可以了(不需要登录该用户桌面),既安全又高效,如果要匿名的体验,可以把密码设置简单点即可
使用资源管理器图形界面创建和管理
  1. 设置防火墙(参考准备工作一节)
  2. 选择文件或文件夹进行共享
  • 打开资源管理器,右键进行共享设置
  • 可以指定对那些人共享(进入设置可以允许任何用户访问,但是不保证匿名访问可行,可能需要进一步设置)
  • 对于启用了SMB1功能的及其可能默认允许匿名访问
  • 包括选择哪些用户能够访问被共享的文件或目录
匿名访问问题@创建一个专门用来访问共享文件夹的凭证用户
  • 为了安全考虑,windows逐渐禁止匿名访问smb服务,对于较新的系统,即使在设置网络中允许免密访问共享文件夹(文件),但是仍然需要登录某个账户才可以访问(来宾(Guest)匿名不再能轻易访问共享文件夹)
  • 这里建议创建一个专门共享文件的账户,来供其他设备验证身份来访问本机的提供的共享文件价
  • 新建的用户可以是普通用户,我们甚至不需要登录这个用户,例如设置本地用户smb_share,密码随意,不介意安全性时尽可能简单,毕竟在可信的局域网内,默认是安全的,特别是真个局域网只有自己用,自己用来传输文件,我们甚至不需要创建这个新用户,直接用已有的账户登录就行
  • 创建新用户:命令行中或者win+r输入:lusrmgr.msc启动新用户创建面板

普通的通用界面创建新用户

设置共享文件夹时在选择授权用户时会提供创建新用户的入口

windows@局域网或蓝牙文件传输@共享文件夹@就近共享_命令行

windows@局域网或蓝牙文件传输@共享文件夹@就近共享_共享文件夹_02

步骤简单

设置步骤较多

  • 此外,也可以用命令行创建新用户,对于仅仅用于公开访问的凭证用途的用户,可以执行一下命令直接创建一个普通用户
net user smb 1 /add
  • 1.

该用户名为smb,密码为1

  • 删除:net user smb /delete,这会删除smb这个用户
  • 创建新用户的相关参考:
查看共享文件夹的网络路径👺

事实上您可以通过右键被共享的文件夹,查看其属性,其中的sharing部分给出了网络路径(NetWork Path)

其中\\后面跟的第一个字段(截止于\前)的是当前共享文件夹的主机名(但是需要您启用网络发现才可以直接使用此路径访问,否则需要用ip地址代替主机名)

windows@局域网或蓝牙文件传输@共享文件夹@就近共享_资源管理器_03

使用powershell管理共享文件夹👺

在PowerShell中,可以使用New-SmbShareSet-SmbShareRemove-SmbShare等命令来创建、修改和删除共享文件夹。这些命令提供了更强大的功能和灵活性来管理共享资源。

常用命令
基础命令
挂载类的命令
  • 同理有Get-SmbMapping,Remove-SmbMapping
  • 在powershell中挂载共享文件夹的地址为盘符,可以方便命令行访问共享文件夹中的内容而不需要打开资源管理器
  • 当然,您也可以选择使用合适的命令先挂载到资源管理器,然后任何命令行(比如net usenew-psdrive)就可以访问挂载后的盘符了
  • 如果需要挂载到资源管理器,那么可以考虑用New-PSdrive命令
  • 这里直接用被挂载的文件夹所在主机名,需要启用系统的网络发现功能才可以
PS C:\Users\cxxu\Desktop> New-PSDrive -Name "Z" -PSProvider "FileSystem" -Root "\\redmibookpc\share" -Persist

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Z                 114.17        361.79 FileSystem    \\redmibookpc\share

PS C:\Users\cxxu\Desktop>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

而直接用ip导致报错,将来可能会改进

PS C:\Users\cxxu\Desktop> New-PSDrive -Name "Q" -PSProvider "FileSystem" -Root "\\192.168.1.158\share"
New-PSDrive: The specified drive root "\\192.168.1.158\share" either does not exist, or it is not a folder.
  • 1.
  • 2.
创建共享文件夹

使用 New-SmbShare 命令可以创建新的共享文件夹。下面是创建共享文件夹的基本示例:

# 创建共享文件夹
New-SmbShare -Name "SharedFolder" -Path "C:\SharedFolder" -FullAccess "Everyone"
  • 1.
  • 2.
参数解释
  • -Name:指定共享的名称。
  • -Path:指定要共享的文件夹路径。
  • -FullAccess:指定具有完全访问权限的用户或组。

如果需要设置“读取”或“更改”权限,可以使用 -ReadAccess-ChangeAccess 参数,并且这三个参数可以同时出现

修改共享文件夹

使用 Set-SmbShare 命令可以修改现有的共享文件夹设置。例如,修改共享文件夹的权限:

# 修改共享文件夹的权限
Set-SmbShare -Name "SharedFolder" -ChangeAccess "Everyone"
  • 1.
  • 2.
删除共享文件夹

使用 Remove-SmbShare 命令可以删除共享文件夹:

# 删除共享文件夹
Remove-SmbShare -Name "SharedFolder" -Force
  • 1.
  • 2.
查看现有共享文件夹(推荐方法)

使用 Get-SmbShare 命令可以查看现有的共享文件夹:

# 查看所有共享文件夹
Get-SmbShare

# 查看特定共享文件夹
Get-SmbShare -Name "SharedFolder"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
PS> get-smbshare

Name                   ScopeName Path      Description
----                   --------- ----      -----------
DemoShareCC            *         C:\share1 share folder grant everyone
DemoShareFC            *         C:\share1 share folder grant everyone
DemoShareMultipleGrant *         C:\share1
DemoShareRC            *         C:\share1 share folder grant everyone
IPC$                   *                   Remote IPC
share                  *         C:\share  ColorfulCxxuShare
Users                  *         C:\Users

PS> get-smbshare -Name share

Name  ScopeName Path     Description
----  --------- ----     -----------
share *         C:\share ColorfulCxxuShare
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

通过上述命令,您可以在PowerShell中有效地管理共享文件夹,包括创建、修改和删除共享文件夹。合理设置权限和管理共享资源,可以提高网络资源的安全性和使用效率。

示例:完整的创建和配置共享文件夹过程

假设我们要创建一个名为 ReportsShare 的共享文件夹,路径为 D:\Documents\Reports,并赋予用户组 Everyone “读取”权限,下面是完整的过程:

# 创建共享文件夹并设置读取权限
New-SmbShare -Name "ReportsShare" -Path "D:\Documents\Reports" -ReadAccess "Everyone"

# 查看已创建的共享
Get-SmbShare -Name "ReportsShare"

# 修改权限为更改权限
Set-SmbShare -Name "ReportsShare" -ChangeAccess "Everyone"

# 最后删除共享文件夹
Remove-SmbShare -Name "ReportsShare" -Force
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

访问共享文件夹👺

资源管理器打开共享文件夹

本机外的其他windows用户访问smb服务器的方法

  • 对于windows系统,访问共享文件夹(smb服务器,不需要写协议名,直接用\\代替表示smb协议)
  • 可以按下win+r启动"运行"窗口(Run),输入\\ip\FolderName格式的链接回车运行

这里提一下UNC路径

 Windows 系统中的文件路径格式 | Microsoft Learn

例如,访问redmibookpcC:盘的UNC网络路径:\\redmibookpc\C$,这里用到网络发现功能,即便该C:没有被共享,但是如果有凭证就可以访问

命令行打开共享文件夹
  • 参考powershell中提供的方法
  • 或者挂载共享文件夹为盘符后,cmd也可以访问
  • 也可以直接运行
  • ls \\server\sharefolder(powershell)
  • 或者dir \\server\share(cmd)这类命令

共享文件夹相关操作

查看所有已经共享的文件夹👺
  • 有如下方式可以检查
  • 在资源管理器中的地址栏输入\\localhost
  • 或者命令行中输入start \\localhost
  • 也可以使用命令行查看(这种方法不再维护)
PS> net share

Share name   Resource                        Remark

-------------------------------------------------------------------------------
IPC$                                         Remote IPC
share        C:\share                        ColorfulCxxuShare
The command completed successfully.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
停止某个文件的共享
  • 方法0:使用命令行停止/移除共享文件
  • 可以使用net share来移除,命令行格式为:
  • NET SHARE sharename \\computername /DELETE 其中小写单词需要替换为具体的值
  • 检查文件夹共享情况
PS>  net share

Share name   Resource                        Remark

-------------------------------------------------------------------------------
IPC$                                         Remote IPC
DemoShare    C:\sharePlus                    demo share
DemoShareFC  C:\share1                       share folder grant everyone
share        C:\share                        ColorfulCxxuShare
Users        C:\Users
The command completed successfully.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

实际操作示例

PS☀️[BAT:70%][MEM:36.47% (11.56/31.71)GB][20:00:24]
#⚡️[cxxu@COLORFULCXXU][C:\]
PS> net share Demoshare \\colorfulcxxu /delete
Demoshare was deleted successfully.

#检查效果
PS> net share

Share name   Resource                        Remark

-------------------------------------------------------------------------------
IPC$                                         Remote IPC
DemoShareFC  C:\share1                       share folder grant everyone
share        C:\share                        ColorfulCxxuShare
Users        C:\Users
The command completed successfully.
#发现确实移除了DemoShare的共享
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 方法1:图形界面操作

windows@局域网或蓝牙文件传输@共享文件夹@就近共享_文件传输_04

右键目标文件夹,选择高级设置,将取消勾选分享次文件夹(share this folder);把保存修改即可

  • 方法2:从资源管理器中找到目标文件夹,右键更改访问权限,选择移除访问权限(remove access),但是不一定所有文件夹都能找到移除按钮

共享文件夹的访问控制补充

匿名访问问题😊

免登录访问共享文件夹问题

  • SMB1默认支持匿名访问,对于较新系统,需要到控制面板中启动相关windows功能
  • 仅当需要兼容老设备或者实在想要匿名登录时考虑这么做(todo)
  • 新系统配置匿名smb访问比较麻烦,我们可以建立一个简单的windows用户(账号密码很短)来逼近匿名访问的体验
  • 事实上,smb协议的客户端通常由保存链接记录的功能,只要设置一次,后续就不需要输入账号密码,如果是一个人或很少人用,就更不用纠结了,配置一次就不需要再输入账号密码了(顶多smb服务器ip发生变换,但如果真的需要改ip无论是否匿名访问都要改,并不会造成更多麻烦,而且提高了一定的安全性)
强制启用匿名访问
  • 以下设置可能是无效的
  • 修改策略组
  • 或命令行修改注册表
PS C:\Users\cxxu\Desktop> reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters /v "AllowInsecureGuestAuth" /d 1 /t REG_DWORD

The operation completed successfully.

PS C:\Users\cxxu\Desktop> reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters
    EnablePlainTextPassword    REG_DWORD    0x0
    EnableSecuritySignature    REG_DWORD    0x1
    RequireSecuritySignature    REG_DWORD    0x0
    ServiceDll    REG_EXPAND_SZ    %SystemRoot%\System32\wkssvc.dll
    ServiceDllUnloadOnStop    REG_DWORD    0x1
    AllowInsecureGuestAuth    REG_DWORD    0x1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 可以考虑启用smb v1,似乎可以匿名访问,但不建议使用,可以简单创建一个专门访问共享文件夹的简单用户即可
协议相关信息参考