我正在尝试编写一个powershell脚本,该脚本将针对模板文件夹结构布局检查目录的文件夹结构,并报告其是否丢失了不同的文件夹或添加了不同的文件夹 .
Folder Template Structure
Folder A
Folder B
Directory 1 to check
Folder A
Folder B
Folder C
Directory 2 to check
Folder A
因此,对于目录1,它将报告文件夹C是附加的,对于目录2,它将报告文件夹B丢失
任何帮助将不胜感激
2 回答
要比较两个文件夹,请执行以下步骤(从:https://blogs.technet.microsoft.com/heyscriptingguy/2011/10/08/easily-compare-two-folders-by-using-powershell/):
将Get-ChildItem cmdlet与recurse切换参数和path参数(指向要用于参考的文件夹)一起使用,以获取fileinfo对象的集合 . 将这些对象存储在变量中 .
将Get-ChildItem cmdlet与recurse切换参数和path参数(指向要用于比较的文件夹)一起使用,以获取fileinfo对象的集合 . 将这些对象存储在不同的变量中 .
使用Compare-Object cmdlet并将第一个变量中存储的对象指定为ReferenceObject参数 . 将存储在第二个变量中的对象提供给DifferenceObject参数 .
码:
$ fso = Get-ChildItem -Recurse -path C:\ fso
$ fsoBU = Get-ChildItem -Recurse -path C:\ template
Compare-Object -ReferenceObject $ fso -DifferenceObject $ fsoBU
请注意
-Name
与Get-ChildItem
一起使用,这会导致所有子目录(-Directory
,-Recurse
被报告为相对于输入目录的路径,这样可以方便地比较目录树 .另请注意,Compare-Object cmdlet默认情况下会输出具有两个属性的
[pscustomobject]
实例,并且仅针对输入集之间的差异:.InputObject
,在您的情况下是一个输入集唯一的相对目录路径 ..SideIndicator
,这是一个字符串,指示输入对象是左侧唯一(第一个输入集,隐式绑定到参数-ReferenceObject
) -'<='
- 或右侧(第二个输入集,隐式绑定到参数-DifferenceObject
) -'=>'
以上结果如下: