Как получить регулярное выражение точное совпадение с переменной на Powershell - PullRequest
0 голосов
/ 27 апреля 2018

Еще один, который, кажется, не имеет никакого решения уже в сети.

У меня есть файл со всеми томами, и у меня есть переменная, в которую пользователь записывает том, такой как «C» или «D». Проблема здесь в том, что если я напишу «D», мне понадобится каждая строка, которая имеет D.

У меня есть этот код:

$unit=Read-Host -Prompt 'Introduce a volume name'
echo "Searching for the volume..."
Get-Volume > volumes.txt
get-content volumes.txt | select-string -pattern "$unit" > exist2.txt
gc exist2.txt | where{$_ -ne ""} > exist.txt

$disk=(Get-Content exist.txt)
echo $disk

Таким образом, регулярное выражение должно быть в "select-string -pattern", и это то, что я пробовал до сих пор:

get-content volumes.txt | select-string -pattern "/(^|\W)$unit($|\W)/i"

get-content volumes.txt | select-string -pattern "^[$unit]$"

get-content volumes.txt | select-string -pattern '^$unit,'

get-content volumes.txt | select-string -pattern "\$unit\b"

Все они ничего не возвращают, и я хочу вернуть строку D. Например, если я напишу "C", это то, что будет возвращено

C                                     NTFS           Fixed     Healthy      OK

Большое спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

Вот почему PowerShell - это объектно-ориентированная оболочка, поэтому вам не нужно делать это для очистки строк. PowerShell способ сделать это:

Get-Volume | where-object { $_.DriveLetter -eq $unit -or $_.FriendlyName -eq $unit }

Вывод на экран содержит строку заголовка, но его нет в содержимом, команда возвращает объекты, и если вы ничего не делаете с ними, PowerShell форматирует их в таблицу для отображения на экране.

Если вы хотите увидеть его без заголовков

Get-Volume | 
    where-object { $_.DriveLetter -eq $unit -or $_.FriendlyName -eq $unit } | 
    format-Table -HideTableHeaders

но если вы собираетесь больше работать с ним в сценарии, не конвертируйте его в текст, это только усложнит работу с ним позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...