【问题标题】:Copy the files and folders recursively with the same permissions/previleges using Perl & ROBOCOPY使用 Perl 和 ROBOCOPY 以相同的权限/特权递归复制文件和文件夹
【发布时间】:2016-12-06 07:14:24
【问题描述】:

我正在尝试通过 ROBOCOPY 将文件和文件夹(包括子文件夹)复制到目标文件夹(从用户端获取)。但是,我无权在目标上创建文件夹。我有管理员用户名和密码。如何实现此代码以在此脚本或批处理文件中使用用户名/密码。 (不要考虑从用户那里得到的“项目”)

use strict;
use warnings;
use Cwd;

while(1)
{
    print "Enter the project \& Destination Folder: ";
    my $input_rec = <STDIN>;
    chomp($input_rec);
    if($input_rec=~m/(exit|q|x)/i) {  exit;  }
    elsif(!$input_rec && $input_rec eq '') { }
    elsif($input_rec!~m/(\s|\t)/s) { }
    else
    {
        my ($dept, $dest) = split /\s/, $input_rec;
        print "DEPT: $dept\t$dest\n";
        system("ROBOCOPY \\\\server1\\Robo\\Source\\ISBN \\\\server2\\Robo\\Source\\ISBN /MIR /SEC /SECFIX");
        exit;
    }
}

否则,我需要使用 perl 脚本将没有 ROBOCOPY 的文件和文件夹复制到目标文件夹,并使用用户无法访问的管理员凭据。

任务是,如果用户请求管理员创建具有权限/权限/结构的文件夹/子文件夹,就像它在源原始文件中一样,并且它应该由管理员创建以及用户端请求的目标。每次管理员都无法做到这一点,因此我们试图自动化这个过程。用户无法访问服务器复制文件夹。

如果有人建议如何解决这个问题,我们将不胜感激。

【问题讨论】:

  • 如您所见 here ,对于 ROBOCOPY 没有设置用户名和密码的选项,因此您需要在调用 ROBOCOPY 之前授予该访问权限。
  • @John Doe:您能否建议我们是否可以在没有 ROBOCOPY 的情况下使用 perl 脚本编写代码?
  • 看看这个link
  • @John Doe:没有权限进入目标路径来复制文件和文件夹。因此我需要在脚本中提供用户名/密码来处理。
  • 如示例here 中一样,您可能希望创建一个批处理来授予管理员权限,并且在该批处理中您可以调用您的 perl 脚本来完成您需要的工作

标签: perl batch-file robocopy


【解决方案1】:

你可以使用中间的东西。您可以在具有用户权限的窗口上创建计划任务。您应该创建为“一次性”任务。您可以根据需要启动任意多个。

Task view User

您可以使用此命令从您的 perl 脚本中调用。

SCHTASKS /RUN /TN "任务名称"

这是一个想法。我希望这会有所帮助。

【讨论】:

  • You can create a scheduled task on windows with the rights of the user. 这个我不太清楚,我们给用户管理员权限吗?这不是一项大任务,而且很乏味
  • 我的场景中的主要问题是“net use”命令它不活动并且不允许在服务器上,我们需要启动脚本来在服务器上执行操作。此外,“网络使用”使用起来也很冒险,因为您将密码写在纯文本文件上。计划任务的另一种方式是,您只需使用正确的权限激活您正在启动的任务的用户,并且更难知道使用的用户和密码。如果用户是管理员,您可以选择“以最高权限运行”,您可以以管理员身份或用户拥有的角色运行。
  • 我们正在创建 exe 及其窗口,因此我们遇到了上述问题?
  • 我不太明白。你最后的评论是什么意思?如何解决?制作exe文件是一个很好的步骤。 ;)
【解决方案2】:
my $source = "\\\\server1\\Robo\\Source\\ISBN";
print "DEPT: $dept\t$dest\n"; #$dest = "\\\\server2\\Robo\\Destination\\ISBN";
system("net use $source /user:.\\\\\administrator xxxx");
system("net use $dest /user:.\\\\administrator xxxx");
system("ROBOCOPY $source $dest /MIR /SEC /SECFIX");

以上行支持根据实际权限将文件和文件夹复制到目的地。希望这是美好的一天!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2018-11-12
    • 1970-01-01
    • 2015-07-08
    • 2011-06-13
    • 2012-01-06
    • 2011-04-19
    相关资源
    最近更新 更多