নির্দিষ্ট ড্রাইভে (ডি:, ই:, ...) ভলিউম শ্যাডো কপি সক্ষম এবং কীভাবে পাওয়ারশেল ব্যবহার করে শিডিয়ুল সেট আপ করবেন?
আমি কীভাবে শুরু করব তার কিছু ইঙ্গিত দরকার।
নির্দিষ্ট ড্রাইভে (ডি:, ই:, ...) ভলিউম শ্যাডো কপি সক্ষম এবং কীভাবে পাওয়ারশেল ব্যবহার করে শিডিয়ুল সেট আপ করবেন?
আমি কীভাবে শুরু করব তার কিছু ইঙ্গিত দরকার।
উত্তর:
মাইক্রোসফ্ট নিবন্ধে যেমন ব্যাখ্যা করা হয়েছে আপনি ডাব্লুএমআই অবজেক্ট ব্যবহার করে নির্দিষ্ট ড্রাইভে শ্যাডো অনুলিপি তৈরি করতে পারেন ।
নির্দিষ্ট ড্রাইভে ভলিউম শেডো অনুলিপি সক্ষম করুন (ডি:, ই:, ...) দুটি জিনিস
এটি কাজ করতে আমার কিছুটা সময় লেগেছে (এটি ব্যর্থ হওয়ার কারণ হিসাবে সাধারণ ত্রুটিটি খুঁজে পাওয়ার পরে) এবং ফাংশনটি অসম্পূর্ণ। আমি এটি একটি দূরবর্তী কম্পিউটারে সক্ষম করার ক্ষমতা যুক্ত করতে চাই, যা সম্ভবত একবারে চালানো কোনও টাস্কের মাধ্যমে সম্পন্ন করতে হবে। যদি কেউ এটিকে সংশোধন করে এবং এটি যোগ করে, আমাকে জানান!
function Enable-ShadowCopies {
param(
[String]$ComputerName = $Env:ComputerName,
[Parameter(Mandatory=$true)]
[String]$Drive
)
$volumeWMI = Get-WmiObject -ComputerName $ComputerName -Class Win32_Volume -Filter "DriveLetter = '$Drive'";
$volumeID = ($volumeWMI.DeviceID.SubString(10)).SubString(0,($volumeWMI.DeviceID.SubString(10)).Length-1);
$scheduler = New-Object -ComObject Schedule.Service
$scheduler.Connect($ComputerName)
$tskDef = $scheduler.NewTask(0);
$tskRegInfo = $tskDef.RegistrationInfo;
$tskSettings = $tskDef.Settings;
$tskTriggers = $tskDef.Triggers;
$tskActions = $tskDef.Actions;
$tskPrincipals = $tskDef.Principal;
# Registration Info
$tskRegInfo.Author = "PowerShell Script";
# Settings
$tskSettings.DisallowStartIfOnBatteries = $false;
$tskSettings.StopIfGoingOnBatteries = $false
$tskSettings.AllowHardTerminate = $false;
$tskSettings.IdleSettings.IdleDuration = "PT600S";
$tskSettings.IdleSettings.WaitTimeout = "PT3600S";
$tskSettings.IdleSettings.StopOnIdleEnd = $false;
$tskSettings.IdleSettings.RestartOnIdle = $false;
$tskSettings.Enabled = $true;
$tskSettings.Hidden = $false;
$tskSettings.RunOnlyIfIdle = $false;
$tskSettings.WakeToRun = $false;
$tskSettings.ExecutionTimeLimit = "PT259200S";
$tskSettings.Priority = "5";
$tskSettings.StartWhenAvailable = $false;
$tskSettings.RunOnlyIfNetworkAvailable = $false;
# Triggers
$tskTrigger1 = $tskTriggers.Create(3);
$tskTrigger2 = $tskTriggers.Create(3);
## Trigger 1
$tskTrigger1.Id = "Trigger1"
$tskTrigger1.StartBoundary = (Get-Date -format "yyyy-MM-dd")+"T07:00:00";
$tskTrigger1.DaysOfWeek = 0x3E; # Monday - Friday - http://msdn.microsoft.com/en-us/library/windows/desktop/aa384024(v=vs.85).aspx
$tskTrigger1.Enabled = $true;
## Trigger 2
$tskTrigger2.Id = "Trigger2";
$tskTrigger2.StartBoundary = (Get-Date -format "yyyy-MM-dd")+"T12:00:00";
$tskTrigger2.DaysOfWeek = 0x3E; # Monday - Friday - http://msdn.microsoft.com/en-us/library/windows/desktop/aa384024(v=vs.85).aspx
$tskTrigger2.Enabled = $true;
# Principals (RunAs User)
$tskPrincipals.Id = "Author";
$tskPrincipals.UserID = "SYSTEM";
$tskPrincipals.RunLevel = 1;
# Actions
$tskActions.Context = "Author"
$tskAction1 = $tskActions.Create(0);
# Action 1
$tskAction1.Path = "C:\Windows\system32\vssadmin.exe";
$tskAction1.Arguments = "Create Shadow /AutoRetry=15 /For="+$volumeWMI.DeviceID;
$tskAction1.WorkingDirectory = "%systemroot%\system32";
# Configure VSS, Add scheduled task
vssadmin Add ShadowStorage /For=$Drive /On=$Drive /MaxSize=10%;
$tskFolder = $scheduler.GetFolder("\")
$tskFolder.RegisterTaskDefinition("ShadowCopyVolume$volumeID", $tskDef, 6, "SYSTEM", $null,5);
}
যদিও এটি কাজ করে এবং আপনি জিইআইআইয়ের মাধ্যমে এটি করার পরে যা ঘটে তা অনুকরণ করে, এটি এখনও সেই ড্রাইভের জন্য অক্ষম হিসাবে দেখায়। আপনি যদি এটি সক্ষম করেন তবে কিছুই পরিবর্তন হয় না! (LOL) আমি অনুমান করছি যে এখানে এমন কিছু আছে যা রেজিস্ট্রিতেও সংশোধন করা দরকার।
$diskname = "C:\"
$VolumeWmi = gwmi Win32_Volume -Namespace root/cimv2 | ?{ $_.Name -eq $diskname }
$DeviceID = $VolumeWmi.DeviceID.ToUpper().Replace("\\?\VOLUME", "").Replace("\","")
$TaskName = "ShadowCopyVolume" + $DeviceID
$TaskFor = "\\?\Volume" + $DeviceID + "\"
$Task = "C:\Windows\system32\vssadmin.exe"
$Argument = "Create Shadow /AutoRetry=15 /For=$TaskFor"
$WorkingDir = "%systemroot%\system32"
$ScheduledAction = New-ScheduledTaskAction –Execute $Task -WorkingDirectory $WorkingDir -Argument $Argument
$ScheduledTrigger = @()
$ScheduledTrigger += New-ScheduledTaskTrigger -Daily -At 10:00
$ScheduledTrigger += New-ScheduledTaskTrigger -Daily -At 15:00
$ScheduledSettings = New-ScheduledTaskSettingsSet -Compatibility V1 -DontStopOnIdleEnd -ExecutionTimeLimit (New-TimeSpan -Days 3) -Priority 5
$ScheduledTask = New-ScheduledTask -Action $ScheduledAction -Trigger $ScheduledTrigger -Settings $ScheduledSettings
Register-ScheduledTask $TaskName -InputObject $ScheduledTask -User "NT AUTHORITY\SYSTEM"
এটির সাথে গোটা বিশৃঙ্খলা সৃষ্টি করার পরে, এটি কিছুটা আলাদাভাবে কাজ করতে পেল (এটি জিওআইয়ের মাধ্যমে সঠিকভাবে প্রদর্শিত হবে বলেও মনে হচ্ছে)।
কিছুটা সাহায্যের জন্য এই পৃষ্ঠায় সরিয়ে আউট: https ://social.technet.mic Microsoft.com/forums/windowsserver/en-US/fb69840d-5f52-4711-8168-2faa23088233/shadow-copy-schedule-per-script
স্কটাস্কগুলি ব্যবহার করার নেতিবাচক দিক (যা সেই পৃষ্ঠাটি ব্যবহার করে) হ'ল আমি যতদূর দেখতে পাচ্ছি আপনার একাধিক ট্রিগার থাকতে পারে না।
আমি যেভাবে সমস্যার সমাধান করেছি (এক্সএমএল ওয়ার্কিং / ওয়ার্কিংয়ের একটি বিন্দু ব্যবহৃত হয়েছে) এর কারণে, আমি পুরোপুরি নিশ্চিত নই যে আমি যে পতাকাগুলি ব্যবহার করি সেগুলি সর্বোত্তম।
সরল অর্থ হ'ল বিদ্যুৎ 2 তে সামঞ্জস্যপূর্ণ ইউআই-তে প্রদর্শিত স্কচটাকগুলি ব্যবহার করা a একটি স্ট্যান্ডার্ড বিল্ডের জন্য নকশাকৃত, উপযুক্ত ভলিউমটি সন্ধান করার জন্য $ টাস্করুন তৈরি করার সময় $ ভলিউমিনফো [x] দিয়ে বাজানো দরকার।
$volumeinfo = GWMI -namespace root\cimv2 -class win32_volume
$volumeid = $volumeinfo[1].deviceid
$taskname = "ShadowCopyVolume" + $volumeid.replace("\","").replace("?Volume","")
$taskrun = "C:\Windows\system32\vssadmin.exe Create Shadow /AutoRetry=15 /For=$volumeid"
schtasks /create /RU SYSTEM /SC DAILY /ST 07:00 /RI 60 /DU 12:00 /K /V1 /TN $TaskName /TR "$taskrun "
নিম্নলিখিত যুক্তি যথাযথভাবে কনফিগার করতে পারেন:
দ্রষ্টব্য: / টিআর স্যুইচ শেষে স্থানটি প্রয়োজনীয় করে, যদি এটি না থাকে তবে এটি চূড়ান্ত ব্যাকস্ল্যাশকে একটি ডাবল উদ্ধৃতি দ্বারা প্রতিস্থাপন করে যার ফলে ভিএসএস ইউআই কাজটি স্বীকৃতি দেয় না recognize
এটি আমি পাওয়ারশেলের ব্যবহার করি । এটি আমার সাইটের লিঙ্ক, তবে এটি এখানে আটকানো থেকে অনেক বেশি ভাল দেখাচ্ছে।
#Enable Volume Shadow copy
clear
$Continue = Read-Host "Enable Volume Shadowcopy (Y/N)?"
while("Y","N" -notcontains $Continue) {
$Continue = Read-Host "Enable Volume Shadowcopy (Y/N)?"
}
if ($Continue -eq "Y") {
#Enable Shadows
vssadmin add shadowstorage /for=C: /on=C: /maxsize=8128MB
vssadmin add shadowstorage /for=D: /on=D: /maxsize=8128MB
#Create Shadows
vssadmin create shadow /for=C:
vssadmin create shadow /for=D:
#Set Shadow Copy Scheduled Task for C: AM
$Action=new-scheduledtaskaction -execute "c:\windows\system32\vssadmin.exe" -Argument "create shadow /for=C:"
$Trigger=new-scheduledtasktrigger -daily -at 6:00AM
Register-ScheduledTask -TaskName ShadowCopyC_AM -Trigger $Trigger -Action $Action -Description "ShadowCopyC_AM"
#Set Shadow Copy Scheduled Task for C: PM
$Action=new-scheduledtaskaction -execute "c:\windows\system32\vssadmin.exe" -Argument "create shadow /for=C:"
$Trigger=new-scheduledtasktrigger -daily -at 6:00PM
Register-ScheduledTask -TaskName ShadowCopyC_PM -Trigger $Trigger -Action $Action -Description "ShadowCopyC_PM"
#Set Shadow Copy Scheduled Task for D: AM
$Action=new-scheduledtaskaction -execute "c:\windows\system32\vssadmin.exe" -Argument "create shadow /for=D:"
$Trigger=new-scheduledtasktrigger -daily -at 7:00AM
Register-ScheduledTask -TaskName ShadowCopyD_AM -Trigger $Trigger -Action $Action -Description "ShadowCopyD_AM"
#Set Shadow Copy Scheduled Task for D: PM
$Action=new-scheduledtaskaction -execute "c:\windows\system32\vssadmin.exe" -Argument "create shadow /for=D:"
$Trigger=new-scheduledtasktrigger -daily -at 7:00PM
Register-ScheduledTask -TaskName ShadowCopyD_PM -Trigger $Trigger -Action $Action -Description "ShadowCopyD_PM"
}
ছায়া অনুলিপি আসলে vssadmin.exe কল করে এমন কার্য তৈরি করে সক্ষম হয়।
পাওয়ারশেল .০ এর সেমিডলেট রয়েছে যা আপনাকে কার্য তৈরি করতে সক্ষম করে, তবে এগুলি নির্ভর করে উইন্ডোজ 8 / উইন্ডোজ সার্ভার ২০১২ অবধি কার্যকর করা হয়নি এমন সিস্কলগুলির উপর।
register-scheduledTask
new-scheduledtaskaction
new-scheduledtasktrigger
উইন্ডোজের পূর্ববর্তী সংস্করণগুলিতে, আপনি schtasks.exe ব্যবহারের মধ্যে সীমাবদ্ধ থাকবেন।
তবে - এবং এটি যেখানে এই উত্তরটি অন্যদের থেকে পৃথক হয় - এই উপায়ে একটি ছায়া অনুলিপি তৈরি করা জিনিস করা সঠিক উপায় নয় কারণ আপনার যে কোনও পরিবর্তন GUI এ প্রদর্শিত হবে না। এই হিসাবে, কোনও অযৌক্তিক ব্যবহারকারী অজানা থাকতে পারে যে শ্যাডো অনুলিপি সক্ষম করা হয়েছে, যার ফলে তারা এটির দ্বিতীয় উদাহরণটি সক্ষম করে বা চুপচাপ আপনার কার্যটি ওভাররাইট করে (যদি আপনি উইন্ডোজ এর নামকরণ কনভেনশনগুলি অনুসরণ করেন (ভলিউমশাদোকপি $ UID জিআইডি}))।
আপনার যা করা দরকার তা হ'ল জিইউআইয়ের মাধ্যমে একটি তৈরি করুন (উইন্ডোজের নতুন সংস্করণ হিসাবে উইন্ডোজের নতুন সংস্করণগুলি আরও বেশি সামঞ্জস্যপূর্ণ টাস্কএক্সএমএল ১.১ এর পরিবর্তে ডিফল্টরূপে টাস্কএমএসএমএল ১.২ ব্যবহার করে), এক্সটিএমএল হিসাবে স্ক্যাসটাস্কের মাধ্যমে এক্সপোর্ট করুন, প্রোগ্রামটি সেই এক্সএমএল সম্পাদনা করুন , সেই এক্সএমএলটিকে ইউটিএফ 16 হিসাবে সংরক্ষণ করুন এবং এটি আমদানি করুন। ধন্যবাদ, একবার আপনি শুরুতে জিইউআই পেরিয়ে গেলে, কমান্ডলাইনে এটি করা যেতে পারে।
আমি কোড পোস্ট করতে চাই, তবে আমি যা লিখেছি তা মালিকানাধীন, এবং আমার নিয়োগকর্তার কাছ থেকে আমার অনুমতি নেই। আমি আশা করি যে এক্সএমএল টিপটি খুব কমপক্ষে আপনাকে অগণিত ঘন্টা বাঁচাবে। আমি কেবলমাত্র দুর্দান্ত সাফল্যের জন্য কয়েকশো পরিচালিত সার্ভারগুলিতে এক্সএমএল সমাধানটি মোতায়েন করেছি।
সকলকে ধন্যবাদ, এটি এই থ্রেডে অবদান রাখছিল। এটি সহায়ক ছিল এবং আমাকে অনেক কাজ বাঁচিয়েছিল। নিম্নলিখিত পাওয়ারশেল স্ক্রিপ্টটি উইন্ডোজ সার্ভার ২০০৮ আর 2 এ পরীক্ষা করা হয়েছিল।
নিম্নলিখিত উদাহরণটি মোঃ-ফিররের মধ্যে প্রতি 2 ঘন্টা স্ন্যাপশট তৈরি করে 08 থেকে: 00h-18: 00 এ ভলিউম সি তে:
আপনি যদি শিডিউলটি পরিবর্তন করতে চান তবে কেবল ইনলাইন এক্সএমএল-ডেটা সম্পাদনা বা প্রতিস্থাপন করুন।
মনোযোগ: কোনও ওয়ারেন্টি নেই কোনও দায়বদ্ধতা নেই। উত্পাদন পরিবেশে ব্যবহারের আগে দয়া করে নিজের ল্যাবটিতে পরীক্ষা করুন।
# German Keyboard-Layout for Console Output. Can be skipped in english enviroments
#chcp 1252 >$null 2>&1
function ConfigureVolumeShadowCopies([string] $diskname, $vssMaxSizeInPercent) {
$xmlDocument = [xml] "<?xml version='1.0' encoding='UTF-16'?>
<Task version='1.1' xmlns='http://schemas.microsoft.com/windows/2004/02/mit/task'>
<RegistrationInfo>
<Author>Administrator</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2018-01-01T08:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByWeek>
<DaysOfWeek>
<Monday />
<Tuesday />
<Wednesday />
<Thursday />
<Friday />
</DaysOfWeek>
<WeeksInterval>1</WeeksInterval>
</ScheduleByWeek>
</CalendarTrigger>
<CalendarTrigger>
<StartBoundary>2018-01-01T10:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByWeek>
<DaysOfWeek>
<Monday />
<Tuesday />
<Wednesday />
<Thursday />
<Friday />
</DaysOfWeek>
<WeeksInterval>1</WeeksInterval>
</ScheduleByWeek>
</CalendarTrigger>
<CalendarTrigger>
<StartBoundary>2018-01-01T12:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByWeek>
<DaysOfWeek>
<Monday />
<Tuesday />
<Wednesday />
<Thursday />
<Friday />
</DaysOfWeek>
<WeeksInterval>1</WeeksInterval>
</ScheduleByWeek>
</CalendarTrigger>
<CalendarTrigger>
<StartBoundary>2018-01-01T14:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByWeek>
<DaysOfWeek>
<Monday />
<Tuesday />
<Wednesday />
<Thursday />
<Friday />
</DaysOfWeek>
<WeeksInterval>1</WeeksInterval>
</ScheduleByWeek>
</CalendarTrigger>
<CalendarTrigger>
<StartBoundary>2018-01-01T16:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByWeek>
<DaysOfWeek>
<Monday />
<Tuesday />
<Wednesday />
<Thursday />
<Friday />
</DaysOfWeek>
<WeeksInterval>1</WeeksInterval>
</ScheduleByWeek>
</CalendarTrigger>
<CalendarTrigger>
<StartBoundary>2018-01-01T18:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByWeek>
<DaysOfWeek>
<Monday />
<Tuesday />
<Wednesday />
<Thursday />
<Friday />
</DaysOfWeek>
<WeeksInterval>1</WeeksInterval>
</ScheduleByWeek>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id='Author'>
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<IdleSettings>
<Duration>PT600S</Duration>
<WaitTimeout>PT3600S</WaitTimeout>
<StopOnIdleEnd>false</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT259200S</ExecutionTimeLimit>
<Priority>5</Priority>
</Settings>
<Actions Context='Author'>
<Exec>
<Command>C:\Windows\system32\vssadmin.exe</Command>
<Arguments>Create Shadow /AutoRetry=15 /For=\\?\Volume{REPLACEME}\</Arguments>
<WorkingDirectory>%systemroot%\system32</WorkingDirectory>
</Exec>
</Actions>
</Task>"
# Query Volume GUID of the given Volume
$VolumeWmi = gwmi Win32_Volume -Namespace root/cimv2 | ?{ $_.Name -eq ($diskname +"\") }
# Build Variables
$DeviceID = $VolumeWmi.DeviceID.ToUpper().Replace("\\?\VOLUME", "").Replace("\","")
$TaskName = "ShadowCopyVolume" + $DeviceID
$TaskFor = "\\?\Volume" + $DeviceID + "\"
# Replace Volume GUID in XML-Data
$xmlDocument.Task.Actions.Exec.Arguments = "Create Shadow /AutoRetry=15 /For=$TaskFor"
# Write temporary XML-File for Import of scheduled Task with schtask
$xmlDocumentFileName = $PSScriptRoot + "\" + $TaskName + ".xml"
$xmlDocument.Save($xmlDocumentFileName)
# Try to Delete existing Task for VSS
try {
schtasks /delete /TN $Taskname /f
}
catch {
#If Task can not be found: do nothing
}
# Create Scheduled Task
schtasks /Create /XML $xmlDocumentFileName /TN $TaskName
# Create (First) Snapshot
vssadmin Create Shadow /For=$diskname /AutoRetry=15
# Define Max Size of VSS Shadow Storage
vssadmin resize shadowstorage /For=$diskname /On=$diskname /MaxSize=$vssMaxSizeInPercent
# Delete temporary XML Document
Remove-Item $xmlDocumentFileName -Force
}
# Start Configuration - for Example on Volume C: with 10% MaxSize
ConfigureVolumeShadowCopies "C:" "10%"
নিম্নলিখিত কোডটি দিয়ে আমার যা প্রয়োজন ঠিক তা পেয়েছি, আমার প্রয়োজনটি ছিল ভিএসএস কনফিগার করা তবে এটি জিইআইতে দৃশ্যমান হওয়াও দরকার। জিইউআইতে এটি দৃশ্যমান করার মূল অংশটি হ'ল ব্যবহারকারী 261949 দ্বারা নির্দেশিত হিসাবে নির্ধারিত টাস্ক নামটিতে ভলিউম আইডি যুক্ত করা (এটি কিছুটা আশ্চর্যজনক, সত্যই আমি একটি রেজিস্ট্রি কীটি সন্ধান করছিলাম তবে আমি একেবারে কিছুই খুঁজে পাইনি ..)। আমি নীচের কোডটি দিয়ে শেষ করেছি যা আমার প্রয়োজন অনুসারে:
#Enable Volume Shadow copy
#Enable Shadows
vssadmin add shadowstorage /for=C: /on=C: /maxsize=8128MB
#Create Shadows
vssadmin create shadow /for=C:
#create scheduled tasks
$diskname = "C:\"
$VolumeWmi = gwmi Win32_Volume -Namespace root/cimv2 | ?{ $_.Name -eq $diskname }
$DeviceID = $VolumeWmi.DeviceID.ToUpper().Replace("\\?\VOLUME", "").Replace("\","")
$TaskName = "ShadowCopyVolume" + $DeviceID
$TaskFor = "\\?\Volume" + $DeviceID + "\"
$Task = "C:\Windows\system32\vssadmin.exe"
$Argument = "Create Shadow /AutoRetry=15 /For=$TaskFor"
$WorkingDir = "%systemroot%\system32"
$ScheduledAction = New-ScheduledTaskAction -Execute $Task -WorkingDirectory
$WorkingDir -Argument $Argument
$ScheduledTrigger = @()
$ScheduledTrigger += New-ScheduledTaskTrigger -Daily -At 07:00
$ScheduledTrigger += New-ScheduledTaskTrigger -Daily -At 12:00
$ScheduledSettings = New-ScheduledTaskSettingsSet -Compatibility V1 -DontStopOnIdleEnd -ExecutionTimeLimit (New-TimeSpan -Days 3) -Priority 5
$ScheduledTask = New-ScheduledTask -Action $ScheduledAction -Trigger
$ScheduledTrigger -Settings $ScheduledSettings
Register-ScheduledTask $TaskName -InputObject $ScheduledTask -User 'NT AUTHORITY\SYSTEM'
আপনার দরকারী তথ্য জন্য সকল ধন্যবাদ!