我有一个使用Get-ChildItem来计算文件夹中最新文件的函数。我需要在文件夹中找到最新的增量备份并编写EXE文件脚本来安装它。但是,在同一文件夹中,所有不同服务器都有多个备份链,即
SERVER1_C_VOL_b001_i015.spi
SERVER2_D_VOL_b001_i189.spi
SERVER1_C_VOL_b002_i091.spi
SERVER1_E_VOL_b002_i891.spi (This is the newest file created)
我只想查看SERVER1
,只查看C_VOL
并仅查看b001
- 没有别的。
我有所有这些单独的组件:驱动器号,服务器名称,存储在数组中的b00X号。
我怎样才能使用Get-ChildItem
-Include
过滤器来查看:
.spi
SERVER1
C_VOL
b001
鉴于我从文本文件中获取了所有这些单独的组件:
Get-Content .\PostBackupCheck-TextFile.txt | Select-Object -First $i { $a = $_ -split ' ' ; $locationArray += "$($a[0]):\$($a[1])\$($a[2])" ; $imageArray += "$($a[2])_$($a[3])_VOL_b00$($a[4])_i$($a[5]).spi" }
我继续尝试并过滤,然后我卡住了:
$latestIncremental = Get-ChildItem -Path ${shadowProtectDataLocation}\*.* -Include *.spi | Sort-Object LastAccessTime -Descending | Select-Object -First 1
我已经过了.spi过滤了,但是我怎样才能包含C(用于卷),b00x的编号和服务器名称?
答案 0 :(得分:1)
我只想查看SERVER1,只查看C_VOL并仅查看b001 - 没有别的。
这是否具有包容性或排他性(问题不是100%明确)?
IE中。它是SERVER1
和 C_VOL
和 ...,还是与其中任何一个匹配的文件?根据最后一段,你似乎想要前者。
我看到两种方法,具体取决于匹配条件数组与文件名structuyre的匹配程度。
如果您的匹配文件具有与过滤条件匹配的表单(例如,在Q的示例中,除了扩展名之外具有相同的名称组件顺序),那么您可以动态构建“类似模式”:
$parts = … # the match parts array
$pattern = (($parts | Select-Object -skip 1) -join '*') + $parts[0]
$file = Get-ChildItem -Path $basePath -include $pattern | Sort-Object …
逐步应用模式的每个部分,再次假设扩展名在文件中首先出现:
$parts = … # the match parts array
$potentialFiles = Get-ChildItem -Path $basePath -include ('*' + $parts[0])
$parts = $parts | Select-Object -skip 1
foreach ($p in $parts) {
$potentialFiles = $potentialFiles | Where-Objecft { $_.Name -like ('*' + $p + '*') }
}
# Now sort and select -first 1 to get single file (if any left to match)