Скрипт Powershell для получения файлов с определенной датой в строке - PullRequest
0 голосов
/ 15 декабря 2018

Я создаю скрипт powershell, чтобы захватывать только файлы с определенной датой в строке (вчерашняя дата) и отображать их имена.Но, похоже, все идет не очень хорошо.Я пробовал поискать в Google, но не нашел конкретной помощи в том, что я пытаюсь сделать:

$a = (Get-Date).AddDays(-1).ToString('yyyyMMdd')

$b = Get-ChildItem "E:\Export" -Filter {$_.Name -like '*'+$a.ToString()}

Get-ChildItem "E:\Export" -Filter *.txt |

Foreach-Object {

    If ($b -like $a)
    {
    Write-Host $b
    }

}

Любая помощь будет признательна.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

тд; др

$b = Get-ChildItem "E:\Export" -Filter ('*' + $a)

Или, используя расширение строки PowerShell (интерполяция):

$b = Get-ChildItem "E:\Export" -Filter "*$a"

-Filter значения параметров:

  • являются всегда [string] в типе

  • их специфический синтаксис является поставщиком

Поскольку вы имеете дело с файлами , именно поставщик FileSystem PS интерпретирует -Filter и ожидает шаблонное выражение в качестве аргумента, как принято базовым API Windows;подстановочное выражение неявно сопоставляется с файлом name .

Примечание:

  • Обычно - как в этом случае - такие подстановочные выражения работаютто же самое, что и собственные символы подстановки PowerShell , но первые имеют причуды для поддержки устаревших приложений, в то время как последние предлагают дополнительные функции.

  • Ни один стандартный поставщик не принимает блоки сценариев с произвольным кодом PowerShell в качестве -Filter аргументов, несмотря на их широкое распространение - но ошибочное - использование с поставщиком Active Directory - см. этот ответ .

Чтобы выполнить произвольную фильтрацию выходных объектов через блоки сценариев в коде PowerShell , передайте командлет Where-Object, как показано в ответе LotPings .

Однако, , если это возможно, использование -Filter всегда должно быть первым выбором , потому что он фильтрует в источнике , что означает, что поставщик возвращает alreотфильтрованные по ady результаты в PowerShell (в отличие от необходимости фильтровать результаты по факту в коде PowerShell), что может значительно ускорить операции .

0 голосов
/ 15 декабря 2018

$a IS уже строка.Вы не можете просто поместить блок скрипта в качестве фильтра.

$a = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
$b = Get-ChildItem "E:\Export" | Where-Object BaseName -like "*$a*"
$b

или

$b = Get-ChildItem "E:\Export\*$a*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...