任务计划程序运行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
相关产品推荐
相关产品推荐

