我们有一组文件需要 ColdFusion 复制到网络共享。但是,我们无法更改运行 ColdFusion 服务的用户,这意味着 ColdFusion 没有足够的权限访问任何网络共享。我们确实有可以访问的用户名和密码,但我们不能在该帐户下运行整个 ColdFusion 服务。
有什么方法可以在 ColdFusion 中执行这些文件复制操作吗?可能在新用户下生成 cfthread,访问底层 java,或使用其他第三方组件?我们的后备方案是创建一个批处理文件并从将本地目录中的所有文件复制到网络共享的 Windows 任务计划程序运行它,但这是一个次优的解决方案,因为它需要在 CF 代码库之外进行设置和维护。
请您参考如下方法:
一个选项是我过去使用过的。但是,它需要访问 cfexecute 标记。如果您有权运行该标记(某些托管服务提供商不允许),那么您可以执行如下操作。
通过 Window 的共享映射网络驱动器(注意任何输出都被写入 netMessage 变量):
这是您指定远程用户名和密码的地方
<cfexecute name="C:\WINDOWS\system32\net.exe"
arguments="use \\#remoteServerName#\#remoteShareName#\ #remoteAccountPassword# /user:#remoteServerName#\#remoteAccountUsername#"
variable="netMessage"
timeout="30">
</cfexecute>
通过您刚刚创建的映射驱动器将文件复制到网络驱动器(请注意,任何输出都将写入 robocopyMessage 变量):
我正在使用 robocopy在这里并建议您查看它而不是仅仅复制
<cfexecute name="C:\WINDOWS\system32\robocopy.exe"
arguments="#localDirectory# \\#remoteServerName#\#remoteShareName#\ #robocopyArguments#"
variable="robocopyMessage"
timeout="300">
</cfexecute>
现在通过断开映射的网络驱动器进行清理(注意任何输出都被写入 netMessage 变量):
<cfexecute name="C:\WINDOWS\system32\net.exe"
arguments="use \\#remoteServerName#\#remoteShareName#\ /d"
variable="netMessage"
timeout="30">
</cfexecute>
如果您愿意,您也可以将此代码放在 cfthread 标记中。


