Извлечь текст в новый столбец с помощью регулярных выражений - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь написать сценарий исправления системы автоматизации отчетов. Моя первая попытка использовала Get-Hotfix, но он сообщает только номер статьи в КБ и не содержит описания обновления.

Я читал об этом, но в его собственном столбце нет номера статьи в КБ.

Мой сценарий выглядит следующим образом:

Get-WmiObject -cl Win32_ReliabilityRecords | 
    select @{LABEL = "date";EXPRESSION = {$_.ConvertToDateTime($_.TimeGenerated)}},
        @{LABEL = "KBArticle"; EXPRESSION = {(-match[regex]::'\(([^\ []*)\)/g').groups[1].value($_.productname)}},
        pscomputername, productname

Когда я запускаю его, столбец KBArticle остается пустым.

Я попытался проверить одну строку, и она работает. Нашел его в другом сообщении переполнения стека.

$productname = "Update for Windows Server 2012 R2 (KB3118401)"
$r = [regex] "\(([^\[]*)\)"
$match = $r.Match("$productname")
$text = $match.Groups[1].Value

Я также попробовал регулярное выражение в некоторых онлайн-тестерах регулярных выражений, и оно извлекает текст, который я хочу. Моя проблема в том, что я не могу заставить его работать в моем сценарии.

1 Ответ

0 голосов
/ 07 мая 2018

Код ниже извлекает те, которые вы хотите. Но вам может понадобиться присмотреться к своему регулярному выражению. Он будет извлекать только статьи базы знаний (и другие материалы с круглыми скобками вокруг них) с круглыми скобками вокруг них. Я также удалил "/ g" из вашего первого регулярного выражения.

Get-WmiObject -Class win32_reliabilityRecords | Select-Object `
@{LABEL = "date"; EXPRESSION = {$_.ConvertToDateTime($_.timegenerated)}}, `
@{LABEL = "KBArticle"; EXPRESSION = {[regex]::Match($_.productname, '\(([^\ []*)\)').captures.groups[1].value}}, `
    pscomputername, productname

Некоторое чтение о регулярных выражениях, powershell и группах https://mcpmag.com/articles/2015/09/30/regex-groups-with-powershell.aspx

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