You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows下如何自动挂载用户有权限访问的所有SMB共享?

Windows下如何自动挂载用户有权限访问的所有SMB共享?

我完全懂你的困扰——同一台Windows机器上多个用户共用系统账号,但每个人有自己独立的SMB凭证,想要登录后自动挂载自己有权限的所有Samba服务器共享,还不能给每个用户单独写脚本,之前在Ubuntu上搞定过,现在Windows上却卡壳了,net view没法带凭证,net use又得逐个指定共享和盘符,确实头疼。

其实你可以试试用PowerShell脚本实现这个需求,它比Batch更灵活,能搞定凭证验证、共享枚举和自动挂载的全流程,具体步骤和脚本如下:

核心思路

  1. 先让用户输入SMB服务器地址和个人凭证,通过连接服务器的IPC$共享完成身份验证(这个共享是系统默认的管道共享,专门用来做身份校验,不需要实际挂载);
  2. 验证通过后,枚举该用户有权限访问的所有非系统共享;
  3. 自动找到Windows上未使用的盘符,逐个挂载这些共享。

具体脚本

# 提示用户输入服务器地址、用户名和密码
$server = Read-Host "请输入SMB服务器地址(格式:\\服务器名或IP)"
$credential = Get-Credential -Message "请输入你的SMB账号凭证"

# 先连接IPC$共享完成身份验证
try {
    New-SmbMapping -LocalPath "" -RemotePath "$server\IPC$" -Credential $credential -Persistent $false
    Write-Host "身份验证成功,开始获取可用共享..."
} catch {
    Write-Error "身份验证失败:$_"
    exit 1
}

# 获取服务器上的所有磁盘共享,过滤掉系统默认共享(比如IPC$、ADMIN$)
$shares = Get-WmiObject -Class Win32_Share -ComputerName $server.Replace("\\", "") -Credential $credential | Where-Object {
    $_.Name -notmatch "^(IPC\$|ADMIN\$|C\$|D\$)$" -and $_.Type -eq 0  # Type=0代表磁盘共享
}

# 遍历共享列表,自动分配可用盘符挂载
foreach ($share in $shares) {
    $remotePath = "$server\$($share.Name)"
    # 找到第一个未被使用的盘符
    $driveLetter = Get-Volume | Where-Object { $_.DriveType -eq 'NoRootDirectory' } | Select-Object -First 1 -ExpandProperty DriveLetter
    
    if (-not $driveLetter) {
        Write-Warning "没有可用的盘符了,跳过共享 $($share.Name)"
        continue
    }

    # 挂载共享
    try {
        New-SmbMapping -LocalPath "$driveLetter:\" -RemotePath $remotePath -Credential $credential -Persistent $true
        Write-Host "成功挂载共享 $($share.Name) 到 $driveLetter:\"
    } catch {
        Write-Warning "挂载共享 $($share.Name) 失败:$_"
    }
}

# 清理临时的IPC$连接
Remove-SmbMapping -RemotePath "$server\IPC$" -Force

使用说明

  1. 把上面的代码保存成.ps1格式的文件(比如MountSMBShares.ps1);
  2. 右键选择“用PowerShell运行”,按照提示输入服务器地址和你的SMB账号密码即可;
  3. 如果想让脚本更方便使用,可以创建一个快捷方式,目标指向powershell.exe -ExecutionPolicy Bypass -File "你的脚本路径\MountSMBShares.ps1",这样双击就能运行。

一些注意事项

  • 如果你的Samba服务器是老版本,可能需要在Windows上启用SMB 1.0/CIFS客户端(不过更建议升级服务器支持SMB3,更安全);
  • 脚本里-Persistent $true表示挂载的共享会在重启后保留,如果是共用账号,你可以改成$false,避免其他用户登录时看到你的共享;
  • 不要把密码硬编码到脚本里,毕竟是共用账号,安全性优先,每次输入更稳妥。

至于你提到的Ubuntu上的情况,其实是因为Ubuntu的gvfs系统会自动枚举用户有权限的SMB共享,但Windows原生没有这个功能,所以需要靠脚本补全这个逻辑~

备注:内容来源于stack exchange,提问作者adrifromhh

火山引擎 最新活动