2017-02-21 12 views
1

Я знаю, что это, вероятно, просто или, возможно, даже невозможно, но мое знание Powershell является новичком, и мне было поручено создать поиск в нашем файле серверы для имен файлов с «NDA» в них. Тем не менее, созданный мной сценарий возвращает все имена файлов с включенными NDA и NDA (то есть возвращает имена файлов, такие как понедельник, календарь, фундаментальные и т. Д.). Людям, желающим получить эти результаты, хотелось бы, чтобы эти результаты встроенного слова были отфильтрованы, если это было возможно.Как я могу искать с помощью Powershell для специального слова, но исключать имена со словом, встроенным в имя

Get-ChildItem -path u:\ -include *nda* -exclude *.tmp,*.lnk,*.xls,*.url,*.gif,*.bmp,*.msg,*.xlsx,*.kfg,*.sol,*.ics,*.srs,*.rtf,*.asd,*.dotx,*.xml -file -recurse 

Я также пробовал это, но он также возвращает все результаты.

Get-ChildItem u:\ -recurse -include *nda | Where-Object {$_.Name -match "nda"} 

Я попытался добавить подстановочные знаки [], чтобы попытаться устранить лишние результаты, но мне не повезло. Любая помощь приветствуется.

+1

'-match' найдет встроенный NDA также. Попробуйте 'где BaseName -eq 'NDA'' вместо этого. Если вы используете '-like', вы можете добавить подстановочные знаки, то есть« где BaseName-like »* -NDA», если ваши нужные имена включают определенные шаблоны. 'BaseName' - это имя файла без расширения. – TToni

+0

Все ли имена файлов, которые вы хотите вернуть, отформатированы так же, как «filename-NDA.ext»? – AKJoe

+0

Команда, ищущая имена файлов, пытается провести аудит. Поэтому они ищут что-либо с определенными ключевыми словами внутри или встроенными, но мне нужно исключить ложные срабатывания. Делает это намного сложнее. –

ответ

0

Не удаляйте, если список исключений будет достаточным. Я добавил -RegEx, выбрав nda в начале/конце/разделенном символом non alphabet-char. Список исключений можно прочитать из файла.

$Exclude = @" 
monday 
calendar 
fundamental 
"@ 

Get-ChildItem -Path u:\ -recurse -include *nda* | 
    Where-Object {$_.BaseName -match "(^nda|[^a-z]nda[^a-z]|nda$)"}| 
    Where-Object {$Exclude -notcontains $_.BaseName } 
0

Просто сделай это:

Get-ChildItem "u:\" -recurse -file | Where BaseName -eq 'nda' 
+0

Спасибо, это то, что мне было нужно –

 Смежные вопросы

  • Нет связанных вопросов^_^