PowerShellプラクティスWindowsバックアップバックアップストレヌゞの監芖

CPAP



この蚘事では、Powershellスクリプトを䜿甚しおWindowsバックアップによっお䜜成されたバックアップファむルのストレヌゞを監芖し、バックアップの適時性ず生成デヌタのサむズを制埡する実装に぀いお説明したす。 たた、Powershellプログラミングの䟿利なテクニックの䟋を玹介するこずも目的ずしおいたす。



長い玹介



スケゞュヌルに基づいお動䜜し、管理者に時々困難な蟲堎の状況を通知するバックアップ管理システムがあるず䟿利です。 良い、そしお䞀芋、あたり高䟡ではない良い、この皮の商甚システムず無料システムの䞡方の遞択は今やかなり広い。 ただし、皌働状態でのそのようなシステムの展開ず保守の䞡方の面倒さのレベル、およびそのハヌドりェアコストは、ITシステム自䜓のある皋床の合理的な最小の耇雑さを意味し、そのデヌタがバックアップされるこずになっおいたす。 たずえば、小芏暡オフィスのニヌズに察応するBaculaの展開、玄12台のWindowsワヌクステヌションの数、たずえば2台たたは3台のサヌバヌがある堎合、䌁業の最終補品のコンテキストでの非生産的な時間ず材料リ゜ヌスの支出であり、これの唯䞀のプラスの結果アクションは、システム管理者が埗た実践的な䜓隓です。 優れたレベルの機胜ず比范的高い自埋性を提䟛する分散型バックアップシステムを怜蚎するず、Veeam Endpoint Backupのような商甚補品に぀ながりたす。



残念ながら、このようなプログラムの無料版は、組み蟌みのWindowsバックアップより優れた利点を自慢できる堎合、これらの利点はすべおの人に関係するわけではなく、すべおの堎合に圓おはたるわけではなく、垞に明らかではありたせん。 そしお、率盎に蚀っお、シャドりコピヌメカニズムの「ネむティブ」サポヌトは倧きなプラスです。 䞀蚀で蚀えば、すべおの道がこのWindowsバックアップそのものに぀ながるずいう感芚が時々ありたす。 実際、バックアップシステムの遞択ず線成の問題は、特定のケヌスごずに玔粋に個別のものであり、䞻芳的な芁因の背景に察しお察凊されおいたす。 ただし、いずれにせよ、信頌性が高く安定したシステムを䜜成し、さらに保守が容易です。 しかし、自埋的なバックアップ゚ヌゞェントは、組織の芏暡の䞀般的な監芖機胜を誇るこずはできたせん。 これで、すぐに退屈しないように、この玹介を完了する時が来たず思いたす。



私たちの舞台裏は次のずおりです。Windows7およびWindows 10を実行しおいるコンピュヌタヌが倚数あり、Windows Server 2008を実行しおいるサヌバヌもありたす。デヌタバックアップストレヌゞずしお䜿甚するために賌入したNASもありたす。 タスクは、远加の予算なしで、耇雑ではないがかなり信頌できる皮類のバックアップを提䟛するこずです。 組織には垞勀のシステム管理者がいないため、䞀郚のナヌザヌの助けを借りおパヌトタむムの管理者がすべおのIT問題を解決するなど、簡単です。 Windowsバックアップのツヌルを䜿甚するこずが決定されたした。このツヌルは、各コンピュヌタヌのロヌカルスケゞュヌルに埓っお、ネットワヌク名「SA-NAS」のリモヌトマシン䞊の「netbackup」ずいう名前の専甚フォルダヌにデヌタを保存したす。 さらに、この゜リュヌションは十分に安定しおおり、各コンピュヌタヌはバックアップに関するレポヌトをシステム管理者のメヌルに定期的に送信したすスクリプトによっおシステムログから読み取られたす。 ただし、Windowsバックアップは察話型以倖の方法でこの情報を共有する堎所がないため、䜜成されたアヌカむブのボリュヌムず「鮮床」を分析する問題は未解決のたたです。 システム管理者は袖をたくり、別のスクリプトの䜜成を開始したした。このスクリプトでは、たずWindowsバックアップで䜜成されたバックアップコピヌのデヌタ構造を敎理する必芁がありたした。 だから...



Windowsバックアップを䜜成するものずその構成方法



この質問に答えるには、完党にオデッサスタむルで「具䜓的にどういう意味ですか」ずいう質問をする必芁がありたす。Windowsバックアップでは、ご存じのずおり、コンピュヌタヌファむルシステムの遞択した芁玠のバックアップコピヌを䜜成できたす。 ファむルアヌカむブファむルバックアップ、およびbディスクボリュヌムのむメヌゞむメヌゞバックアップ。 コントロヌルパネルの察応するアプレットを䜿甚しお構成するずきに、特定のコンピュヌタヌのバックアップの皮類を遞択したす。ご存じのように、特定のフォルダヌずファむルのみをアヌカむブする方法を指定し、遞択したディスクボリュヌムのむメヌゞを䜜成し、これら2぀の方法を組み合わせたす。 蚘事のトピックから離れお、この操䜜の説明に入るのは簡単なこずではありたせん。詳现に぀いおは、関連するドキュメントずむンタヌネット怜玢゚ンゞンに読者を送っおください。 Windows Backupのデヌタ構造に関する私自身の研究からのデヌタを匕甚したす。ファッショナブルな「リ゚ンゞニアリング」ずいう蚀葉は、タスクが比范的単玔であるために控えめず呌ぶこずができたす。 たた、ファむルシステムディレクトリのテキストの埌半で「フォルダ」ずいう甚語を䜿甚するこずにも泚意しおください。そのため、Windowsバックアップディレクトリファむルに関連しおのみ䜿甚される「ディレクトリ」ずいう甚語ず混同しないようにしたす。



タヌゲットメディア䞊の2぀のバックアップモヌドのそれぞれでWindowsバックアップによっお䜜成されたデヌタセットは、構造が異なりたす。



図1 最初の図は、ファむルモヌドでバックアップするずきにタヌゲットネットワヌクフォルダヌ「netbackup」に䜜成されるファむルシステムフォルダヌ構造の兞型的な䟋を瀺しおいたす。 たず、サヌビスファむル「MediaID.bin」がルヌトフォルダヌに衚瀺されたす。 明らかにわかるように、階局の最初のレベルコンピュヌタヌレベルでは、コンピュヌタヌごずに個別のサブフォルダヌが䜜成されたす「PC-001」、「PC-002」など。 これらのフォルダヌには、少なくずも2぀のナヌティリティファむル「MediaID.bin」ず「Desktop.ini」が含たれおいたす。



各コンピュヌタヌの個々のフォルダヌには、Windowsバックアップが機胜するため、2番目の階局レベルアヌカむブレベルのサブフォルダヌが「 バックアップセット<日付> <時間>」タむプの名前で衚瀺されたす。各名前には1぀のアヌカむブが含たれたす。それに基づいお、増分バックアップ。 たた、各アヌカむブレベルフォルダヌには、 「Catalogs」ずいう名前のサブフォルダヌが含たれおいたす。このフォルダヌには、 「GlobalCatalog.wbcat」ずいう名前のファむルが含たれおいたすこのアヌカむブのディレクトリが含たれおいたす。



このファむルは、デヌタ構造ずそのステヌタスの分析に非垞に圹立ちたす。Catalogsフォルダヌに存圚するこずは、たず、このフォルダヌずその近隣がアヌカむブレベルボリュヌムレベル内にあり、次に分析最終倉曎の時刻により、このアヌカむブを曎新した最埌のバックアップ操䜜がい぀実行されたかを知るこずができたす。



最初の完党コピヌず埌続の増分コピヌの䞡方が、 「Backup Files <date> <time>」ずいう圢匏の名前のボリュヌムレベルの個別のサブフォルダヌにありたす。 アヌカむブレベルず同様に、ボリュヌムレベルの各フォルダヌにはサブフォルダヌ「Catalogs」が含たれたすが、アヌカむブレベルの名前ずは異なり、特定のアヌカむブボリュヌムのディレクトリを構成する拡匵子「.wbcat」および「.wbverify」のファむルがかなり含たれたす。 。 「カタログ」サブフォルダヌに加えお、このレベルの各フォルダヌには、特定のボリュヌムからのデヌタをたずめお含む任意の数のZIPアヌカむブのみが含たれたす。 すべおが非垞にシンプルで、玠晎らしいこずですが、極端な堎合、ZIPアヌカむブを解凍するだけでデヌタを手動で抜出できたす。



構成され実行されおいるWindowsバックアップは、パチンコからリリヌスされた石ず同じように圱響を受ける可胜性があるため、増分ボリュヌムで珟圚のアヌカむブの远加を停止し、新しいボリュヌムを初期化する決定は、このプログラムのコヌドの奥深くで行われ、他の人には知られないアヌカむブレベルの新しいフォルダの圢匏。 この蚘事の著者は、プログラムによっおそのような決定を䞋すためのアルゎリズムを芋぀けるこずができたせんでしたが、論理的そしお経隓の文脈で正圓化されたは、増分ボリュヌムのチェヌンを継続できる可胜性ず最埌のバックアップ操䜜の成功ずの関係であるようです。 さらに、Windowsバックアップは新しいアヌカむブを䜜成したため、その前身を完党に忘れ、システム管理者の完党な裁量にその運呜を静かに委ねおいたす。 もちろん、これは、管理者が叀いアヌカむブのフォルダヌを䜕らかの方法で削陀するたで、すぐに空きディスク容量に圱響したす。 おそらく、これにより同じファむルの耇数のバックアップが保蚌されたす゚クスプロヌラヌのファむルプロパティりィンドりの[以前のバヌゞョン]タブを参照。 たあ、それは䜕ですか-Windowsバックアップ-これはそれです事実䞊無料の補品から制限がないこずを期埅するのは難しいです。



ファむルタむプアヌカむブのストレヌゞ構造の問題に十分な明確性が導入されおいるず仮定しお、ディスクボリュヌムのむメヌゞに目を向けたす。 この堎合のディレクトリ構造䞋図を参照は、Windowsバックアップファむルアヌカむブのディレクトリ構造ず非垞に䌌おいたすが、倧きな違いもありたす。



画像
  1. フォルダヌ階局の最初のレベルは、ディスクモヌドでバックアップするずきにタヌゲットフォルダヌ「netbackup」に䜜成される「WindowsImageBackup」フォルダヌによっお圢成されたす。 個々のコンピュヌタヌのサブフォルダヌは、 「WindowsImageBackup」内に䜜成され、コンピュヌタヌのレベルを圢成したす。
  2. 各コンピュヌタヌのサブフォルダヌ内アヌカむブレベルには、3぀のフォルダヌのみがありたす。 それらの2 ぀には静的な名前がありたす 「Catalogs」ず「SPPMetadataCache」 、および3番目のアヌカむブフォルダヌは、 「Backup <date> <time>」ずいう圢匏の名前を持っおいたす。


各コンピュヌタヌレベルのフォルダヌには、䞊蚘の3぀のサブフォルダヌに加えお、拡匵子のないMediaIdサヌビスファむルが垞に含たれおいたす。 䞀方、Catalogサブフォルダヌには、垞にGlobalCatalogずBackupGlobalCatalogの 2぀のファむルが含たれおいたす。



このコンピュヌタヌがディスクボリュヌムむメヌゞモヌドでバックアップされるたびに、アヌカむブフォルダヌ名前は「Backup <date> <time>」 の名前が倉曎されたす。 ボリュヌムの増分ではなく完党なアヌカむブが実行されるたびに、これは論理的です。 しかし、このモヌドでは叀いアヌカむブがすぐに自動的に削陀され、アヌカむブファむルモヌドの叀いアヌカむブが同じ堎所にあり続ける理由は謎のたたです。 いずれにせよ、このフォルダヌにはVHDファむル仮想ディスクむメヌゞのセットず補助XMLファむルのグルヌプが含たれたすが、その䞭で“ BackupSpecs.xml”を匷調衚瀺したす。 どうやら、特定のアヌカむブのパラメヌタを保存する圹割を果たし、ディスクボリュヌムのむメヌゞファむルを実際に䜜成した埌に圢成されるため、アヌカむブ操䜜の完了時間を刀断できたす。



実際、Windowsバックアップのアヌカむブストレヌゞの構造に関する重芁な情報ず芋なすこずができるのはこれだけです。 Windowsは䞀郚のフォルダヌに圢成する習慣があるずいうDesktop.iniファむルを芋る意味がありたせん。これらは監芖に関䞎しおいないためです。



私たちのアルゎリズム



自動的に受信したい情報を決定したす。 次の䞀連の属性ずしたす。





ファむルモヌドで䜜成されたWindowsバックアップアヌカむブの堎合、情報を収集するためのアルゎリズムは次のようになりたす。



  1. タヌゲットフォルダヌの最初のネストレベルのサブフォルダヌを順番に怜玢し、個々のマシンのアヌカむブのルヌトフォルダヌのフラグである「MediaID.bin」ファむル以䞋、簡朔にするためにKPAMを含むサブフォルダヌを特定したす。

  2. 識別された各KPAMで、GlobalCatalog.wbcatファむルを含むCatalogsフォルダヌのサブフォルダヌ内の存圚を分析したす。
  3. 前の手順で芋぀かったGlobalCatalog.wbcatファむルの䞭から最新のものを遞択し、その芪フォルダヌを含むフォルダヌを最新のファむルモヌドアヌカむブ以䞋、CAAず呌びたすのリポゞトリヌずしお受け入れたす。 このファむルの最埌の倉曎の時間を、このアヌカむブの最埌のボリュヌムの圢成が完了した時間ずみなしたす。
  4. CAAフォルダヌのサブフォルダヌ内のZIPファむルのサむズを芁玄し、この倀をCAAのサむズずしお䜿甚したす。
  5. 蓄積された情報のナヌザヌビュヌを䜜成しお返したす。名前パス、サむズ、およびCPAMリストから各マシンのCAAを䜜成した時間です。


ディスクボリュヌムモヌドのアヌカむブの堎合、デヌタ収集アルゎリズムは次のようになりたす。



  1. タヌゲットフォルダヌのネストの最初のレベルのサブフォルダヌを順次怜玢し、 「MediaID」ファむルを含むサブフォルダヌを特定したす。これは実際には個々のマシンのアヌカむブのルヌトフォルダヌのフラグです以䞋、簡朔にするためにKPAM。
  2. 各CPAMでは、 「BackupSpecs.xml」ずいう名前のサブフォルダヌ内のファむルの存圚を分析したす。 念のため、1぀ではなく耇数のアヌカむブフォルダヌが存圚する可胜性から進めたす。
  3. 前の手順で芋぀かったBackupSpecs.xmlファむルの䞭から最新のものを遞択し、それを含むフォルダヌをディスクボリュヌムモヌドの最新のアヌカむブ以降-CAAのリポゞトリずしお受け入れたす。 このファむルの最埌の倉曎の時間を、このアヌカむブの圢成の完了時間ずみなしたす。
  4. CAAフォルダヌのサブフォルダヌにあるVHDファむルのサむズを芁玄し、この倀をCAAのサむズずしお䜿甚したす。
  5. 蓄積された情報のナヌザヌビュヌを䜜成しお返したす。名前パス、サむズ、およびCPAMリストから各マシンのCAAを䜜成した時間です。


これたでのずころ、すべおは実装を含めお十分にシンプルに思えたす。 そしおPowershellスクリプトの圢匏で、始めたしょう。



Powershellスクリプト



このセクションでは、スクリプトの重芁な芁玠を怜蚎したす。実装の詳现が省略されおいるため、 添付の゜ヌスコヌドを参照するこずを提案したす。 次のコヌド䟋のナヌザヌむンタヌフェヌスのテキスト芁玠はロシア語ですが、英語でスクリプトに実装されおいたす-英語環境で䜿甚するために単玔に蚭蚈されおおり、蚀語基準に埓っおコヌドのバヌゞョンをコヌディングしたくありたせんが、実装は倚蚀語察応ですこのような単玔な補品の堎合、むンタヌフェヌスは䞍合理に耇雑です。



ファむルモヌドのアヌカむブ凊理



たず、KPAMのリストを取埗したす。



function Get-MachineListFB ($WinBackupRoot) { $MachineRoots = @{} Get-ChildItem -Path $WinBackupRoot -Recurse -Depth 1 -File -Filter "MediaID.bin" | Where-Object {$_.Directory.FullName -ne $WinBackupRoot} | foreach { $MachineRoots[$_.Directory.Name]=$_.Directory.FullName } return $MachineRoots }
      
      





Get-MachineListFB関数は1぀のパラメヌタヌを取りたす。Windowsバックアップアヌカむブストレヌゞのルヌトフォルダヌのフルネヌムであり、 ご芧のずおり 、コヌドに耇雑なものはありたせん。 Get-ChildItemコマンドレットは、指定されたフォルダヌに関しお同じネストレベル内にあるファむル蚘述子オブゞェクト「MediaID.bin」のリストを生成したす。 このリストはWhere-Objectコマンドレットにパむプされ、サブフォルダヌ内の指定されたフォルダヌのルヌトの倖偎にあるファむルのみを次のステヌゞにスキップしたす思い出すように、Windowsバックアップアヌカむブストレヌゞのルヌトフォルダヌには「MediaID.bin」ずいうファむルも含たれおいたす" 。 次に、返されたオブゞェクトには、芋぀かったファむルを含むフォルダヌの名前ず完党パスが入力されたす。



Get-ChildItemコマンドレットを䜿甚しお、指定された基準に埓っおファむルずフォルダヌを遞択するこずに぀いお、発蚀したいず思いたす。 ご芧のずおり、コマンドレットの名前の基準は「-Filter」パラメヌタヌの圢匏で衚されたす。 同時に、 Get-ChildItemには、同じ機胜を実行できる別のパラメヌタヌ"-Include"もありたす。 違いは䜕ですか遞択基準を説明する方法を遞択する方法は "-Filter"パラメヌタヌを䜿甚する堎合、 Powershellは特定のデヌタセットこの堎合はディスクファむルシステムぞのアクセスを提䟛する適切なプロバむダヌメカニズムを䜿甚しお遞択を実行したす。 たたは、Powershellには独自の組み蟌み遞択メカニズムがあり、 「-Include」パラメヌタヌによっお有効になりたす。 ナヌザヌにずっおの違いは、次のずおりです。



  1. パフォヌマンスプロバむダヌメカニズムを䜿甚した遞択は、PS独自の機胜よりも速くなる可胜性がありたすこの堎合は確かです。
  2. 機胜 「-Include」パラメヌタヌず「-Recurse」パラメヌタヌを䞀緒に䜿甚するず、階局の深さの制限は「-Depth」パラメヌタヌず連動したせん少なくずも-ディスクファむルシステムに適甚されるPowershellバヌゞョン5では、これは実隓的に確立されたした。


次に、CAA怜出機胜を実装したす。



 function Get-LastFileBackupSet ($MachineRoot) { $objLB = $null try { $LastWbcat = Get-ChildItem -Path $MachineRoot -Recurse -Depth 2 ` -File -Filter "GlobalCatalog.wbcat" | Where-Object {$_.Directory.Name -eq "Catalogs"} | Sort-Object LastWriteTime | Select-Object -Last 1 LastWriteTime, Directory, ` @{Name="Machine";Expression={$_.Directory.Parent.Parent.Name.ToUpper()}}, ` @{Name="Path";Expression={$_.Directory.Parent.FullName}}, ` @{Name="Name";Expression={$_.Directory.Parent.Name}} $ZIPFiles = ( Get-ChildItem $LastWbcat.Directory.Parent.FullName -Recurse -Depth 2 ` -File -Filter "*.zip" | Select-Object Length | Measure-Object -Property Length -Sum ) } finally { if (($ZIPFiles) -and ($LastWbcat)) { $objLB = @{ Machine = $LastWbcat.Machine Path = $LastWbcat.Path Name = $LastWbcat.Name Updated = $LastWbcat.LastWriteTime Size = $ZIPFiles.Sum } } } return $objLB }
      
      





Powershellの新芏ナヌザヌに説明したしょう。PSスクリプト蚀語の次の行で匏を継続するための暙準文字は、いく぀かの行の末尟にある単䞀のバックティックです。 ここでは、蚘事内のコヌドサンプルの読みやすさを改善するためにのみ䜿甚されたす。



関数のロゞックを明確にしたしょう。 圌女の呌び出しパラメヌタヌは、前のものず同様に、1぀だけです単䞀のマシンのファむルモヌドアヌカむブのルヌトフォルダヌのフルネヌム 事前にGet-MachineListFB関数を䜿甚しお、アヌカむブが芋぀かったすべおのマシンのこれらのパスを決定したす。 Get-ChildItem呌び出しは、指定されたフォルダヌのサブフォルダヌにある「GlobalCatalog.wbcat」ずいう名前の芋぀かったファむルの説明を含むオブゞェクトのリストを返したす。 このリストはWhere-Objectコマンドレットの凊理に枡され、芋぀かったファむルの䞭から、芪フォルダヌの名前が指定されたファむル "Catalogs" ず䞀臎するファむルのみを遞択したす。 パむプラむンの次のステップは、最埌のファむル倉曎のタむムスタンプの昇順でリストの残りを䞊べ替えるSort-Objectコマンドレットです。Select-Objectコマンドレットは、順序付けられたリストの最埌の芁玠を遞択し、マシンリ゜ヌスを節玄するために返されたオブゞェクトの属性セットをLastWriteTimeおよびDirectoryに絞り蟌みたす。



副詞の「単玔な」終了を䌎うのはそれだけです。その埌、 Select-Objectコマンドレットは、返された各オブゞェクトに远加のナヌザヌ属性を远加したすPSではそのようなこずをその堎で行うこずができたす。 その結果、戻り倀は、゜ヌス芁玠の2぀の「ビルトむン」 Directory プロパティずLastWriteTimeプロパティで構成された属性ず、動的に蚈算されたナヌザヌ定矩プロパティMachine 、 Path 、 Nameを定矩したオブゞェクトハッシュテヌブル圢匏です。 この皮類のナヌザヌ属性を定矩するための圢匏は次のずおりです。



 @{Name = "<_>"; Expression = {$_.<>}}
      
      





プロパティの倀を蚈算する匏は、凊理䞭のデヌタに盎接関連しない任意のもの䟋 Get-Date 、たたはこの関数のコヌドで行われおいるように、 $ _ iterator芁玠のプロパティずメ゜ッドを含めるこずができたす。 関数コヌドの䟋からわかるように、この皮の構造はSelect-Objectコマンドレットによっお返されるパラメヌタヌのリストに単玔にリストされおいたす。



蚈算の結果を耇合オブゞェクトの圢匏で返すこずは、同じ゜ヌスデヌタセットのさたざたなパラメヌタヌに察しお個別の蚈算を行う必芁がないため䟿利です。 特に、調べたばかりの関数は、CAAフォルダヌの名前だけでなく、そのフルパス、その䞭のアヌカむブの最終曎新のタむムスタンプ、およびそのサむズも瀺したす。



さらに関数テキストに沿っお、GlobalCatalog.wbcatファむルの芪フォルダヌを含むフォルダヌの1レベル䞊のフォルダヌのすべおのサブフォルダヌで「ZIP」拡匵子を持぀ファむルを遞択するこずにより、このアヌカむブを構成するZIPファむルの合蚈サむズを蚈算したす。このアヌカむブのフォルダ内。 Get-ChildItem呌び出しは、 Select-Objectコマンドレットに枡されるファむルのリストを返したす。Select-Objectコマンドレットは、デヌタからLengthプロパティのみを抜出しファむルシステムオブゞェクトのサむズシノニムです、結果の遞択結果をMeasure-Objectコマンドレットに枡しお、サむズを集蚈したす。



条件の構築($ZIPFiles) -and ($LastWbcat)



は、゚ラヌ状態の基本的な怜出を目的ずしお、倉数$ ZIPFilesおよび$ LastWbcatの存圚を確認するのに圹立ちたす。 これは暙準的なPowershellのトリックですこれらの倉数を事前に初期化しおいないため、テスト時に初期化されおいない倉数のいずれかが蚱容倀を持たない堎合、テストは論理的な意味で論理的な結果を返したす。 ぀たり If Not IsNull() 




Visual Basicのコンストラクトのようなもの。



さらに-おそらく明らかなように-オブゞェクトのフィヌルド「ハッシュテヌブル」などぞの蚈算倀の割り圓お$ objLBが実行され、関数によっお返されたす。



特定のマシンのCAAパラメヌタを決定するず、実際に蚈算アルゎリズムが完了したす。これは、目的のCAAに぀いおすべおがわかっおおり、この「すべお」がGet-LastFileBackupSet関数によっお返されるオブゞェクトのフィヌルドに曞き蟌たれるためです





受け取った情報の衚瀺を実装するこずは残っおいたす。 システム管理者は消費者であるため、芖芚的スタむルの改良は行わず、出力デヌタの2぀の衚珟、プレヌンテキストず衚圢匏のHTMLを䜜成したす。 各圢匏に぀いお、2぀の関数を䜜成したす。1぀目は個々のコンピュヌタヌのデヌタ行を生成し、2぀目はそのような行から芋出しを持぀テヌブルを収集したす。 実際、スクリプトコヌドでは逆順で実行されたす。Powershell゚グれクティブサブシステムはむンタヌプリタヌであるため、スクリプトコヌド内の関数宣蚀は呌び出しの前に行う必芁があり、PSは関数プロトタむプの予備宣蚀のメカニズムをサポヌトしおいたせん。



 function Get-LastFileBackupSetSummaryTXTRow ($MachineRoot) { $ret = "" $Now = Get-Date $LastBT = Get-LastFileBackupSet ($MachineRoot) if ($LastBT) { $ret = ": " + $LastBT.Machine + "; : " + $LastBT.Name + ` "; : " + ($Now - $LastBT.Updated).Days + "  . (" + ` $LastBT.Updated + "); : " + ('{0:0} {1}' -f ($LastBT.Size/1024/1024), "") } else{ $ret = "  " } return $ret } function Get-LastFileBackupDatesTXT ($WinBackupRoot) { $table="  :`r`n" $MachineRoots = Get-MachineListFB ($WinBackupRoot) foreach ($machine in $MachineRoots.Keys) { $line = Get-LastFileBackupSetSummaryTXTRow($MachineRoots[$machine]) $table+= -join($line, "`r`n") } return $table }
      
      





Get-LastFileBackupDatesTXTコレクタヌ関数は完党に簡単です。ヘッダヌを持぀テヌブルを含む段階でテキスト文字列を䜜成するだけです。 テヌブル行はGet-LastFileBackupSetSummaryTXTRow関数によっお生成され、その「接着」は文字列連結挔算子「-join」によっお実行されたす。 文献では、それは異なっお呌ばれおいたすどこで-オペレヌタによっお、そしおどこで-メ゜ッドによっお、そしおいく぀かの曞き方がありたす。 ここでは、区切り文字なしでデフォルトで連結が行われる「関数のような」衚蚘法を䜿甚したす。 2番目のオペランドは、行末のEsc文字ずキャリッゞリタヌン "r"および"n" で構成される文字列定数です。 Windowsテキストファむルの暙準的な行の折り返し。



Get-LastFileBackupSetSummaryTXTRow関数は、CPAMぞのパスを取埗し、察応するマシンのCAAを決定したす。 この倀は耇合であるため、そこから個々のデヌタ芁玠を抜出し、それらにテキストラベルを付けお、読み取り可胜な文字列を収集したす。 ここでPowershellは、操䜜察象の倀のオブゞェクトの性質の喜びを䜿甚するこずができたすオブゞェクトタむプ「日付/時刻」の2぀の倀の差もオブゞェクトであり、日数での倀は远加の関数を䜿甚せずに単玔な枛算挔算子によっお蚈算されたす 結果を取埗する枬定単䜍を明確にするだけで枈みたす。これは、結果のオブゞェクトのDaysプロパティを瀺すこずで実珟されたす。これは、関心のある日だからです。



アヌカむブサむズの倀をメガバむト単䜍で衚珟するために、次の構成が䜿甚されたした。



 ('{0:0} {1}' -f ($LastBT.Size/1024/1024), "")
      
      





これはフォヌマット挔算子であり、倚くのプログラミング蚀語のフォヌマット機胜に類䌌しおいたす。 倖郚ブラケット読みやすくするためにここに残されおいたすの䞭には、フォヌマットの文字列、挔算子自䜓 "-f" 、および眮換倀のリストが順番に配眮されおいたす。 曞匏の行には、2぀の曞匏指定子が含たれおいたす各指定子は䞭かっこで囲たれおいたす。 曞匏指定子の間にスペヌスがあるため、倀間の結果の行に存圚したす。 それぞれ挔算子の埌に、2぀の倀が続きたす。サむズをメガバむト単䜍で蚈算する匏ず、枬定単䜍の文字列です。 出力では、「123 MB」ずいう圢匏の文字列倀を取埗したす。 Powershellは、指定された数倀圢匏で、指定された圢匏に䞀臎する型に数倀をキャストしたす。



CAA倀が空の堎合、 LastFileBackupSetSummaryTXTRowぱラヌ状況を瀺す文字列を返したす。



情報のハむパヌテキスト衚珟は、単玔なHTMLタグが生成された行に挿入されるずいう点でのみ、本質的に異なり、同様の方法で圢成されたす。 問題のアルゎリズムに関しお根本的に新しいものは䜕もないため、ここではこのコヌドを提䟛したせん。蚘事に添付されおいるスクリプトの゜ヌスコヌドを調べるこずで、このコヌドに慣れるこずができたす。 HTMLコヌドのフォヌマットには、管理者の泚意を匕くために、1日以䞊前にCAAで色分けされた文字列が含たれおいるこずに泚意しおください。



ディスクボリュヌムむメヌゞモヌドアヌカむブの凊理



このモヌドのアヌカむブの詳现を考慮しお、前のケヌスず同様にCPAMのリストを取埗したす。



 function Get-MachineListIB ($WinBackupRoot) { $MachineRoots = @{} $ImageBackupRoot = $WinBackupRoot+"\WindowsImageBackup" Get-ChildItem -Path $ImageBackupRoot -Recurse -Depth 1 -File -Filter "MediaID" | foreach { $MachineRoots[$_.Directory.Name]=$_.Directory.FullName } return $MachineRoots }
      
      





぀たり サブフォルダヌを怜玢しお、リポゞトリのルヌトフォルダヌにある「WindowsImageBackup」ずいう名前のサブフォルダヌを同じレベルの深さたで調べたす。 KPAMを意味する「MediaID」ずいう名前の信号ファむルを探しおいたす。



ファむルモヌドアヌカむブの堎合ず同様に、 Get-LastImageBackupSet関数を蚘述し、テキストおよびハむパヌテキスト圢匏で結果のナヌザヌ定矩衚珟を生成するために、 Get-LastImageBackupSetSummaryTXTRow 、 Get-LastImageBackupSetSummaryHTMLRow 、 Get-LastImageTackTackDateを䜿甚しおCAAを定矩したす。 ファむルモヌドアヌカむブの堎合の考慮事項ず同様に、ハむパヌテキスト衚珟を生成する関数のペアはここには瀺されおいたせん添付の゜ヌスコヌドを参照。



 function Get-LastImageBackupSet ($MachineRoot) { $objLB = $null try { $LastBSXML = Get-ChildItem -Path $MachineRoot -Recurse -Depth 1 ` -File -Filter "BackupSpecs.xml" | Sort-Object LastWriteTime | Select-Object -Last 1 LastWriteTime, Directory, ` @{Name="Machine";Expression={$_.Directory.Parent.Name.ToUpper()}}, ` @{Name="Path";Expression={$_.Directory.FullName}}, ` @{Name="Name";Expression={$_.Directory.Name}} $VHDFiles = ( Get-ChildItem $LastBSXML.Directory.FullName -File -Filter "*.vhd" | Select-Object Length | Measure-Object -property length -sum -ErrorAction SilentlyContinue) } finally { if (($VHDFiles) -and ($LastBSXML)) { $objLB = @{ Machine = $LastBSXML.Machine Path = $LastBSXML.Path Name = $LastBSXML.Name Updated = $LastBSXML.LastWriteTime Size = $VHDFiles.Sum } } } return $objLB } function Get-LastImageBackupSetSummaryTXTRow ($MachineRoot) { $ret = "" $Now = Get-Date $LastBT = Get-LastImageBackupSet ($MachineRoot) if ($LastBT) { $ret = ": " + $LastBT.Machine + "; : " + ` $LastBT.Name + "; : " + ($Now - $LastBT.Updated).Days + ` "  . (" + $LastBT.Updated + "); : " + ` ('{0:0} {1}' -f ($LastBT.Size/1024/1024), "") } else{ $ret = "  ." } return $ret } function Get-LastImageBackupDatesTXT ($WinBackupRoot) { $table="  :`r`n" $MachineRoots = Get-MachineListIB ($WinBackupRoot) foreach ($machine in $MachineRoots.Keys) { $line = Get-LastImageBackupSetSummaryTXTRow($MachineRoots[$machine]) $table+= -join($machine, " => ", $line, "`r`n") } return $table }
      
      





これにより、ストレヌゞ分析コヌドの分析が完了し、レポヌト党䜓のアセンブリず出力を担圓するスクリプトの䞀般的な郚分に進みたす。



アセンブリおよびレポヌト出力



スクリプトは、既に同意したずおり、プレヌンテキスト圢匏ずHTML圢匏のレポヌトを生成できる必芁があるずいう事実から進めたす。 さらに、レポヌトを次の2぀の方法で出力できるようにするタスクを蚭定したす。a暙準出力デバむスぞのテストストリヌムの圢匏、およびb指定されたアドレスぞの電子メヌル送信。 同時に、スクリプトは次のコマンドラむンパラメヌタヌを受け入れる必芁がありたす。





最初に、コマンドラむンパラメヌタヌの説明を含むスクリプトヘッダヌを䜜成したす。 CMD.EXEスクリプトの初期圢匏で実装されたそれらを操䜜するメカニズムは、Windows Script Hostスクリプトで倧幅に改善されたしたが、それでも非垞に䞍䟿であり、入力されたパラメヌタヌのシステムを敎理しお分析するために倚くの远加手順が必芁であったこずに蚀及する䟡倀がありたす。 ただし、Powershellでは、根本的な倉換を経お、宣蚀に基づいおPS組み蟌みツヌルを䜿甚しおパラメヌタヌ凊理を実装できるParamブロックずいう本栌的な䟿利なツヌルになりたした。 私たち自身の目的にそれを適甚したす



 Param( [Parameter(Mandatory)][string] $Root, [switch] $txt=$false, [switch] $mail=$false, [string] $SmtpSrv, [int] $Port=25, [string] $To, [string] $Fm, [string] $Pwd, [string] $Sub )
      
      





䞊蚘のスニペットからわかるように、aceコマンドラむンパラメヌタヌは1぀のParamブロックで蚘述されおいたす。 圌の括匧内に、圌の属性のコンマ区切りリストがリストされおいたす-デヌタ型ず必須のすべおのパラメヌタヌ。 䞀般に、個々のパラメヌタヌを蚘述する最も単玔なオプションは、文字「$」で始たる単玔な識別子で構成されたす。 パラメヌタヌを宣蚀するための次の最も難しいオプションは、デヌタ型を改良するこずです。これは、パラメヌタヌIDの巊偎にある角括匧内のデヌタ型の名前ずしお蚘述されたす。 デフォルト倀を蚭定するこずもできたす。デフォルト倀では、右偎の識別子に割り圓お挔算子ず倀を远加するだけで十分です。 デフォルト倀を明瀺的に指定しないず、パラメヌタヌは指定されたタむプの空の倀に初期化されたす。



スむッチパラメヌタヌのタむプ぀たり、「スむッチ」は次のように機胜したす。スクリプトがコマンドラむンで簡単に蚀及しおこのパラメヌタヌを受け取った堎合、真の倀が割り圓おられたす。 コマンドラむンにない堎合は、停の倀が割り圓おられたす。



远加のパラメヌタヌ属性必須などを指定する必芁がある堎合は、巊偎に角かっこでブロックをもう1぀远加する必芁がありたす。このブロックは、 Parameterキヌワヌドで始たり、その埌に属性のリストず、堎合によっおは括匧で囲たれた倀が続きたす。 特に、個々のパラメヌタヌのバむンディングは、 必須論理タむプの属性によっお定矩されたす。 PS 3.0以降、属性倀に明瀺的にTrueを指定するこずはオプションです。省略した堎合、 Trueを意味したす 。



たずえば、この䟋では、 Rootパラメヌタヌは必須であり、タむプstringを持ち、デフォルト倀はありたせん。 このパラメヌタヌの指定された必須性は、それなしでスクリプトが実行される堎合、Powershellむンタヌプリタヌがコン゜ヌルにその倀を入力するように促し、指定された倀なしでスクリプトコヌドを実行できないようにするずいう事実に぀ながりたす。 必須ずしお宣蚀されおいない明瀺的に指定されたパラメヌタヌがないこずは、スクリプト実行の開始に察する障害ではありたせん。



Powershellスクリプト蚀語でのParamブロックの䜿甚は、コマンドラむンパラメヌタヌのみに限定されず、関数パラメヌタヌに関しおも䜿甚できるこずを蚀わなければなりたせん。 おそらく、逆のステヌトメントであっおも、より真実になるでしょう。関数パラメヌタヌだけでなく、スクリプトコマンドラむンパラメヌタヌにも適甚できたす。スクリプトの本䜓は、プログラムコヌドの階局の最䞊䜍レベルの関数に類䌌しおいたすたずえば、Cのmain関数ずしお。これにより、次のようにGet-LastImageBackupDatesTXT関数をオヌバヌラむドできたす。



 function Get-LastImageBackupDatesTXT { Param( [Parameter(Mandatory)][string] $WinBackupRoot ) $table="  :`r`n" $MachineRoots = Get-MachineListIB ($WinBackupRoot) foreach ($machine in $MachineRoots.Keys) { $line = Get-LastImageBackupSetSummaryTXTRow($MachineRoots[$machine]) $table+= -join($machine, " => ", $line, "`r`n") } return $table }
      
      





必須パラメヌタヌなしで関数を呌び出す堎合、入力のプロンプトも画面に衚瀺されたすが、この堎合の有甚性は議論の䜙地がありたす。ただし、デフォルト倀を蚭定し、パラメヌタをタむプ化する機胜は、堎合によっおは間違いなく䟿利です。



この䜙談を完了するには、スクリプトパラメヌタヌずPowershell関数を定矩する圢匏に関しお、スクリプトパラメヌタヌの説明が自己文曞化システムの䞀郚であるこずに泚意する必芁がありたす。これらは、スクリプトのコメントベヌスのヘルプテキストの「.PARAMETER」セクションで䜜成者が指定した情報ず自動的に結合され、コマンド「Get-Help <スクリプト名>」で生成されたスクリプトのヘルプの䞀郚ずしお衚瀺されたす。



レポヌトの党文のアセンブリコヌドに移りたしょう。䞊蚘で定匏化された問題の最終的な声明に基づいお、スクリプト本文から盎接呌び出される3぀の関数があるこずは明らかですレポヌトのテキストバヌゞョンの組み立お、レポヌトのハむパヌテキストバヌゞョンの組み立お、および電子メヌルによるレポヌトテキストの送信



 function Get-LastWinBackupDatesHTML ($WinBackupRoot) { $Now = Get-Date $table='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'+"`n" $table+='<html xmlns="http://www.w3.org/1999/xhtml"><head><title>   "'+ `$WinBackupRoot+'"</title></head><body>'+"`n" $table+='<h3>   "'+$WinBackupRoot+'"'+"</h3>`n" $table+='<h3>  : '+$Now+"</h3>`n" $table+= Get-LastFileBackupDatesHTML ($WinBackupRoot) $table+= Get-LastImageBackupDatesHTML ($WinBackupRoot) $table+= "</body>`n</html>" return $table } function Get-LastWinBackupDatesTXT ($WinBackupRoot) { $Now = Get-Date $table='   "'+$WinBackupRoot+'"'+"`r`n" $table+='  : '+$Now+"`r`n`r`n" $table+= Get-LastFileBackupDatesTXT ($WinBackupRoot) $table+= "`r`n" $table+= Get-LastImageBackupDatesTXT ($WinBackupRoot) return $table } function Send-Email-Report ($SendInfo, $TXTonly=$false){ $Credential = New-Object -TypeName "System.Management.Automation.PSCredential" ` -ArgumentList $SendInfo.Username, $SendInfo.SecurePassword if ($TXTonly) { Send-MailMessage -To $SendInfo.To -From $SendInfo.From ` -Subject $SendInfo.Subject -Body $SendInfo.MsgBody ` -SmtpServer $SendInfo.SmtpServer -Credential $Credential ` -Port $SendInfo.SmtpPort -Encoding UTF8 } else { Send-MailMessage -To $SendInfo.To -From $SendInfo.From ` -Subject $SendInfo.Subject -BodyAsHtml $SendInfo.MsgBody ` -SmtpServer $SendInfo.SmtpServer -Credential $Credential ` -Port $SendInfo.SmtpPort } }
      
      





別に、Powershellに関係なく、プレヌンテキストの行ずHTMLのLFのみを分離するためにCR / LFを䜿甚した理由を説明したす。これは、MS OutlookでHTMLメッセヌゞが正垞に衚瀺されるようにするために行われたす。さお、通垞のブラりザでレポヌトを芋るず、違いはありたせん。



最終レむアりトの䞡方の機胜は非垞にシンプルであり、静的に定矩されたテキストフラグメントで動䜜し、呌び出されたルヌチンから受信したテキストブロックず組み合わされお、党䜓的なレポヌトを圢成したす。



機胜送信-メヌル-報告曞は、「ラッパヌ」コマンドレットで送信-はMailMessageスクリプトがこのコマンドレットのパラメヌタヌの「座暙系」で動䜜するパラメヌタヌシステムを衚瀺したす。「System.Management.Automation.PSCredential」ずいう名前の.NETクラスのむンスタンスを䜿甚しお、ナヌザヌIDずパスワヌドをSend-MailMessageコマンドレットに枡す必芁があるこずに泚意しおください。埌者はこれらのパラメヌタヌの通垞の文字列倀を受け入れないためです。䜿甚されるクラスは、安党なシステムの芳点からコンテナヌ$ Credential倉数これらの倀を保存したす。これらの倀は、埓来のログむン/パスワヌドのペアの代わりにコマンドレットに枡されたす。前述のように、厳密に蚀えば、オヌプンフォヌムでパスワヌドをスクリプトに送信するこずは、特別なGet-Credentialコマンドレットを䜿甚しおスクリプト実行䞭にパスワヌドの盎接ナヌザヌ入力を䜿甚しお、そのようなデヌタを入力するためのシステムグラフィカルダむアログを衚瀺するこずを提䟛するための安党で安党なオプションではありたせん。しかし、むンタラクティブな起動ではなくバッチ甚のスクリプトを䜜成しおいるため、ドグマからこのような逞脱を行う必芁がありたす...



メッセヌゞを送信する機胜で終了したす。メッセヌゞに盎接関䞎するパラメヌタヌは$ SendInfoパラメヌタヌにカプセル化されおいるため、パラメヌタヌは2぀しかありたせん。ハッシュテヌブルであるこず。それずは別に、オプションの$ TXTonlyフラグパラメヌタヌのみが枡され、プレヌンテキスト圢匏でメッセヌゞを送信する必芁があるこずを瀺したす。呌び出し䞭に省略されたり、停の倀を持぀堎合、メッセヌゞはハむパヌテキスト圢匏で送信されたす。



䞊蚘のすべおの機胜を䜿甚するスクリプト本䜓コヌドのみを䜜成するこずは残りたす。そのサむズず耇雑さがこれらの関数の数に反比䟋するずいう仮定は完党に公平です-アルゎリズムの開発ずそれに察応する関数の分解にそれほど倚くの努力を費やしたのは無駄ではありたせん。



 if ($txt) { $Ret = Get-LastWinBackupDatesTXT ($Root) } else { $Ret = Get-LastWinBackupDatesHTML ($Root) } if ($mail) { if (($SmtpSrv) -and ($Port) -and ($To) -and ($Fm) -and ($Pwd) -and ($Sub) -and ($Ret)) { $objArgs = @{ SmtpServer = $SmtpSrv SmtpPort = $Port To = $To.Split(',') From = $Fm Username = $Fm SecurePassword = ConvertTo-SecureString -String $Pwd -AsPlainText -Force Subject = $Sub MsgBody = $Ret } Send-Email-Report ($objArgs, $txt) } else { Write-Host $Ret } } else { Write-Host $Ret }
      
      





すべおが実際に非垞に簡単になり、抂略的に蚀うず、コマンドラむンパラメヌタヌ$ txtがスクリプトに枡されたかどうかに応じお、2぀の既存のGet-LastWinBackupDatesXXX関数の1぀が呌び出されたす。実行結果実際には、生成されたレポヌトのテキストは$ Ret倉数に保存されたす。スクリプトのコマンドラむンパラメヌタヌで電子メヌルでの送信が必芁な堎合、Send-Email-Report関数を呌び出しお、メッセヌゞずその送信方法を完党に説明するハッシュテヌブルを䜜成し、提䟛したす。電子メヌルに関する話がなかった堎合、および送信パラメヌタヌの説明に明らかな欠陥がある堎合、レポヌトのテキストを暙準出力デバむスコン゜ヌルに衚瀺するだけです。



生成されたレポヌトの䟋を提䟛したす。



ハむパヌテキスト圢匏




「\\ sa-nas \ netbackup」のバックアップ



レポヌト生成日01/10/2017 09:00:01



ファむルモヌドアヌカむブ



車



最新のアヌカむブ



幎霢



曎新されたした



倧きさ



サチェン

バックアップセット2017-01-10 040000

0日

10/01/2017 04:16:23

6446 MB

SA-DOCTOR

バックアップセット2017-01-10 080002

0日

10/01/2017 08:10:09

2431 MB

SA-BAR

バックアップセット2016-12-28 033001

0日

10/01/2017 02:36:35

248028 MB

SA-RECEPTION

バックアップセット2017-01-10 060737

0日

10/01/2017 06:16:29

1264 MB

SA-ECR

バックアップセット2017-01-08 220005

0日

09/01/2017 22:03:22

2863 MB

SA-HOTELMGR

バックアップセット2017-01-08 020003

0日

09/01/2017 22:11:02

26788 MB

SA-ITO

バックアップセット2017-01-06 230005

0日

09/01/2017 23:08:48

17486 MB

SA-CHEF

バックアップセット2017-01-05 230002

0日

09/01/2017 23:02:11

3791 MB

SAマスタヌ

バックアップセット2017-01-09 102958

0日

01/09/2017 23:12:51

8441

SA-CONTROLLER

Backup Set 2017-01-09 000007

0

01/10/2017 00:17:04

9788



:







幎霢





倧きさ



SA-ITO

Backup 2017-01-10 020013

0

01/09/2017 23:12:44

47534

POSSERVER

Backup 2017-01-10 020006

0

01/09/2017 23:07:36

23138






:






「\\ sa-nas \ netbackup」内のバックアップ

レポヌト生成日2017幎1月10日09:00:01



ファむルモヌドアヌカむブ

マシンSA-CHENG;アヌカむブ名バックアップセット2017-01-10 040000;曎新0日前。 2017幎1月10日04:16:23;サむズ6446 MB

マシンSA-DOCTOR;アヌカむブ名バックアップセット2017-01-10 080002;曎新0日前。 2017幎1月10日08:10:09;サむズ2431 MB

マシンSA-BAR;アヌカむブ名バックアップセット2016-12-28 033001;曎新0日前。 2017幎1月10日02:36:35;サむズ248028 MB

マシンSA-RECEPTION;アヌカむブ名バックアップセット2017-01-10 060737;曎新0日前。 2017幎1月10日06:16:29;サむズ1264 MB

マシンSA-ECR;アヌカむブ名バックアップセット2017-01-08 220005;曎新0日前。 2017/09/09 22:03:22;サむズ2863 MB

マシンSA-HOTELMGR;アヌカむブ名バックアップセット2017-01-08 020003;曎新0日前。 2017/09/09 22:11:02;サむズ26788 MB

マシンSA-ITO;アヌカむブ名バックアップセット2017-01-06 230005;曎新0日前。 2017/09/09 23:08:48;サむズ17486 MB

マシンSA-CHEF;アヌカむブ名バックアップセット2017-01-05 230002;曎新0日前。 2017/09/09 23:02:11;サむズ3791 MB

マシンSA-MASTER;アヌカむブ名バックアップセット2017-01-09 102958;曎新0日前。 09/09/2017 23:12:51;サむズ8441 MB

マシンSA-CONTROLLER;アヌカむブ名バックアップセット2017-01-09 000007;曎新0日前。 2017幎1月10日00:17:04;サむズ9788 MB



ディスクボリュヌムむメヌゞ

マシンSA-ITO;アヌカむブ名バックアップ2017-01-10 020013;曎新0日前。 09/09/2017 23:12:44;サむズ47534 MB

マシンPOSSERVER;アヌカむブ名バックアップ2017-01-10 020006;曎新0日前。 2017/09/09 23:07:36;サむズ23138 MB






おわりに



ここで説明するスクリプトは実際に䜿甚され、システムタスクスケゞュヌラを䜿甚しお起動されるバックアップストレヌゞの状況を定期的に報告したす。もちろん、それは䞍完党であり、さたざたな改善を簡単に提案するこずができたす-たずえば、残りのディスク容量や叀いアヌカむブが占めるボリュヌムの制埡などです。たた、スクリプトで芋萜ずされがちな゚ラヌ状況の凊理の問題によっお、創造性の広い範囲が提䟛されたす。しかし、なんらかの方法で、このオプションは完党に機胜し、開発にあたり時間を必芁ずしたせんでした。実際、私には思えたすが、これはシステム管理者のレベルで開発されたスクリプトの意味です。商甚補品のレベルではなくおも、最小限のリ゜ヌスで問題を効果的に解決したす。



ここからスクリプトの゜ヌスコヌドを含むアヌカむブをダりンロヌドしたす。



この蚘事の続きである次の蚘事では、他の任意のバックアップシステム、特にNTバックアップずghettoVCBVMware ESXiの堎合によっお䜜成されたデヌタセットをサポヌトするフィルタヌアドオンテクノロゞヌを䜿甚したこのスクリプトの機胜の拡匵に぀いお説明したす。



All Articles