我正在使用 python 2.7.9(64 位)和 windows server 2012 R2
我正在尝试设置一个 Windows 计划任务,每天运行一个很长的 Python 脚本。我已设法通过从 powershell 脚本调用 Python 来让 Python 成功运行,但是当它尝试访问映射驱动器时出现问题。
我可以从命令行或交互式 powershell 访问驱动器,如果我直接调用 powershell 脚本,它就可以工作,但是当我运行计划任务时出现错误:
bsd_runner.py:<module>:[Errno 2] No such file or directory: u'S:\\pre/RefAttendanceReason.csv'
尽管该任务设置为以我的用户身份运行,但我认为计划任务可能没有映射驱动器,因此我研究了在 powershell 脚本中映射驱动器。我试过:
New-PSDrive –Name "S" –PSProvider FileSystem –Root "\\D-DWSQL01\Share\load" –Persist 2>&1 >> map_drive.log
我得到了以下结果:
New-PSDrive : The specified drive root "â€Root \\D-DWSQL01\Share\load
â€Persist" either does not exist, or it is not a folder.
At C:\Users\thomasa\Desktop\sandbox\BSD_ETL\run_bsd.ps1:8 char:5
+ New-PSDrive –Name "S" –PSProvider FileSystem –Root
"\\D-DWSQL01\Share\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
+ CategoryInfo : ReadError: (â€Name S â€PSProvider:PSDriveInfo) [
New-PSDrive], IOException
+ FullyQualifiedErrorId : DriveRootError,Microsoft.PowerShell.Commands.New
PSDriveCommand
如果我直接运行命令,该命令再次正常工作,但在运行计划任务时出现问题。
我检查了最高权限,并告诉任务确保它在运行之前可以访问网络,但无济于事。
我尝试取消驱动器映射并手动运行 powershell 脚本,但出现相同的错误,驱动器根目录不存在。但我自己映射了它,一切正常。
答案1
使用
net use S: \\D-DWSQL01\Share\load
显然允许计划任务正常查看驱动器。
答案2
在 PSdrive 连接之前添加一行:
pushd \\D-DWSQL01\Share\load
在通过 PSdrive 断开连接之前添加一行:
popd
如果您不需要映射特殊驱动器号,可以删除 PSdrive 命令。