У вас правильная идея. Тэкс -Pattern
в powershell обычно можно вызывать для работы с регулярными выражениями. Если вы никогда не работали с регулярными выражениями, посмотрите это руководство для начинающих по использованию сопоставления с регулярным выражением . То, что вы, вероятно, хотите, это набор переменных, которые вы можете использовать для динамического выбора этих чувствительных ключевых слов.
Короткий и простой ответ заключается в том, что вы хотите использовать канал, чтобы отделить параметры для шаблона, и передать его в виде строки.
Select-String -Path e:\transfer_folder\*.* -pattern "Classified|Restricted"
Кроме того, вы можете подумать о том, чтобы сделать это на уровне файлов, а не просто импортировать все свои вещи в виде willynilly. Я хотел бы пойти на что-то вроде:
$files = @(Get-ChildItem -Path E:\transfer_folder\ -Filter "*.txt|*.etc").FullName
(Символ @
означает, что вы получаете выходные данные в виде массива. .FullName
означает, что вы выбираете только поле FullName из объекта, создаваемого командой.)
Затем вы можете обрабатывать каждый файл по отдельности, например:
Foreach ($file in $files) {
Write-Host "Processing $file"
echo (Select-String -Path $file -Pattern $pattern)
}
Одна из причин, по которой я люблю powershell, заключается в том, насколько легко выполнять эти типы операций сопоставления. Если вы покопаетесь в Regex, вы заметите, что можете представлять «ИЛИ» как «|». Таким образом, у вас есть два варианта сделать это логически:
- Просто тяжело выпиши
$pattern = "Classified|Forbidden|Death|Danger"
- Делать это динамически
Сценарии - это не необходимость делать что-то более одного раза, верно? Так что вы, вероятно, захотите инкапсулировать это в функцию или что-то в этом роде. Или, может быть, вы хотите получить свои слова из текстового файла? Вы можете быть как:
(может потребоваться некоторая настройка)
function Get-ForbiddenWords ([string[]]$words, [string]$folder) {
ForEach ($word in $words) {
$pattern += "$word|"
}
#remove trailing pipe
$pattern -replace ".$"
$files = @(Get-ChildItem -Path $folder -Filter "*.txt|*.etc").FullName
Foreach ($file in $files) {
Write-Host "Processing $file"
echo (Select-String -Path $file -Pattern $pattern)
}
}
Теперь вы можете поместить это в свой профиль powershell и вызвать его с помощью
Get-ForbiddenWords -words secret dangerous whatever -folder E:\transfer_folder\