PowerShell 修复 Robocopy的权限问题

简介:

最近豆子公司在转移文件服务器,大概有80T的文件需要传送到云端。豆子直接使用了robocopy进行拷贝。因为历史原因,有些文件夹的权限设置比较奇葩,导致豆子的账户也没有权限去访问,这样的结果就是Robocopy里面可能会有几十百甚至上千个文件夹因为权限问题而无法拷贝。


robocopy 命令例子

1
robocopy c:\ source   d:\destination  /E  /w :30  /r :3  /log +: "c:\temp\log.txt"  /xf  .*


那么如果解决这个问题呢?豆子的思路是获取robocopy的日志文件,通过正则提取其中失败的路径,然后通过脚本重新夺取管理员权限,然后重新赋予NTFS的权限。


比如说,下面的robocopy 日志,报错信息如下所示

1
2
3
4
5
6
7
   New Dir          0\\syd02\Track\.TemporaryItems\folders.1138144168\Cleanup At Startup\.BAH.FftCc\
2017 /11/12  08:58:18 ERROR 5 (0x00000005) Scanning Source Directory \\syd02\Track\.TemporaryItems\folders.1138144168\Cleanup At Startup\.BAH.FftCc\Altitude Business Card Visuals\
Access is denied.
Waiting 180 seconds... Retrying...
2017 /11/12  09:01:18 ERROR 5 (0x00000005) Scanning Source Directory \\syd02\Track\.TemporaryItems\folders.1138144168\Cleanup At Startup\.BAH.FftCc\Altitude Business Card Visuals\
Access is denied.
ERROR: RETRY LIMIT EXCEEDED.


提取路径的PowerShell脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#Read robocopy log files
$contents =gc C:\temp\tracktransfer.txt -raw
#Regular Expression Pattern
$patt = '(\\\\syd02.*\n)Access is denied'
$result =@()
#Distract the path of broken folders
$contents  select-string  -Pattern  $patt  -AllMatches | 
foreach  {
$result += $_ .matches.groups |  Where-Object  { $_ .name  -eq  1}| select -ExpandProperty value
}
 
#remove duplicated record and blank lines
$result  |sort  -Unique |  foreach  { $_ .trimend()} | where{ $_  -ne  ""} |  set-content  c:\temp\list.txt

生成的文本文件如下所示:


list.txt

1
2
3
4
5
6
7
8
9
\\syd02\Track\CLIENTS\WESTPAC\Westpac Cards\1_Acquisition\FY 17\Q1 Campaigns\WBCCAR7498 Q1.1 Campaign\PRODUCTION\
\\syd02\Track\.TemporaryItems\folders.1138144168\Cleanup At Startup\.BAH.FftCc\Altitude Business Card Visuals\
\\syd02\Track\CLIENTS\WESTPAC\Westpac Cards\1_Acquisition\FY 17\Q1 Campaigns\WBCCAR7487 Q1 OOH - Low Rate\CREATIVE\
\\syd02\Track\.TemporaryItems\folders.1138144168\Cleanup At Startup\.BAH.cj82c\Westpac Brand assets\
\\syd02\Track\CLIENTS\WESTPAC\Westpac Cards\2_Lifecycle\WBCCAR7602 Additional Cardholder\COPY\
\\syd02\Track\CLIENTS\WESTPAC\Westpac Cards\2_Lifecycle\WBCCAR7602 Additional Cardholder\PRODUCTION\
\\syd02\Track\CLIENTS\WESTPAC\Westpac CRM\Business\3. COMPLETE\2016\WBCCRM7595_Q4 SME Relationship email\CREATIVE\FINAL\Individual modules\Modules Half Width\
\\syd02\Track\CLIENTS\WESTPAC\Westpac Cards\1_Acquisition\FY 17\Q2 Campaigns\WBCCAR7516 Microsite Optimisation\FINANCE\
\\syd02\Track\CLIENTS\WESTPAC\Westpac Cards\1_Acquisition\FY 17\Q1 Campaigns\WBCCAR7487 Q1 OOH - Low Rate\FINANCE\


因为最近在复习Python,顺手又用Python写了一个同样的功能,效果是一样的

1
2
3
4
5
6
7
8
9
10
11
12
fp = open ( 'c:/temp/tracktransfer.txt' )
fp2 = open ( 'c:/temp/list.txt' , 'w' )
contents = fp.read()
pat = r '(\\\\syd02.*\n)Access is denied'
ret = re.findall(pat,contents)
ret = set (ret)
for  item  in  ret:
     print (item)
     fp2.write(item)
print ( "total number is %d" % len (ret))
fp.close()
fp2.close()


-----------------------


然后接下来是重头戏,如何重新夺取权限和赋值?

PowerShell自带的Get-ACL和Set-ACL命令,以及DOS命令 takeown我都试过,老实说,不太好使,后来很幸运地在网上发现了一个第三方的模块 NTFSSecurity,里面的函数完全实现了我需要的功能。

下载地址:

https://gallery.technet.microsoft.com/scriptcenter/1abd77a5-9c0b-4a2b-acef-90dbb2b84e85#content


下载之后,直接解压到对应的Powershell模块路径,然后重启PowerShell ISE就可以自动加载了。


下面是后半截代码,修改目标目录及其子目录文件的所有者和访问权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$a  Get-Content  "C:\temp\list.txt"
#For each folder and subfolders, setup the ownership and NTFS permissions
foreach  ( $i  in  $a )
{
     if ( test-path  $i )
   {
         write-host  Taking ownership of Directory  $i  -fore Green 
         get-item  $i  Set-NTFSOwner  -Account  'omnicom\group Australia it access'
         get-item  $i  add-ntfsaccess  -account  'omnicom\group Australia it access'  -AccessRights FullControl
         get-item  $i  Add-NTFSAccess  -Account  'omnicom\sydney track all staff'  -AccessRights modify
  
         $items  = @()
         $items  $null
         $path  $null
         #if need to setup all subfolders, we can use -recusrse in the following cmdlet.
         $items  get-childitem  $i  -force
         foreach ( $item  in  $items )
             {
                 $path  $item .FullName
                 Write-Host  ...Adding AdminGroup to  $path  -Fore Green
                 Get-Item  -force  $path  Set-NTFSOwner  -Account  'omnicom\group Australia it access'
                 get-item  $i  Add-NTFSAccess  -account  'omnicom\group Australia it access'  -AccessRights FullControl
                 get-item  $i  Add-NTFSAccess  -Account  'omnicom\sydney track all staff'  -AccessRights modify
             }
    }
}


最后的效果是


ddb721cc3f1e73e1789b1d7bd337bc88.png-wh_


这样子,如果RoboCopy出了什么权限方面的问题,我通过这个脚本就可以很容易的解决了,一次不行,修复之后再跑一次Robocopy很快就可以把丢失的文件拷贝回来了~






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1981373,如需转载请自行联系原作者

目录
相关文章
|
人工智能 机器人 Shell
【shell】shell字符串操作(声明、长度、拼接、切片、转换、替换等操作)
【shell】shell字符串操作(声明、长度、拼接、切片、转换、替换等操作)
|
负载均衡 5G
频谱利用 | 带你读《5G 空口设计与实践进阶 》之二十
NR 单载波最大支持 275 个 RB,即 3300 个子载波。这相应也约束了不同Numerology 下 NR 的最大工作带宽。NR 须通过合理设置保护带宽来降低误差矢量幅度、抑制相邻频道泄漏。
频谱利用 | 带你读《5G 空口设计与实践进阶 》之二十
|
缓存 NoSQL 数据库
高性能Web服务器架构设计
【8月更文第28天】在当今互联网时代,网站的响应速度直接影响用户体验和业务成功率。因此,构建一个高性能的Web服务器架构至关重要。本文将从硬件配置、软件架构以及网络设置三个方面探讨如何提高Web服务器的性能,并提供一些实际的代码示例。
722 0
|
监控 Apache 流计算
时间的守卫者:揭秘Flink中Watermark如何掌控数据流的时空秩序?
【8月更文挑战第26天】Apache Flink是一款功能强大的流处理框架,其Watermark机制为核心,确保了系统即使面对数据乱序或延迟也能准确处理时间相关的特性。Watermark作为一种特殊事件,标记了所有在此之前发生事件的最晚时间点,这对于时间窗口操作至关重要。
256 0
|
存储 前端开发 Java
基于springboot的助农管理系统的设计与实现
基于springboot的助农管理系统的设计与实现
|
存储 自然语言处理 机器人
ROS2教程06 ROS2行动
这篇文章是关于ROS2(Robot Operating System 2)行动(Action)通信机制的教程,包括行动的概念、特点、命令行工具的使用,以及如何编写行动的客户端和服务器代码,并介绍了如何测试行动通信。
571 4
ROS2教程06 ROS2行动
|
XML 开发框架 .NET
【已解决】请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记
【已解决】请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记
|
存储 自然语言处理 Go
|
弹性计算 数据可视化 应用服务中间件
2024年阿里云服务器2核2G配置有什么优惠?可选实例规格及优惠价格参考
阿里云服务器2核2G配置多少钱?可选实例规格有哪些?2024年的优惠价格是多少?根据阿里云2024年的收费标准及活动价格来看,2核2G配置轻量应用服务器的最优惠的价格是61元1年,云服务器2核2G配置的价格为99元1年。阿里云服务器2核2G配置可选的规格有4个,不同实例的价格有所不同,下面是2核2G配置可选实例规格详解及优惠价格表。
2024年阿里云服务器2核2G配置有什么优惠?可选实例规格及优惠价格参考
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的企业员工考勤管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的企业员工考勤管理系统附带文章源码部署视频讲解等
224 0

热门文章

最新文章