Na początku potrzebujemy funkcję do iteracji po dacie:
function Iterate-Date { [CmdletBinding()] param( [Parameter(Mandatory=$True,Position=1)] [ValidateNotNull()] [DateTime] $startDate , [Parameter(Mandatory=$True,Position=2)] [ValidateNotNull()] [DateTime] $endDate ) for($i = $startDate; $i -le $endDate; $i = $i.AddDays(1)) { $i } }Potrzebna będzie funkcja sprawdzająca czy istnieje nazwa pliku z podanym patternem:
function Test-FileName { param( [string]$path='.' ) process{ $filter= $_ $items = gci -Path $path -Filter $filter new-object PSObject | Add-Member -MemberType NoteProperty -Name Filter -Value $filter -PassThru | Add-Member -MemberType NoteProperty -Name Items -Value $items -PassThru | Add-Member -MemberType NoteProperty -Name Contains -Value ([bool]$items) -PassThru } }Samo sprawdzanie czy istnieje plik z patternem yyyy-MM-dd* jest poniżej:
Iterate-Date -startDate ([DateTime]("2005-02-13")) ([DateTime]("2014-06-16")) | %{ $_.ToString('yyyy-MM-dd') + "*"} | group | %{$_.name} | Test-FileName | ? {-not $_.Contains}Aby uprościć powyższe wywołanie to możemy zamienić group za pomocą poniższej funkcji:
function Get-KeyGroupObject { param( [string] $keyPropName = 'name' ) #in variable $input (enumerator type) we have all items $Input | group | %{$_.$keyPropName} }A sprawdzanie wygląda następująco:
Iterate-Date -startDate ([DateTime]("2005-02-13")) ([DateTime]("2014-06-16")) | %{ $_.ToString('yyyy') + "*"} | Get-KeyGroupObject | Test-FileName | ? {-not $_.Contains}
Brak komentarzy:
Prześlij komentarz