Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Закладки » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11058 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KiloSub 28-11-2020 11:28
А где вы это нагуглили? Мне гугл выдал: «По запросу powershell.exe "Get-DiskImage """%ISO%""" | Get-Value | Select-Object {$_.DriveLetter}" ничего не найдено.»
 
Стало любопытно весь код посмотреть, для чего, такая помесь используется. А то тут, из пяти значимых строк в cmd, три строки вызов powershell`a…
 
дофига кавычек - это экранирование кавычек, в качестве экранирующего символа… тадам… кавычки, таким образом передаются кавычки. В просторечии "Ад кавычек" или  VVL99: "Так надо"

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 20:42 28-11-2020
KiloSub



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Где нагуглил, не помню, но явно не сам придумал, если я с ps не знаком :biggrin: С экранированием понял, просто за свой небогатый опыт еще не встречал такого утроения, вот и удивило.
 
Задача, значится, простая: монтировать ISO, копировать с него sources\install.wim и демонтировать. Весь код пользы думаю не принесет. Предлагается выбрать расположение образов, потом образ и происходит монтирование, копирование, демонтирование. Там еще не доделано, выкладываю как есть.
Подробнее...

Всего записей: 420 | Зарегистр. 30-05-2020 | Отправлено: 00:15 29-11-2020 | Исправлено: KiloSub, 03:10 30-11-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KiloSub
Понятно. Батник с меню, а PowerShell из за нужды, как программа mount
 
Добавлено:
Ну хотя бы заменить 3 вызова powershell на один, типа это:

Код:
echo Монтируется ^>^> %name% ^<^<
pushd "%SystemRoot%\System32\WindowsPowerShell\v1.0\"
powershell.exe "Mount-DiskImage ""%ISO%""" >nul
echo.
for /f "skip=3" %%I in ('powershell.exe "Get-DiskImage """%ISO%""" | Get-Volume | Select-Object {$_.DriveLetter}"') do set Disk=%%I
echo Копирование install.wim...
copy /y "%Disk%:\sources\install.wim" "%out%"
echo.
echo Образ демонтируется...
powershell.exe "Dismount-DiskImage ""%ISO%""" >nul

на это:

Код:
echo "Копируется install.wim из %Name% в %Out%"
pushd "%SystemRoot%\System32\WindowsPowerShell\v1.0\"
PowerShell.exe -NoProfile -Command "$DriveLetter = (Mount-DiskImage '%ISO%' | Get-Volume).DriveLetter; $Wim = ($DriveLetter + ':\sources\install.wim'); Copy -Force $Wim '%Out%'; [void] (Dismount-DiskImage '%ISO%')"
popd

Длинная строчка вызова powershell, но зато один вызов
 
 
Кстати, to all, а можно ли эту строчку вызова powershell в батнике, разбить?

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 13:53 29-11-2020 | Исправлено: iNNOKENTIY21, 13:53 29-11-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Или так:

Код:
PowerShell.exe -NoProfile -Command "Copy -Force ((Mount-DiskImage '%ISO%' | Get-Volume).DriveLetter + ':\sources\install.wim') '%Out%'; [void] (Dismount-DiskImage '%ISO%')"

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 16:01 29-11-2020
KiloSub



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21 Взял Ваш эргономичный второй вариант для опытов. Испытания идут успешно.
 
В батниках строку переносят, ^
но я как-то не ^
пользовался еще. Как перенести длинную строку?

Всего записей: 420 | Зарегистр. 30-05-2020 | Отправлено: 16:26 29-11-2020 | Исправлено: KiloSub, 17:07 29-11-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Наваял функцию для вывода меню, потестируйте кому не лень.

Код:
function Menu {
    <#
        .SYNOPSIS
        Вывод экранного меню с запросом выбора одного из элементов меню
        .DESCRIPTION
        Функция выводит меню на экран для выбора одного из элементов.
        Функция принимает в качестве параметра:
            массив элементов которые будут отображены в меню
            начальный индекс с которого будут начинаться элементы меню
            одно из именованных свойств элемента массива,
                если элемент массива содержит свойства,
                именно оно и будет отображаться в качестве элемента меню
            цвет индекса
            цвет текста
            строка запроса
            скрипт блок, которому будет передан выбранный объект
                и который будет запущен после выбора в меню
 
        Получить список возможных цветов: [System.ConsoleColor].GetEnumNames()
 
        AUTHOR        : iNNOKENTIY21
        .EXAMPLE
         Menu
        .EXAMPLE
        [scriptblock] $script = {
            Param ($o)
            "Вы выбрали $($o.FullName)"
        }
 
        $params = @{
                list = [IO.DirectoryInfo[]] (Get-ChildItem -Path "$env:SystemDrive\" -Directory)
                StartIndex = 10
                property = 'Name'
                indexColor = [System.ConsoleColor]::Yellow
                textColor = "DarkGreen"
                prompt = "`nВыберете директорию введя соответствующую цифру"
                ScriptBlock = $script
        }
 
        Clear-Host
 
        $title = "ДЕМО"
        $description = "Меню выбора директории"
 
        Write-Host $title
        Write-Host ([string]::new('=', $title.Length))
        Write-Host
        Write-Host $description
        Write-Host ([string]::new('—', $description.Length))
 
        Menu @params
    #>
 
    param (
        [array] $list = @("Апельсин", "Мандарин", "Персик", "Яблоко"),
        [int] $StartIndex = 1,
        [string] $property,
        [string] $indexColor = [System.ConsoleColor]::Cyan,
        [string] $textColor = [System.ConsoleColor]::DarkGreen,
        [string] $prompt = "`nВведите цифру",
        [scriptblock] $ScriptBlock = { Param ($o); "Вы выбрали $($o)" }
    )
     
    $EndIndex = $StartIndex + $list.Count
 
    if ($property) {
        $str = { "$($list[$i-$StartIndex].$property)" }
    } else {
        $str = { "$($list[$i-$StartIndex])" }
    }
 
    for ($i = $StartIndex; $i -lt $EndIndex; $i++) {
        Write-Host " $i. " -ForegroundColor $indexColor -NoNewline
        Write-Host (& $str) -ForegroundColor $textColor
    }
 
    do { [int] $Index = Read-Host -Prompt $prompt }
    while (($Index -lt $StartIndex) -or ($Index -ge $EndIndex))
 
    $ScriptBlock.Invoke($list[$Index - $StartIndex])
}

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 15:47 30-11-2020
Dimosik_parovozik

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день,  
Подскажите как решить следующие задачу на BAT файле:
Нужно пиговать адреса IP по очереди (в теле BAT, не с отдельного файла) и при нахождении первого который ответил использовать в команде подключения сетевого диска. Следующие IP адреса уже соответсвенно обрабатывать не надо.
 например:
ping 10.10.10.1 (не доступен)
ping 10.10.10.2 (не доступен)
ping 10.10.10.3 (доступен)
NET USE Z: \\10.10.10.3\folder
 
Заранее спасибо!

Всего записей: 111 | Зарегистр. 30-10-2006 | Отправлено: 12:30 08-12-2020 | Исправлено: Dimosik_parovozik, 12:50 08-12-2020
ipmanyak



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimosik_parovozik Условие задачи некорректно. Тебе 3 адреса только пингануть или подсеть? Если подсеть, то какой интервал?  
 
 
Добавлено:
Dimosik_parovozik

Код:
 
ECHO OFF                                                                  
setlocal enabledelayedexpansion                                          
rem ping subnet 192.168.1.1 - 192.168.1.254                                                                          
FOR /L %%i IN (1,1,254) DO (                                              
  ping -n 2 192.168.1.%%i | find "TTL=" >NUL                              
  IF !ERRORLEVEL! neq 0 ( echo %DATE%-%TIME% - ping 192.168.1.%%i HREN    
     )  ELSE (echo %DATE%-%TIME% - ping 192.168.1.%%i NEHREN                
             NET USE Z: \\%%192.168.1.%%i\folder
             GOTO KONEC   )                      
                          )    
:KONEC                                            
exit 0        
 
                                                           
 


----------
В сортире лучше быть юзером, чем админом...

Всего записей: 11724 | Зарегистр. 10-12-2003 | Отправлено: 13:06 08-12-2020 | Исправлено: ipmanyak, 13:32 08-12-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
    $Capabilities = @(
        "App.StepsRecorder*",
        "App.Support.QuickAssist*",
        "Media.WindowsMediaPlayer*",
        "Microsoft.Windows.MSPaint*",
        "Microsoft.Windows.WordPad*",
        "Print.Fax.Scan*"
    )
 
Get-WindowsCapability -Online | Where-Object -FilterScript {$_.Name -cmatch ($Capabilities -join "|")} | Add-WindowsCapability -Online
 

 
Ошибка вылезает

Код:
 
Add-WindowsCapability : Элемент не найден.
строка:25 знак:109
+ ... -cmatch ($WindowsFeatures -join "|")} | Add-WindowsCapability -Online
+                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ( [Add-WindowsCapability], COMException
    + FullyQualifiedErrorId : Microsoft.Dism.Commands.AddWindowsCapabilityCommand
 

 
Сие тоже не помогло: https://winitpro.ru/index.php/2018/10/04/ustanovka-rsat-v-windows-10-iz-powershell/

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 14:32 08-12-2020 | Исправлено: farag, 14:34 08-12-2020
Dimosik_parovozik

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ipmanyak
 
 
Добрый день, особенно улыбноло "HREN"  
Спасибо за решение, если есть возможность именно список не диапазон,  т.к. адреса могут быть из разных сетей. Но за этот вариант тоже
Заранее спасибо!

Всего записей: 111 | Зарегистр. 30-10-2006 | Отправлено: 15:51 08-12-2020 | Исправлено: Dimosik_parovozik, 15:54 08-12-2020
ipmanyak



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimosik_parovozik  Ты опять ставишь  неполные условия. Если список, то он должен быть в чем то, например в файле, но ты писал, что в файле тебе не надо, тогда где  твой список должен быть, в каком виде? Сколько IP в списке?
 
Если в теле, то тебе придется  после  пинга  каждого IP   прописывать  поправленный блок
 
  IF !ERRORLEVEL! neq 0 ( echo %DATE%-%TIME% - ping 192.168.1.%%i HREN    
     )  ELSE (echo %DATE%-%TIME% - ping 192.168.1.%%i NEHREN                
             NET USE Z: \\%%192.168.1.%%i\folder
             GOTO KONEC   )    
 
а это уже программизм, то есть  изврат.
 
И почему файл не устраивает?
 
Если хочешь загнать ипы в массив, тогда читай пример  работы с массивами в батнике  и рихтуй сам под себя.
 
https://habr.com/ru/post/75951/  
http://forum.script-coding.com/viewtopic.php?id=6572
https://www.celitel.info/klad/nhelp/helpbat.php?dcmd=usf_array
 


----------
В сортире лучше быть юзером, чем админом...

Всего записей: 11724 | Зарегистр. 10-12-2003 | Отправлено: 15:57 08-12-2020 | Исправлено: ipmanyak, 16:13 08-12-2020
YuS 2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag

Цитата:
Ошибка вылезает

А сделай-ка так:

Код:
$Capabilities = @(
    "App.StepsRecorder*",
    "Media.WindowsMediaPlayer*",
    "Microsoft.Windows.MSPaint*",
    "Microsoft.Windows.WordPad*",
    "Print.Fax.Scan*"
)
 
$Capabilities -join "|"

 
потом загляни сюда
Сравни описание регэкспов с тем, что у тебя получилось выше... но это полбеды, они сработают, да и исправить легко:

Код:
$Capabilities = @(
    "App\.StepsRecorder.*",
    "Media\.WindowsMediaPlayer.*",
    "Microsoft\.Windows\.MSPaint.*",
    "Microsoft\.Windows\.WordPad.*",
    "Print\.Fax\.Scan.*"
)
 

 
Далее:
Просто посмотри, что получаешь на выходе:

Код:
Get-WindowsCapability -Online | Where-Object -FilterScript {$_.Name -cmatch ($Capabilities -join "|")}

если пусто, то ошибка закономерна. Добавь условный блок и всё заработает...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:15 08-12-2020
Dimosik_parovozik

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ipmanyak
Адресов всего 5, просто они в разных сетях, их адреса изначачально известны. Виноват, в условии ввёл в заблуждение, надо было написать:
ping 10.0.1.6
ping 10.0.2.5
ping 10.0.3.6  
и т.д.  
Файл не хотел, т.к. просто в одном БАТнике удобней.  
Есть ещё вопрос по этой строчке NET USE Z: \\%%192.168.1.%%i\folder точно нужны %% перед адресом?  
И ещё одна странность, адрес IP (по условию TTL) находит, но не подключает сетевой диск.
И даже если руками пропишу после этого сценария NET USE Z: \\192.168.1.2\folder /PERSISTENT:NO /User:User Password не подключет сетевой диск: System error 67 has occurred. The network name cannot be found
если создам отдельный bat или введу с командной строки подключает без вопросов
в названии папки, были знаки !_ После переименнованияпаки начало подключаться.

Всего записей: 111 | Зарегистр. 30-10-2006 | Отправлено: 18:49 08-12-2020 | Исправлено: Dimosik_parovozik, 19:17 08-12-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Все проще: код полностью рабочий, просто Win 10 обязательно надо перезагружаться после отключения (включения) FOD. Без перезагрузки никак.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 19:02 08-12-2020
YuS 2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag

Цитата:
надо перезагружаться после отключения (включения) FOD

ошибка, которую выдавал powershell, связана с отсутствием элементов, FOD - дело другое...
А вообще:

Цитата:
As of Windows 10 version 1709, you cannot use Windows Server Update Services (WSUS) to host Features on Demand (FOD) and language packs for Windows 10 clients. Instead, you can enforce a Group Policy setting that tells the clients to download them directly from Windows Update. You can also host FOD and language packs on a network share, but starting with Windows 10 version 1809, FOD and language packs can only be installed from Windows Update.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:47 08-12-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Все в курсе, но дело чисто в перезагрузке)

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 23:39 08-12-2020
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
starting with Windows 10 version 1809, FOD and language packs can only be installed from Windows Update.
Сдаётся мне - неправда это...
Не далее как на прошлой неделе скачал с M$ VLSC
Код:
a4d56a07e4f25ecd9d6b5f8c88abb174 *SW_DVD9_NTRL_Win_10_2004_64Bit_MultiLang_FOD_1_X22-21311.ISO
9d312f5f0be7efa2c46f46ac169b286c *SW_DVD9_NTRL_Win_10_2004_64Bit_MultiLang_FOD_2_X22-21313.ISO
 
FOD для 20H1/20H2, если кто не понял. И языковые пакеты там тоже лежат.
Если это всё можно устанавливать только с выньапдейта - то нет никакого смысла класть на VLSC исошники...


----------
http://www.imho.ws

Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 01:21 09-12-2020
YuS 2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO  Цитата

Цитата:
Сдаётся мне - неправда это...

Может и так... микрософт же, там давно уже правая рука не знает, что делает левая (наплодили зоопарк версий, что сами не могут разобраться какая из них, что умеет, а что нет)... а цитата из первоисточника, от производителя.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 07:49 09-12-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
cls
function WindowsCapabilities
{
    param
    (
        [Parameter(
            Mandatory = $true,
            ParameterSetName = "Enable"
        )]
        [switch]
        $Enable,
 
        [Parameter(
            Mandatory = $true,
            ParameterSetName = "Disable"
        )]
        [switch]
        $Disable
    )
 
    switch ($PSCmdlet.ParameterSetName)
    {
        "Enable"
        {
            try
            {
                (Invoke-WebRequest -Uri https://www.google.com -UseBasicParsing -DisableKeepAlive -Method Head).StatusDescription
            }
            catch [System.Net.WebException]
            {
                Write-Warning -Message "NoInternetConnection"
                return
            }
 
             "Enabling..."
        }
        "Disable"
        {
 
            "Disable"
        }
    }
}
WindowsCapabilities -Enable
 
Get-Date
 

 
Надо, чтобы при отсутствии выхода в интернет, функция выводила предупреждение (try/catch) и не пыталась дальше ничего выполнять, а шла дальше. "return" же тут правильно ставить?

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 15:41 10-12-2020 | Исправлено: farag, 15:57 10-12-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag

Цитата:
Надо, чтобы при отсутствии выхода в интернет, функция выводила предупреждение (try/catch) и не пыталась дальше ничего выполнять, а шла дальше. "return" же тут правильно ставить?  

Вполне.
Но можно и без. Если "Enabling..." поместить выше, в блок try, после Invoke-WebRequest
 
Тут с блоком try ещё нюанс, он среагирует на останавливающую ошибку, если ошибка не останавливающая или -ErrorAction к примеру SilentlyContinue, то не среагирует и в блок catch не попадет.
 
Пример (предполагается что у вас нет диска z: и будет ошибка):

Код:
try {dir z: -ErrorAction Continue} catch {"error !!!"}


Код:
try {dir z: -ErrorAction Stop} catch {"error !!!"}

 

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 18:48 10-12-2020 | Исправлено: iNNOKENTIY21, 19:01 10-12-2020
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Закладки » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru