真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PowerShell修復(fù)Robocopy的權(quán)限問題

最近豆子公司在轉(zhuǎn)移文件服務(wù)器,大概有80T的文件需要傳送到云端。豆子直接使用了robocopy進(jìn)行拷貝。因為歷史原因,有些文件夾的權(quán)限設(shè)置比較奇葩,導(dǎo)致豆子的賬戶也沒有權(quán)限去訪問,這樣的結(jié)果就是Robocopy里面可能會有幾十百甚至上千個文件夾因為權(quán)限問題而無法拷貝。

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都成都服務(wù)器租用小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站設(shè)計營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

robocopy 命令例子

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

那么如果解決這個問題呢?豆子的思路是獲取robocopy的日志文件,通過正則提取其中失敗的路徑,然后通過腳本重新奪取管理員權(quán)限,然后重新賦予NTFS的權(quán)限。

比如說,下面的robocopy 日志,報錯信息如下所示

  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腳本如下:

#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

\\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\

因為最近在復(fù)習(xí)Python,順手又用Python寫了一個同樣的功能,效果是一樣的

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()

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

然后接下來是重頭戲,如何重新奪取權(quán)限和賦值?

PowerShell自帶的Get-ACL和Set-ACL命令,以及DOS命令 takeown我都試過,老實說,不太好使,后來很幸運(yùn)地在網(wǎng)上發(fā)現(xiàn)了一個第三方的模塊 NTFSSecurity,里面的函數(shù)完全實現(xiàn)了我需要的功能。

下載地址:

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

下載之后,直接解壓到對應(yīng)的Powershell模塊路徑,然后重啟PowerShell ISE就可以自動加載了。

下面是后半截代碼,修改目標(biāo)目錄及其子目錄文件的所有者和訪問權(quán)限

$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' -Acce***ights FullControl
        get-item $i | Add-NTFSAccess -Account 'omnicom\sydney track all staff' -Acce***ights 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 $item | Add-NTFSAccess -account 'omnicom\group Australia it access' -Acce***ights FullControl
                get-item $item | Add-NTFSAccess -Account 'omnicom\sydney track all staff' -Acce***ights modify
            }
   }
}

最后的效果是

PowerShell 修復(fù) Robocopy的權(quán)限問題

這樣子,如果RoboCopy出了什么權(quán)限方面的問題,我通過這個腳本就可以很容易的解決了,一次不行,修復(fù)之后再跑一次Robocopy很快就可以把丟失的文件拷貝回來了~


當(dāng)前題目:PowerShell修復(fù)Robocopy的權(quán)限問題
文章鏈接:http://weahome.cn/article/gcjoei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部