Как использовать регулярные выражения в powershell - PullRequest
0 голосов
/ 09 мая 2018

Мне нужно перебрать все семейства сайтов и все дочерние сайты и распечатать только дочерние сайты с определенным шаблоном:

/sites/clientcode/oppcode6digits

Каждое семейство сайтов клиентов имеет много дочерних сайтов, но мне нужны только те, URL которых находится в конце 6-значного кода.

У меня пока что есть, но не работает:

$SPWebApp = Get-SPWebApplication "https://mylocalurl.com"

foreach ($SPSite in $SPWebApp.Sites) {
    if ($SPSite -ne $null -and $SPSite.Url -notmatch "billing" -and $SPSite.Url -notmatch "administrativedocuments" -and $SPSite.Url -notmatch "documentation" -and $SPSite.Url -notmatch "help" -and $SPSite.Url -notmatch "marketing" -and $SPSite.Url -and $SPSite.Url -notmatch "search" -and $SPSite.Url -ne $rootDMS  ) {
        foreach ($web in $SPSite.AllWebs) {
            $regex = ‘\b[0-9]{6}\b’  
            $patrn = "https://mylocalurl/sites/*/$regex"

            Write-Host $web.Url | select-string -Pattern $patrn
        }
    }
    $SPSite.Dispose()
}

Ответы [ 2 ]

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

Вы можете использовать предложенное мной регулярное выражение вместе с вашим исправлением кода:

foreach ($web in $SPSite.AllWebs) {
    $patrn ='^https://mylocalurl/sites/(?:[^/]*/)*\d{6}$'
    if( $web.Url –match  $patrn) {
        Write-Host $web.Url
    }
}

регулярное выражение

^https://mylocalurl/sites/(?:[^/]*/)*\d{6}$

См. Демоверсию regex онлайн .

информация

  • ^ - начало строки
  • https://mylocalurl/sites/ - буквальная подстрока
  • (?:[^/]*/)* - 0+ вхождений 0+ символов, отличных от / ([^/]*), за которыми следует /
  • \d{6} - 6 цифр
  • $ - конец строки.
0 голосов
/ 09 мая 2018

Я изменил последнюю строку на:

  if( $web.Url –match  $patrn)
                {
                    Write-Host $web.Url
                }
...