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

PowerShell映射网络驱动器重启后消失,如何实现持久化?

网络驱动器持久化映射解决方案(带加密凭据)

问题背景

需要实现自动化映射网络驱动器,使用加密存储的凭据(操作人员不可见),但当前脚本映射的驱动器重启后会消失。现有脚本通过New-PSDrive -Persist映射,添加-Scope Global无效;尝试cmdkey时,加密密码无法直接传递,明文密码虽能持久化但违反安全策略。

可行解决方案

方案1:修复cmdkey的加密密码传递问题

核心思路:将加密的SecureString临时转换为明文(仅在内存中操作,不会写入磁盘),存入Windows凭据管理器,再通过net use /persistent:yes实现持久化映射。

修改后的脚本如下:

Net use * /delete /yes

$username = "domain\username"
$pwdFile = "$env:USERPROFILE\Desktop\xxx_mapping\fs_pwd.txt"
$keyFile = "$env:USERPROFILE\Desktop\xxx_mapping\AES.key"
$key = Get-Content $keyFile
$password = Get-Content $pwdFile | ConvertTo-SecureString -Key $key
$fs_path = "\\pathTo\Share"
$driveLetter = "P"
# 从共享路径提取服务器名称
$serverName = ($fs_path -split '\\')[2]

# 临时将SecureString转换为明文(仅内存操作,执行后立即清空)
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$plainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)

# 将凭据存入Windows凭据管理器
cmdkey /add:$serverName /user:$username /pass:$plainPassword
# 映射驱动器并开启持久化
net use "$driveLetter:" $fs_path /persistent:yes

# 原有文件操作逻辑不变
$filePath = "C:\Windows\someFile"
$fileContent = Get-Content -Path $filePath
foreach ($line in $fileContent) {
    if ($line -match "Path of the Remote Work Directory=(.*)") {
        $remoteWorkDirectory = $matches[1].Trim()
        $computerName = $env:COMPUTERNAME
        $outputString = "$remoteWorkDirectory-$computerName"
        Add-Content -Path "$driveLetter:\evidenceFile.txt" -Value $outputString
    }
}

Remove-Item -Path "$env:USERPROFILE\Desktop\xxx_mapping" -Recurse

关键说明

  • 明文密码仅在内存中短暂存在,转换后立即通过ZeroFreeBSTR清空内存,不会留下磁盘痕迹,符合安全要求。
  • /persistent:yes会将映射配置写入注册表HKCU\Network\$driveLetter,重启后Windows会自动使用凭据管理器中的存储凭据重连驱动器。

方案2:创建用户登录触发的任务计划

若无法使用cmdkey,可通过任务计划在用户每次登录时自动执行映射脚本,间接实现持久化:

  • 将脚本移至安全目录(如C:\Program Files\CustomScripts\),并调整密钥、密码文件的存储路径(避免存桌面被删除)。
  • 打开「任务计划程序」,创建新任务:
    • 触发器:选择「用户登录时」。
    • 操作:启动程序,程序/脚本填powershell.exe,添加参数:-ExecutionPolicy Bypass -File "C:\Program Files\CustomScripts\你的脚本名.ps1"。
    • 设置:勾选「不管用户是否登录都要运行」「使用最高权限运行」,隐藏窗口执行。

原脚本问题原因

New-PSDrive -Persist仅在当前会话有效(或写入注册表),但不会自动将PSCredential中的加密凭据存入Windows凭据管理器。重启后系统无可用凭据重连,导致驱动器消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:45:41