На PowerShell. На русском. Создай GUI в отдельном файле для вызова функционала Create-SecurityGroups из файла Create-SecurityGroupsFromPath_0.ps1, который приведен ниже. Возможно, в Create-SecurityGroupsFromPath_0.ps1 нужно дописать в начало param( и вызов функции Create-SecurityGroups?


function Get-AAdminCredentials {
    # Проверяем, существует ли переменная $aadminCredentials и содержит ли она значения
    if ($global:aadminCredentials) {
        return $global:aadminCredentials
    }
    else {
        $currentUsername = $env:USERNAME

        # Проверяем, начинается ли имя пользователя с "wadmin"
        if ($currentUsername -like 'wadmin*') {
            # Заменяем начало "wadmin" на "aadmin"
            $adminUsername = $currentUsername -replace '^wadmin', 'aadmin'
        }
        else {
            # Добавляем "aadmin" в начало имени пользователя
            $adminUsername = "aadmin$currentUsername"
        }

        # Запрашиваем учетные данные с измененным именем пользователя
        $global:aadminCredentials = Get-Credential -UserName smzmi\$adminUsername -Message "Введите:"

        return $global:aadminCredentials
    }
}

function Convert-ToTransliteration {
    param (
        [string]$inputString
    )

    # Обрезаем пустые пробелы по краям
    $inputString = $inputString.Trim()

    # Определяем таблицу соответствия
    $russianChars = "а","А","б","Б","в","В","г","Г","д","Д","е","Е","ё","Ё","ж","Ж","з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н","о","О","п","П","р","Р","с","С","т","Т","у","У","ф","Ф","х","Х","ц","Ц","ч","Ч","ш","Ш","щ","Щ","ъ","Ъ","ы","Ы","ь","Ь","э","Э","ю","Ю","я","Я"          
    $latinChars = "a","A","b","B","v","V","g","G","d","D","e","E","io","IO","zh","ZH","z","Z","i","I","y","I","k","K","l","L","m","M","n","N","o","O","p","P","r","R","s","S","t","T","u","U","f","F","h","H","cz","CZ","ch","CH","sh","SH","shh","SHH","yy","YY","y","Y","yh","YH","eh","EH","iu","IU","ia","IA"
    $transliteratedString = ""

    # Перебираем слово по буквам
    for ($i = 0; $i -lt $inputString.Length; $i++) { 
        $index = -1

        # Находим позицию заменяемой буквы в массиве
        do {
            $index++
        }
        until (($inputString[$i] -ceq $russianChars[$index]) -or ($index -eq 100))

        # Дополняем строку конвертированного текста, заменяя русскую букву на латинскую
        $transliteratedString += ($inputString[$i] -creplace $russianChars[$index], $latinChars[$index])
    }
    
    return $transliteratedString
}

function Generate-NewSecurityGroupName {
    param( 
        [Parameter(Mandatory = $true)]
        [string]$pathString,

        [Parameter(Mandatory = $true)]
        [ValidateSet("R", "M")]
        [string]$groupSuffix
    )    
        # Пример:
        # $pathString = "\\smzmi-win2\Teams\IS\Projects\0003_RUSSIA FRP SMZ MANUFACTURING APPLICATIONS PROJECT 2007\MES TMS design"
        # $pathString = "\\eursmz-hub21\teams\PCS"
        $transliteratedPath = Convert-ToTransliteration $pathString
        [System.Collections.ArrayList]$pathSegments = $transliteratedPath.Split("\",[System.StringSplitOptions]::RemoveEmptyEntries)    
        $pathSegments.RemoveAt(0)
        $pathSegments.RemoveAt(0)    
        if($pathSegments.Count -eq 1) {
            [string]$groupName = ""
        } else {
            [string]$groupName = "$($pathSegments[0])_"
        }
        for ($i=2; $i -lt $pathSegments.Count; $i++ ){
            $groupName += "$($i)_"
        }
        $groupName += $pathSegments[-1]
        $groupName += " "
        $groupName += $groupSuffix
        $groupName = $groupName -replace '[;><"\\#+,]', ''   
        return $groupName    
}

function Create-SecurityGroups {
    <#
    .SYNOPSIS
    Создает две глобальные группы безопасности в указанном OU и назначает пользователя ответственным за них.

    .DESCRIPTION
    Функция принимает путь к сетевому каталогу и логин пользователя. Она создает две глобальные группы безопасности в 
    OU=Groups1,OU=TEST,DC=smzmi,DC=local, имена которых формируются с помощью функции Generate-NewSecurityGroupName. 
    Одна группа будет заканчиваться на " R", а другая на " M". Пользователь, указанный в параметре, назначается 
    в качестве управляемого (ManagedBy) для обеих групп. В поле Description групп записывается путь к сетевому каталогу.
    .PARAMETER NetworkPath
    Путь к сетевому сетевому каталогу.

    .PARAMETER UserLogin
    Логин пользователя, который будет назначен в качестве управляемого для групп.

    .EXAMPLE
    Create-SecurityGroups -NetworkPath "\\smzmi-win2\Teams\IS\Projects" -UserLogin "jdoe"
    #>
    
    param(
        [Parameter(Mandatory = $true, HelpMessage = "Путь к сетевому каталогу")]
        [string]$NetworkPath,

        [Parameter(Mandatory = $true, HelpMessage = "Логин пользователя")]
        [string]$UserLogin
    )
    try {
        # Получение DistinguishedName пользователя
        $user = Get-ADUser -Identity $UserLogin -Properties DistinguishedName -ErrorAction Stop
    }
    catch {
        Write-Error "Пользователь с логином '$UserLogin' не найден. Проверьте правильность ввода."
        return
    }

    # Формирование имен групп с суффиксами "R" и "M"
    $groupNameR = Generate-NewSecurityGroupName -pathString $NetworkPath -groupSuffix "R"
    $groupNameM = Generate-NewSecurityGroupName -pathString $NetworkPath -groupSuffix "M"

    # Определение пути к OU, где будут созданы группы
    $organizationalUnitPath = "OU=Groups1,OU=TEST,DC=smzmi,DC=local"

    # Параметры общие для обеих групп
    $groupParameters = @{
        Name           = ""
        SamAccountName = ""
        GroupScope     = "Global"
        GroupCategory  = "Security"
        Path           = $organizationalUnitPath
        Description    = $NetworkPath
        ManagedBy      = $user.DistinguishedName
        Credential     = (Get-AAdminCredentials)
    }

    # Создание первой группы (заканчивается на "R")
    $groupParameters.Name = $groupNameR    
    try {
        New-ADGroup @groupParameters -ErrorAction Stop
        Write-Output "Группа '$groupNameR' успешно создана."
    }
    catch {
        Write-Error "Не удалось создать группу '$groupNameR'. Ошибка: $_"
    }

    # Создание второй группы (заканчивается на "M")
    $groupParameters.Name = $groupNameM    
    try {
        New-ADGroup @groupParameters -ErrorAction Stop
        Write-Output "Группа '$groupNameM' успешно создана."
    }
    catch {
        Write-Error "Не удалось создать группу '$groupNameM'. Ошибка: $_"
    }
}