【问题标题】:Can ColdFusion access a network drive while running under local system account?ColdFusion 可以在本地系统帐户下运行时访问网络驱动器吗?
【发布时间】:2015-03-20 02:21:49
【问题描述】:

我们有一组文件需要 ColdFusion 复制到网络共享。但是,我们无法更改运行 ColdFusion 服务的用户,这意味着 ColdFusion 没有足够的权限来访问任何网络共享。我们确实有可以让我们访问的用户名和密码,但我们不能让整个 ColdFusion 服务在该帐户下运行。

有没有办法在 ColdFusion 中进行这些文件复制操作?可能是在新用户下生成 cfthread、访问底层 java 或使用其他第三方组件?我们的回退是创建一个批处理文件并从 Windows 任务计划程序运行它,该任务计划程序将本地目录中的所有文件复制到网络共享,但这是一个次优的解决方案,因为它需要在 CF 代码库之外进行设置和维护。

【问题讨论】:

  • 生成另一个线程无济于事,因为它由同一个 CF 实例运行。这会有点开销……但是您可以运行第二个正确的 CF 实例,并且它运行的唯一代码是主 CF 实例的文件系统访问代理?

标签: coldfusion


【解决方案1】:

一个选项是我过去使用过的。但是,它需要访问cfexecute 标签。如果您有权运行该标签(某些托管服务提供商不允许),那么您可以执行以下操作。

通过 Window 的共享映射网络驱动器(请注意,所有输出都被写入 netMessage 变量):
您可以在此处指定远程用户名和密码 p>

<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 标记中。

【讨论】:

  • 这是一个创造性的解决方案米格尔;谢谢!不幸的是,虽然我没有收到任何错误消息,但它不起作用。我无法安装任何其他软件,所以我正在尝试使用 xcopy。关于如何解决问题所在的任何建议?所有变量都是空字符串。
  • 仅供参考,但 robocopy 也随 Windows 一起提供。无需安装新软件。请记住在调试时转储那些消息变量。它们将包含显示到“控制台”的任何消息。
  • 我要做的是执行我在该服务器的命令窗口中手动显示的步骤。然后您将看到任何消息等。一旦您完成了这些步骤,您只需将该信息转移到我上面的示例中。这种方式往往更容易调试。
  • 我终于收到了对服务器的终端访问权限并追查到了问题所在。我在 net use 和 robocopy 命令的目录名称末尾添加了一个反斜杠,这导致了错误。更正语法后,一切都开始工作了。再次感谢您对 Miguel 的所有帮助;当这种需求突然出现时(似乎每年或每两年),这是一个很好的技巧。
  • 很高兴它对你有用! Robocopy 有很多选择。您应该检查它们(如果您还没有)。以前困扰我的一件事是错误重试的次数。默认情况下,重试次数为 1,000,000(是的 100 万)。没有造成任何伤害,但它导致cfexecute 标签在很长一段时间后超时。从那以后,我总是将重试次数定义为运行时更易于管理的值。
猜你喜欢
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2011-04-05
  • 2019-01-27
  • 2010-09-19
  • 2016-04-22
  • 1970-01-01
相关资源
最近更新 更多