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

任务计划程序运行PowerShell脚本失败——New-SmbMapping报错求助

任务计划程序运行PowerShell脚本失败——New-SmbMapping报错求助

嗨,我之前也碰到过类似的任务计划和交互式会话差异导致的问题,咱们来好好捋一捋这个情况~

问题复盘

你提到9个站点的脚本之前运行正常,修改后手动执行没问题,但任务计划运行时New-SmbMapping抛出了这个错误:

Transcript started, output file is C:\temp\problem-script.txt
New-SmbMapping : The local device name has a remembered connection to another network resource.
At E:\FOLDER\FOLDER\PS_Script.ps1:5 char:1

  • New-SmbMapping -LocalPath 'P:' -RemotePath \123.123.123.123\SharedFile$ ...
  • CategoryInfo : NotSpecified: (MSFT_SmbMapping:ROOT/Microsoft/...MSFT_SmbMapping) [New-SmbMapping], C...

这个错误的核心原因是:任务计划的运行上下文和你手动登录的用户上下文完全独立。你手动运行时用的是当前登录用户的会话,而任务计划默认要么用系统账户,要么用指定的用户账户(非交互式会话),P:驱动器在这个陌生的上下文里可能残留了旧的映射记录,或者之前的映射没有被正确清理,导致新的映射请求冲突。

几个实用的解决方案

1. 先清理残留的驱动器映射(最直接的临时修复)

在执行New-SmbMapping之前,先强制清理P:驱动器的现有映射,不管它是否存在,避免冲突:

# 清理P:驱动器的残留映射,忽略错误(如果本来就没有映射的话)
Remove-SmbMapping -LocalPath 'P:' -Force -ErrorAction SilentlyContinue

# 再执行你的映射命令
New-SmbMapping -LocalPath 'P:' -RemotePath '\\123.123.123.123\SharedFile$' -Username 'xxxx' -Password 'xxxx'

2. 放弃固定驱动器号,直接用UNC路径访问(最推荐的长期方案)

其实完全没必要映射驱动器号,直接用共享的UNC路径操作文件就能避免所有驱动器号冲突的问题,而且更简洁:

# 直接用UNC路径定义源文件和目标路径
$sourceDb = '\\123.123.123.123\SharedFile$\your-access-db.accdb'
$targetDb = 'C:\local-backup-path\your-access-db-backup.accdb'

# 直接复制,这里可以用凭据参数(如果需要的话)
Copy-Item -Path $sourceDb -Destination $targetDb -Force

如果需要验证身份,建议把凭据存到Windows凭据管理器里,脚本里用Get-StoredCredential调用,避免明文写密码在脚本里(安全风险很高)。

3. 检查任务计划的配置细节

  • 确保任务计划使用的用户账户有访问目标共享的权限,并且勾选了「不管用户是否登录都要运行」(非交互式会话需要这个选项);
  • 不要随意勾选「使用最高权限运行」,除非真的需要——管理员上下文的网络映射和普通用户上下文是完全隔离的,容易引发这类冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 07:50:31