You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非域环境下如何实现NAS可访问共享文件夹的自动映射?

实现自动映射NAS所有可访问共享文件夹的PowerShell脚本

完整脚本

# 提示用户输入NAS信息与凭据
$nasName = Read-Host "请输入NAS的名称或IP地址"
$nasUsername = Read-Host "请输入NAS的用户名"
$nasPassword = Read-Host "请输入NAS的密码" -AsSecureString

# 将凭据转换为明文(仅用于cmdkey存储,执行后自动清理)
$plainPassword = [System.Net.NetworkCredential]::new("", $nasPassword).Password

# 存储NAS凭据到Windows凭据管理器
cmdkey /add:$nasName /user:$nasUsername /pass:$plainPassword
# 清理明文密码变量
Remove-Variable plainPassword

# 枚举NAS上的所有共享文件夹
$shares = Get-WmiObject -Class Win32_Share -ComputerName $nasName -ErrorAction SilentlyContinue | Where-Object {
    # 过滤系统默认共享(如ADMIN$、C$等)和非文件系统共享
    $_.Name -notmatch '^\$' -and $_.Type -eq 0
}

# 定义可用盘符范围(从Z往前找未被占用的)
$availableDrives = @()
for ($char = [char]'Z'; $char -ge [char]'D'; $char--) {
    $driveLetter = [string]$char
    if (-not (Get-PSDrive -Name $driveLetter -ErrorAction SilentlyContinue)) {
        $availableDrives += $driveLetter
    }
}

# 逐一映射可访问的共享
if ($shares) {
    Write-Host "开始映射共享文件夹..."
    $driveIndex = 0
    foreach ($share in $shares) {
        if ($driveIndex -ge $availableDrives.Count) {
            Write-Warning "可用盘符不足,跳过共享: $($share.Name)"
            continue
        }
        $driveLetter = $availableDrives[$driveIndex]
        $sharePath = "\\$nasName\$($share.Name)"
        
        # 尝试访问共享,验证权限
        try {
            $null = Get-ChildItem -Path $sharePath -ErrorAction Stop
            New-PSDrive -Name $driveLetter -Root $sharePath -Persist -PSProvider FileSystem -ErrorAction Stop
            Write-Host "成功映射: $sharePath -> $driveLetter:"
            $driveIndex++
        }
        catch {
            Write-Warning "无权限访问或映射失败: $sharePath"
        }
    }
}
else {
    Write-Warning "未找到NAS上的可用共享文件夹,或无法连接到NAS"
}

脚本说明

  • 凭据处理:通过Read-Host获取用户输入,密码以安全字符串形式存储,仅临时转为明文用于凭据管理器存储,之后立即清理,降低泄露风险
  • 共享枚举:用Get-WmiObject枚举NAS共享,过滤掉系统隐藏共享和非文件系统类共享
  • 盘符分配:从Z到D反向查找未被占用的盘符,避免占用系统默认盘符(如C:)
  • 权限验证:映射前先尝试访问共享,确保当前用户有权限,避免无效映射操作
  • 持久化映射:使用-Persist参数,保证重启后映射关系依然有效

注意事项

  • 运行脚本需要管理员权限,否则New-PSDrive的-Persist参数可能无法生效
  • 确保客户端能正常访问NAS的SMB端口(默认445)
  • 若NAS使用非默认SMB协议版本,可在脚本开头添加Set-SmbClientConfiguration -RequireSecuritySignature $false(根据实际情况调整)

内容的提问来源于stack exchange,提问作者ProprietaryCloudGaming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:37:47