لماذا لا يقوم DFSR بتكرار بعض الملفات وكيفية التعامل معها


كما يعلم الكثير من الأشخاص ، يمكنك تكوين استثناءات في شكل أقنعة ملفات في خصائص المجلدات المنسوخة نسخًا متماثلاً - ومن ثم لن تقوم الخدمة بإجراء نسخ متماثل للملفات التي تطابق الأقنعة المحددة. ولكن لا يعلم الجميع أن الملفات لها سمة "مؤقتة" ، وأن DFSR لا يعالج هذه الملفات حسب التصميم. وإذا لم يؤخذ ذلك في الاعتبار ، فقد يحدث أن تصبح محتويات مجلدات DFSR الخاصة بك غير متزامنة ، على الرغم من أن كل شيء سيكون نظيفًا وجميلًا في سجلات الخدمة ، وقد يحدث ذلك في أكثر اللحظات غير المناسبة. تم تحليل المشكلة نفسها وحلها على الإنترنت أكثر من مرة ، والغرض من هذه المقالة هو وضع اللمسات الأخيرة على الحل الذي تم إنشاؤه في وقت مبكر ، مضيفا المرونة والراحة لها. لمن هو ذات الصلة - أنا أسأل تحت القط.

تمت تغطية الموضوع على الإنترنت أكثر من مرة ، على سبيل المثال ، في المدونة الرسمية ، هنا وعلى Habré نفسها . لذلك ، لن أكرر نفسي ، لكنني سأذهب مباشرة إلى هذه النقطة. الحل الأصلي هو برنامج نصي PowerShell يعيد تعيين السمة "المؤقتة" لجميع الملفات في مجلد معين. أخذها كأساس ، كتبت نسختي الخاصة ، والتي تعثر على المجلدات المنسوخة نسخاً متماثلاً على الخادم الهدف وتعمل عبر كل منها ، وتعيد تعيين سمة المشكلة ، ثم ترسل تقريراً عن الملفات الموجودة إلى البريد الإلكتروني. إضافة دعم أيضًا للمسارات الطويلة (يتطلب الإصدار الخامس من PowerShell).

يحتاج البرنامج النصي إلى أدوات إدارة خدمة DFS للعمل (بشكل افتراضي ، يتم تثبيتها مع إضافة دور النسخ المتماثل DFS). إذا لم تكن متوفرة على الخادم الوجهة ، فقم بتشغيل الأمر cmdlet:

Install-WindowsFeature RSAT-DFS-Mgmt-Con 

وهنا النص نفسه:

TempAttrFixer.ps1
 Param( #   [parameter(Mandatory=$false)][String]$OutDir ) $SMTPServer = "mail.mydomain.com" $MailFrom = "sender@mydomain.com" $MailTo = "recipient@mydomain.com" Function ConvertTo-LiteralPath { #      LiteralPath Param( [parameter(Mandatory=$true)][String]$Path ) #    UNC If ($Path.Substring(0,2) -eq "\\") { Return ("\\?\UNC" + $Path.Remove(0,1)) } Else { Return "\\?\$Path" } } $StartTime = Get-Date $Error.Clear() If (!$OutDir) { $OutDir = (Get-WmiObject Win32_OperatingSystem).SystemDrive +"\TempAttrFixer_Report" } #   ,    $FoldersToScan = @(Get-DfsrMembership -ComputerName $env:COMPUTERNAME | Sort-Object GroupName, FolderName).ContentPath $LogFileName = "$env:COMPUTERNAME" + "_TempFiles_" + (Get-Date -Format "yyyy-MM-dd-HH-mm-ss") + ".csv" $LogFilePath = "$OutDir\$LogFileName" $Delimiter = "`t" $FilesCount = 0 If (!(Test-Path $OutDir -PathType Container)) { New-Item -ItemType Directory -Force -Path $OutDir | Out-Null } ForEach ($Folder in $FoldersToScan) { # PowerShell 5.1,      LireralPath Write-Output "Scanning `"$Folder`"..." Get-ChildItem -LiteralPath (ConvertTo-LiteralPath $Folder) -Recurse | ForEach-Object -Process { if (($_.Attributes -band 0x100) -eq 0x100) { $FilesCount += 1 $Entry = $_.FullName + $Delimiter + $_.GetAccessControl().Owner + "`r`n" $Entry $Entry | Out-File -FilePath $LogFilePath -Encoding unicode -Append -NoNewline $_.Attributes = ($_.Attributes -band 0xFEFF) } } } $FinishTime = Get-Date $TimeSpan = $FinishTime - $StartTime Write-Output ("Done, errors: " + $Error.Count) $Encoding = [System.Text.Encoding]::Unicode If ($FilesCount -gt 0) { $MessageBody = $null $Subject = "     " $MessageBody += " : $env:COMPUTERNAME`r`n" $MessageBody += "  : " + $TimeSpan.ToString() + "`r`n" $MessageBody += "   `"$LogFilePath`"`r`n" Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -Subject $Subject -Encoding $Encoding -To $MailTo -Body $MessageBody -Attachments $LogFilePath } Else { $MessageBody = $null $Subject = "      " $MessageBody += " : $env:COMPUTERNAME`r`n" $MessageBody += "  : " + $TimeSpan.ToString() + "`r`n" Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -Subject $Subject -Encoding $Encoding -To $MailTo -Body $MessageBody } #,  -    If ($Error.Count -gt 0) { $MessageBody = $null $Subject = "     " $MessageBody += " : $env:COMPUTERNAME`r`n" $MessageBody += " : $env:UserName`r`n" $MessageBody += " :`r`n" $MessageBody += $Error[0] Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -Subject $Subject -Encoding $Encoding -To $MailTo -Body $MessageBody } 


نقوم بتصحيح قيم المتغيرات المسؤولة عن تنبيهات البريد الإلكتروني ، وإضافة البرنامج النصي إلى المجدول:

 powershell.exe -NoLogo -ExecutionPolicy Bypass -NoProfile -File "<  >\TempAttrFixer.ps1" 

من الأسهل تشغيل المهمة من داخل SYSTEM ، ولكن إذا كان لديك مستوى متزايد من جنون العظمة وتمارس أسلوبًا جادًا في أمان المعلومات ، فيمكنك استخدام حساب منفصل ، مما يتيح له امتياز تسجيل الدخول كمهمة دفعية والحق في تعديل الملفات في مجلدات متكررة.

بدلاً من تقارير البريد الإلكتروني (أو بالإضافة إليها) ، يمكنك تكوين البرنامج النصي للتفاعل مع zabbix أو أي نظام مراقبة آخر. من المهم أيضًا أن نفهم أن الإجراء كثيف الاستخدام للموارد ، لذلك لا تقم بتشغيله كثيرًا. يستغرق الأمر حوالي ساعة لمعالجة 10 تيرابايت من البيانات ، ويتم تشغيل البرنامج النصي مرة واحدة يوميًا في الليل.

كنت أنا وزملائي مهتمين بمسألة مصدر الملفات ذات السمة المؤقتة. لذلك ، في كل تقرير ، بالإضافة إلى الاسم الكامل للملف ، يظهر مالك NTFS الخاص به. استنادًا إلى البيانات التي تم جمعها ، كان من الممكن معرفة أنه في موقفنا ، تمت إضافة السمة في بعض الأحيان إلى الملفات عند نسخ البيانات من الأقراص المحلية المعاد توجيهها عبر RDP (نحن نستخدم بنشاط تكنولوجيا سطح المكتب البعيد). لكن من الممكن أن تكون الملفات في البداية "معيبة". حتى الآن ، لم يكن من الممكن معرفة المزيد من التفاصيل.

سأكون ممتنا لو نجحت في دراسة استقصائية قصيرة وشاركت تجربتك في التعليقات.

Source: https://habr.com/ru/post/ar459020/


All Articles