Я написал сценарий, который будет использоваться для архивирования файлов журналов с сервера. Я в очень хорошем состоянии со всем, кроме рекурсивности или нет Get-ChildItem ...PowerShell Scripting - Get-ChildItem
Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что когда Get-ChildItem не рекурсивный, а -Include
присутствует только с одним фильтром, это игнорируются! Или, я делаю что-то неправильно (вероятно).
Я очистил выход немного ...
PS C:\foo> Get-childitem -path "c:\foo"
Name
----
bar1.doc
bar2.doc
bar3.doc
foo1.txt
foo2.txt
foo3.txt
PS C:\foo> Get-childitem -path "c:\foo" -Include *.txt
PS C:\foo> Get-childitem -path "c:\foo" -Include *.txt -recurse
Name
----
foo1.txt
foo2.txt
foo3.txt
Sooo ??? У меня была фантазия, где все, что мне нужно было сделать, - это перейти к сценарию, в котором не было переключателя recurse. (Кстати, можно ли менять параметры с переменным, чтобы избежать дублирования кодов, где единственной изменчивостью являются параметры для командлета?)
В любом случае, вот мой сценарий для полноты, в дополнение к моей проблеме с Get-ChildItem.
function MoveFiles()
{
Get-ChildItem -Path $source -Recurse -Include $ext | where { $_.LastWriteTime -lt (Get-Date).AddDays(-$days) } | foreach {
$SourceDirectory = $_.DirectoryName;
$SourceFile = $_.FullName;
$DestinationDirectory = $SourceDirectory -replace [regex]::Escape($source), $dest;
$DestionationFile = $SourceFile -replace [regex]::Escape($source), $dest;
if ($WhatIf){
#Write-Host $SourceDirectory;
#Write-Host $DestinationDirectory;
Write-Host $SourceFile -NoNewline
Write-Host " moved to " -NoNewline
Write-Host $DestionationFile;
}
else{
if ($DestinationDirectory)
{
if (-not [System.IO.Directory]::Exists($DestinationDirectory)) {
[void](New-Item $DestinationDirectory -ItemType directory -Force);
}
Move-Item -Path $SourceFile -Destination $DestionationFile -Force;
}
}
}
}
Я только что видел это после размещения, нажав на моем Get-ChildItem теге. Подобно OP, фильтр является специфичным для провайдера, и я уже использую его для чего-то другого. Наверное, я просто продолжаю этот вопрос. http://stackoverflow.com/questions/790796/confused-with-include-parameter-of-the-get-childitem-cmdlet –
Ну, это документированное поведение, и мне нужно было RTFM. Клянусь, я сделал помощь, но я замалчивал это.Всем спасибо! –