![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распределить ссылки |
|
CMD/BAT - [решено] Распределить ссылки
|
Новый участник Сообщения: 44 |
Здравствуйте, пытаюсь решить задачу но не знаю как.
На вход скрипта приходят URL трёх видов: https://site.com/user/anything/anything https://anything.site.com/anything-anything-12345678/anything https://anything.site.com/ Из второго только цифры (они всегда разные) Из третьего только субдомейн (в данном случае anything) это я знаю как сделать. После в каждом конкретном случае мне нужно сформировать URL и открыть в браузере. И тут у меня ступор. Каким образом решаются подобные задачи? Как сделать так что бы скрипт различал что это ссылка на пользователя, пост или субдомейн и запускал на исполнение соответствующую сабрутину? Заранее благодарю. |
|
Отправлено: 23:42, 10-09-2020 |
(*.*) Сообщения: 36574
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Fors1k:
|
|
------- Отправлено: 17:28, 11-09-2020 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Забанен Сообщения: 793
|
Что касается сценариев разбора, если количество сегментов в 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]} #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 } } 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 Альтернативное решение задачи, при условии, что site.com во всех трёх случаях постоянно, можно представить через объединение URI с "хирургией" через обобщённый делегат. Правда это уже более функциональный стиль, а здесь, на форуме, повсеместно императивщина. |
Последний раз редактировалось greg zakharov, 11-09-2020 в 19:09. Отправлено: 17:29, 11-09-2020 | #12 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата ateka:
$urls = 'https://anything.site.com/', 'https://site.com/user/anything/anything', 'https://anything.site.com/anything-anything-12345678/anything' $urls|%{ $url = [uri]$_ if ($url.segments.count -gt 1) { if ($url.segments[1] -match '-\d+($|/)') { $digits = $url.segments[1].split('-')[-1] -replace '/' } else {$user = $url.segments[1] -replace '/'} } else {$subdomen = $url.host.split('.')[0]} } $subdomen $user $digits |
|
------- Отправлено: 19:01, 11-09-2020 | #13 |
Забанен Сообщения: 793
|
YuS_2, см. выше
|
Отправлено: 19:15, 11-09-2020 | #14 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:29, 11-09-2020 | #15 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата greg zakharov:
![]() У тебя, кстати, скрипт ограничен версией powershell 7.0, что не есть хорошо, имхо... Fors1k, это малоинформативное условие, ибо если приходит одна из трех видов, то логично предположить, что следующим ходом приходит ещё одна ссылка из трех видов и т.д. Но вот последовательность поступления неясна, т.к. по такому условию допустим вариант, что подряд могут поступать ссылки одного типа неоднократно. Например, так: - это не противоречит условию... но это таки важно, ибо обработка ссылок необходима до заполнения трех переменных значением и уже из них формируется новая ссылка... если, конечно, я правильно понял ТС. |
|
------- Отправлено: 20:43, 11-09-2020 | #16 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Я так понимаю, что ссылки уже готовы для каждого случая, за исключением одного пробела.
Приходит одна ссылка, получаем переменную, открываем в браузере. И так может хоть сто раз прийти одна ссылка, но с разными переменными: Цитата:
[Uri[]]$u = ( 'https://site.com/user/anything/anything', 'https://anything.site.com/anything-anything-12345678/anything', 'https://anything.site.com/' )|Get-Random;cls $IFuser={ $user=$u.Segments[1].Trim("/") write-host "Ссылка на пользователя: $user" start "https://XYZ.com/$user/anything/anything" } $IFsub ={ $sub =$u.host.split('.')[0] write-host "Ссылка на субдомен: $sub" start "https://$sub.XYZ.com/" } $IFpost={ $post=$u.Segments[1].split(("/","-"))[-2] write-host "Ссылка на пост: $post" start "https://abc.XYZ.com/anything-anything-$post/anything" } switch($u.Segments.Count){1{&$ifsub}4{&$ifuser}3{&$ifpost}} |
|
Отправлено: 20:52, 11-09-2020 | #17 |
Забанен Сообщения: 793
|
Цитата YuS_2:
Fors1k, вы желаете вооружённого конфликта? Цитата Fors1k:
И что это за crapcode со свитчем? |
||
Последний раз редактировалось greg zakharov, 11-09-2020 в 21:19. Отправлено: 21:09, 11-09-2020 | #18 |
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата Fors1k:
Было: Цитата ateka:
Цитата greg zakharov:
Цитата greg zakharov:
![]() И с остальным согласен, но увы... без особой необходимости использования того самого тернарного оператора, получаем искусственное ограничение использования скрипта. Ну а что поделать, если у микрософта не хватило мозгов/желания/внимания, для реализации данного оператора с первых версий powershell? Видимо, исходили из того, что условный оператор его вполне заменяет... Цитата greg zakharov:
|
|||||
------- Отправлено: 21:24, 11-09-2020 | #19 |
Забанен Сообщения: 793
|
Цитата YuS_2:
|
|
Отправлено: 21:46, 11-09-2020 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
FreeBSD - Распределить процесс на 8 ядер | Dj_smart | Общий по FreeBSD | 0 | 03-10-2010 19:14 | |
Proxy/NAT - Как распределить трафик инета? | Evgen82 | Сетевые технологии | 14 | 15-03-2010 08:24 | |
Два провайдера - как распределить? | hunternew | Сетевые технологии | 6 | 07-02-2010 16:18 | |
UserGate - Распределить Безлимитку по сети | sadamchik | Сетевые технологии | 9 | 20-02-2009 23:00 | |
2 сетевых подключения... как распределить? | DARGO | Сетевые технологии | 1 | 29-05-2006 13:50 |
|