Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Ответить
Настройки темы
PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Аватара для aVitaliy

Пользователь


Сообщения: 79
Благодарности: 7

Профиль | Отправить PM | Цитировать


Добрый день.
Помогите доработать скрипт.

Мне нужно было сгенерировать все варианты почтового адреса v.i.t.a.l.i.k.an.tr.ak.xi.mo.v@yandex.kz меняя в адресе местами точки и тире с помощью скрипта PowerShell и вывести результат в отдельный файл. Но в нем во первых в самом начале после "v" удаляется "." и самом конце удаляется буква "v".
То есть выводит скрип так:
vi.t.a.l-i-k.an.tr.ak-xi-mo.@yandex.kz
vi.t.a.l-i-k.an.tr.ak-xi-mo-@yandex.kz

Сам скрипт
Код: Выделить весь код
# Исходный почтовый адрес
$email = "v.i.t.a.l.i.k.an.tr.ak.xi.mo.v"
$parts = $email -split '\.|-' # Разделяем адрес на части, используя точку и тире как разделители

# Функция для генерации всех комбинаций точек и тире
function Get-Combinations {
    param (
        [int]$index,
        [string]$currentString,
        [string[]]$parts
    )
    if ($index -eq $parts.Length - 1) {
        return $currentString # Возвращаем строку, когда достигли конца
    } else {
        $result = @()
        $result += Get-Combinations -index ($index + 1) -currentString ($currentString + $parts[$index] + ".") -parts $parts # Добавляем точку
        $result += Get-Combinations -index ($index + 1) -currentString ($currentString + $parts[$index] + "-") -parts $parts # Добавляем тире
        return $result
    }
}

# Запускаем генерацию комбинаций, начиная со второго элемента массива parts
$combinations = Get-Combinations -index 1 -currentString $parts[0] -parts $parts

# Добавляем "@yandex.kz" к каждой комбинации и выводим в файл
$combinations | ForEach-Object { $_ + "@yandex.kz" } | Out-File "email_combinations.txt"

Write-Host "Варианты почтовых адресов сохранены в файл email_combinations.txt"

Отправлено: 18:48, 14-04-2025

 

Аватара для NickM

Ветеран


Contributor


Сообщения: 4591
Благодарности: 1096

Профиль | Отправить PM | Цитировать


Цитата aVitaliy:
Код: Выделить весь код
  return $currentString # Возвращаем строку, когда достигли конца
»
Код: Выделить весь код
return $currentString + $parts[$parts.Length-1] # Возвращаем строку, когда достигли конца
А, ещё же ., сейчас найдём и её, но скорее всего сам алгоритм не оптимальный, но сходу рабочий.
Код: Выделить весь код
# Запускаем генерацию комбинаций, начиная со второго элемента массива parts
$combinations = Get-Combinations -index 0 -currentString "" -parts $parts

Последний раз редактировалось NickM, 14-04-2025 в 19:25.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:15, 14-04-2025 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для aVitaliy

Пользователь


Сообщения: 79
Благодарности: 7

Профиль | Отправить PM | Цитировать


NickM, сработало спасибо.
Еще не понятно почему при выводе в файл удаляется точка после буквы "v"
Вместо
v.i.t.a.l.i.k.an.tr.ak.xi.mo.v@yandex.kz
Выводит слитно без точки после 2-й буквы
vi.t.a.l.i.k.an.tr.ak.xi.mo.v@yandex.kz

Отправлено: 19:24, 14-04-2025 | #3


Аватара для NickM

Ветеран


Contributor


Сообщения: 4591
Благодарности: 1096

Профиль | Отправить PM | Цитировать


Цитата aVitaliy:
Еще не понятно почему при выводе в файл удаляется точка после буквы "v" »
Добавил в ответ выше.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:25, 14-04-2025 | #4


Аватара для aVitaliy

Пользователь


Сообщения: 79
Благодарности: 7

Профиль | Отправить PM | Цитировать


NickM, Да только увидел, когда отправил.
Все работает теперь отлично.
Большое спасибо за помощь!

Отправлено: 19:26, 14-04-2025 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6660
Благодарности: 1549

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
0..4095 |% {
    $i = ([Convert]::ToString($_,2).PadLeft(12,'0') -replace '0','-' -replace '1','.' ).ToCharArray()
    "v"+$i[0]+"i"+$i[1]+"t"+$i[2]+"a"+$i[3]+"l"+$i[4]+"i"+$i[5]+"k"+$i[6]+"an"+$i[7]+"tr"+$i[8]+"ak"+$i[9]+"xi"+$i[10]+"mo"+$i[11]+"v@yandex.kz"
} > C:\temp\email_combinations.txt

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 14-04-2025 в 22:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:16, 14-04-2025 | #6


Deadooshka


Сообщения: 2555
Благодарности: 697

Профиль | Отправить PM | Цитировать


Идея с представлением набора символов в виде числа с соответствующим основанием и разрядностью неплоха. Максимальное число будет и количеством вариантов. В этом случае основание будет 2 (два символа), а разрядность = количество позиций этих символов в строке. Имеем 111111111111(двоичное) == 4095(десятичное). Но это всё можно вычислить и сделать "покрасивше".
Код: Выделить весь код
$user = "v.i.t.a.l.i.k.an.tr.ak.xi.mo.v"
$domain = "@yandex.kz"
$chars = '.', '-'
$regexp = '[{0}]' -f ([regex]::Escape($chars -join ''))
$parts = $user -split $regexp
# v{0}i{1}t{2}a{3}l{4}i{5}k{6}an{7}tr{8}ak{9}xi{10}mo{11}v
$format_str = [regex]::Replace($user, $regexp, {"{$([int]($global:c++))}"})
$max_variants = [Math]::Pow($chars.length, $parts.length - 1) - 1
0..$max_variants | % {
  $num = [Convert]::ToString($_, $chars.length).PadLeft($parts.length - 1, '0')
  0..($chars.length - 1) | % { $num = $num -replace "$_", $chars[$_] }
  ($format_str -f @($num.ToCharArray())) + $domain
} > 'email_combinations.txt'

Отправлено: 09:13, 15-04-2025 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1228
Благодарности: 513

Профиль | Отправить PM | Цитировать


Ну и ещё вариант:
Порылся в загашниках, нашел функцию перестановок символов...
permutationwithrepetition.ps1
Код: Выделить весь код
[cmdletbinding()]
Param (
	[string]$arr = '.-',
	[int]$count = 12
)
function perm ($values,$size,$offset){
	$count = $values.length
	$array = new-object object[] $size
	for ($i = 0; $i -lt $size; $i++) {
		$selector = [math]::truncate($offset / [math]::pow($count,$i)) % $count
		$array[$i] = $values[$selector]
	}
	return $array
}
function permutations ($values, $size) {
	$Ar = [math]::pow($values.length, $size)
	$a = new-object object[] $Ar
	for ($i = 0; $i -lt $Ar; $i++) {
		$a[$i] = perm $values $size $i
	}
	return $a
}

$charr = $arr.tochararray()

$out = permutations $charr $count

foreach ($item in $out){$item -join ' '}

$out.count
- запуск скрипта без параметров выведет все варианты перестановок символов точка-тире на 12 знакомест и количество вариантов.
Адаптировать под задачу несложно, если что...

-------
scio me nihil scire. Ѫ


Отправлено: 12:52, 15-04-2025 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Снегерировал нейросетью скрип но нужна доработка

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Медиа - Нужна помощь, игра проходит по системным требованиям но жутко лагает. (Payday 2) krytoupapa Microsoft Windows 8 и 8.1 10 05-08-2014 20:23
Принтер - SCX-4727fd скрип admz09 Прочее железо 12 23-10-2013 15:37
VBS/WSH/JS - доработка javascript Михаил11 Скриптовые языки администрирования Windows 1 08-04-2011 11:29
Нужна помощь,но нет логов-ничего не запускается! DIDIDIDIMA Лечение систем от вредоносных программ 12 18-12-2008 14:08
[решено] Скрип Горни Непонятные проблемы с Железом 17 25-09-2007 19:44




 
Переход