Ответ на оригинальный вопрос.
Код:

[Uri[]]$u = 'https://site.com/user/anything/anything','https://anything.site.com/anything-anything-12345678/anything','https://anything.site.com/'
"https://$(($$ = $u[2].Host).Substring(0, $$.IndexOf('.'))).site.com/$(-join$u[0,1].ForEach{$_.Segments[1].Split('-')[-1]})"
Что касается сценариев разбора, если количество сегментов в URL всегда фиксировано:
Код:

[Uri[]]$u = 'https://site.com/user/anything/anything','https://anything.site.com/anything-anything-12345678/anything','https://anything.site.com'
# массив сценариев (скрипт-блоков), что нужно сделать в том или ином случае
$scenario = {'subdomaincheck'},{},{'postcheck'},{'usercheck'}
$u.ForEach{$scenario[$_.Segments.Count - 1]}
Если же количество сегментов URL не является постоянной величиной, но при этом сохраняются позиции указанных опорных точек (и их формат), можно нарисовать примерно следующую функцию:
Код:

#requires -version 7
function Get-UrlType {
[CmdletBinding(DefaultParameterSetName='Url')]
param(
[Parameter(Mandatory, ParameterSetName='Url', Position=0)]
[ValidateNotNullOrEmpty()]
[Uri[]]$Url,
[Parameter(Mandatory, ParameterSetName='Raw', Position=0)]
[ValidateNotNullOrEmpty()]
[String[]]$Raw
)
end {
$scope = $PSCmdlet.ParameterSetName -eq 'Raw' ? [Uri[]]$Raw : $Url
$scope.ForEach{
$_.Host.Split('.').Count -eq 2 ? $(
'User: {0}' -f $_.Segments[1].Trim('/')
) : $(
$_.Segments.Count -eq 1 ? $(
'Subdomain: {0}' -f $_.Host.Substring(0, $_.Host.IndexOf('.'))
) : $(
'Code: {0}' -f $_.Segments[1].Split([Char[]]@('-', '/'))[-2]
)
)
} # foreach
}
}
Вне зависимости от того, передаётся ли в функцию массив URI или просто строк, функция будет обрабатывать поступающие на вход данные как URI. В цикле для каждого элемента массива, передаваемого функции, выстраивается следующая логика:
1) если хост назначения состоит из двух элементов (вида site.com), следовательно в данном URL ищем юзера
2) в противном случае, если количество сегментов - единица, искать субдомен
3) иначе вытащить из второго сегмента URL цифровое значение
Таким образом:
Код:

$u = 'https://site.com/user/anything/anything',
'https://anything.site.com/anything-anything-12345678/anything',
'https://anything.site.com'
Get-UrlType $u
Выдаст:
Код:

User: user
Code: 12345678
Subdomain: anything
Альтернативное решение задачи, при условии, что
site.com во всех трёх случаях постоянно, можно представить через объединение URI с "хирургией" через обобщённый делегат. Правда это уже более функциональный стиль, а здесь, на форуме, повсеместно императивщина.