PowerShell. Советы, методы, итд.

Discussion in 'Windows' started by NaX[no]rT, 11 Jul 2008.

  1. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    В ирк Slip задал вопрос: - Как будет выглядеть преобразование символов в противоположный регистр? Его реализация этой задачи оказалась короче на Perl.Perl выиграл :)

    Perl:
    Powershell:

    Вывод:
    пРИвЕТ
    dEeRRq

    Вывод:
    ; FOR 16-BIT APP SUPPORT
    [FONTS]
    [EXTENSIONS]
    [MCI EXTENSIONS]
    [FILES]
    [mAIL]
    mapi=1
    cmcdllname32=MAPI32.DLL
    cmc=1
    mapix=1
    mapixver=1.0.0.1
    olemESSAGING=1
    [mci eXTENSIONS.bak]
    M2V=mpegvIDEO
    MOD=mpegvIDEO

    А вот ,что удобнее использовать решать уже вам =)
     
    #21 SpangeBoB, 12 Jun 2010
    Last edited: 12 Jun 2010
    1 person likes this.
  2. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Кстати на Перле вышло в итоге ещё короче:
    Code:
    perl -e "$_ = shift, tr/A-Za-z/a-zA-Z/, print;" QwErTy
    Но таки хочется уменьшить ещё:)
     
  3. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    2Slip
    powershell отлично работает с .NET. Портировав перловый регэксп - выйдет короче)
     
    _________________________
  4. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    А на сколько уменьшится если на вход подается 3 языка,например:Украинский,Русский,Английский?
     
    1 person likes this.
  5. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Небольшая заметка,по поводу как получить свой внешний IP,в данном случае воспользуемся сервисом http://www.myip.ru.Регексп,который используется не совсем корректен если парсить ip,но так как ресурс проверяет валидность сам,то этого достаточно.



    PHP:
    function Get-ExternalIp
    {
        
    $webcl = New-Object System.Net.WebClient
        
    try {
            
    $webcl.DownloadString('http://www.myip.ru/get_ip.php?loc=') -match "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" Out-Null
            
    "Ваш IP-адрес: {0}" -f $matches[0]
            }
        catch 
            {
            
    "IP-адрес не удалось получить."
            
    }
    }
    Ваш IP_адрес: 127.0.0.1

    Маленькое дополнение с GUI.Для этого мы воспользуемся PowershellPack,который содержит свыше 1000 всевозможно полезных функций и скриптов.Скачать PowerShellPack и более подробно ознакомиться с его функционалом можно http://code.msdn.microsoft.com/PowerShellPack

    [​IMG]

    Uploaded with ImageShack.us
     
    #25 SpangeBoB, 17 Jun 2010
    Last edited: 17 Jun 2010
  6. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Немного расширим предыдущий пример и добавим больше полезной информации.

    PHP:
    Function Get-GeoIp($Location="")
    {
        
    $webcl = New-Object System.Net.WebClient
        
    try { 
            
    $struct "" select "IP адрес",Страна,Регион,Город,Широта,Долгота,"Операционная система",Провайдер
            $geop 
    $webcl.DownloadString("http://ip-whois.net/ip_geo.php?ip=$Location")
            
    $struct.'IP адрес' = $($geop -match "IP адрес: (.+)<br>" Out-Null;$matches[1])
            
    $struct.Страна = $($geop -match "Страна: (.+)<br>" Out-Null;$matches[1])
            
    $struct.Регион = $($geop -match "Регион: (.+)<br>" Out-Null;$matches[1])
            
    $struct.Город,$struct.Широта = $($geop -match "Город: (.+)<br>" Out-Null;$matches[1]  -split '<br>.+: ')
            
    $struct.Долгота = $($geop -match "Долгота: (.+)<br>" Out-Null;$matches[1])
            
    $struct.'Операционная система' = (Get-WmiObject Win32_OperatingSystem).Name -split '\|' Select-Object -First 1
            $struct
    .Провайдер = $($geop -match ">Провайдер: <.+prov=\b(.+)\b'><u>" Out-Null;$matches[1])
            
    $struct
            
    }
        catch  
            { 
            
    "Информацию получить не удалось." 
            

    }
    Вывод:
    PHP:
    IP адрес             127.0.0.1
    Страна               
    Russian Federation
    Регион               
    Test
    Город                
    Test
    Широта               
    40
    Долгота              
    40
    Операционная система 
    Microsoft Windows 7 Ultimate
    Провайдер            
    Provider
    Get-GeoIp -Location 87.250.251.3
    Вывод:
    PHP:
    IP адрес             87.250.251.3
    Страна               
    Russian Federation
    Регион               
    Москва
    Город                
    Москва
    Широта               
    55.755787
    Долгота              
    37.617634
    Операционная система 
    Microsoft Windows 7 Ultimate
    Провайдер            
    YANDEX LLC
     
    #26 SpangeBoB, 28 Jun 2010
    Last edited: 28 Jun 2010
  7. cadetkmv

    cadetkmv New Member

    Joined:
    11 Oct 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    У меня сервер примерно с полгода отлично пашет, без серьёзных замечаний, вот гляньте (ссылка на сайт <a href="http://sartelekom.ru/arenda-servera-europa.html">тут</a>)
     
  8. bufon089

    bufon089 New Member

    Joined:
    24 May 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    благодарчик пацики. вы гении
     
  9. karencho777

    karencho777 New Member

    Joined:
    20 Jan 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте употребляю скрипт вот он :
    Code:
    $EmailFrom = “[email protected]”
    $EmailTo = “[email protected]”
    $Subject = “The subject of your email”
    $Body = “What do you want your email to say”
    $SMTPServer = “smtp.yandex.ru”
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
    $SMTPClient.EnableSsl = $true
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“user”, “pass”);
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
    установлен виндовс 7 ,хочу послать мейл через персональный комп пишет такую ошибку :

    Исключение при вызове "Send" с "4" аргументами: "Сбой при отправке сообщения электронной почты."
    строка:1 знак:17
    + $SMTPClient.Send <<<< ($EmailFrom, $EmailTo, $Subject, $Body)
    + CategoryInfo : NotSpecified: ([​IMG] [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

    попробовал другие версии скриптов посылки почты ,но всегда выводит такую ошибку,попробовал я этот скрипт на ноутбуке ,сообщение прекрасно послалось можете подсказать почему так?
     
    #29 karencho777, 9 Apr 2015
    Last edited by a moderator: 5 May 2015
  10. frank

    frank Member

    Joined:
    8 May 2015
    Messages:
    200
    Likes Received:
    96
    Reputations:
    28
    Доброго дня.
    На ноуте какая винда стоит? На стационаре какая версия powera? Сравни с версией на ноуте, скорее всего, версия PoSH на стационаре просто не понимает
     
  11. frank

    frank Member

    Joined:
    8 May 2015
    Messages:
    200
    Likes Received:
    96
    Reputations:
    28
    Как то тема то "подзадохла", а на дворе уже 5.0 версия, и возможностей в них все больше... Хотелось бы в качестве примера показать скорее бесполезный в работе скрипт, но зато не плохо показывающий как posh может работать с формами, с сетью и взаимодействовать с тем же экселем... В самом скрипте более чем подробные комментарии, так как делался фактически под заказ, и ниже еще чуть моих пояснений. Писался для использования в браузерной игре травиан.

    Code:
    #Подключаемся к странице входа, урл указан для 1-го сервера, в случае использования
    #на других серверах исправить значение $url на необходимый сервер. То же касается файла excel, в котором сохранены
    #координаты, в случае если файл находит по другому пути или имеет другое имя,
    #необходимо исправить значение переменной $file.
    $url = "http://ts1.travian.ru/"
    $file = "C:\script\farm.xlsx"
    #Добавляем сборку для работы с графическим интерфейсом
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    $excel = New-Object -ComObject Excel.Application
    #объявляем то что показывать окно екселя нам не нужно, только подгрузить в память
    $excel.Visible = $false
    $workbook = $excel.Workbooks.Open($file)
    $sheet = $workbook.Worksheets.Item(1)
    #Определяем кол-во заполненных строк
    $row_count = $sheet.UsedRange.Rows.Count
    #загоняем в массив координаты
    $row = 1
    while ($row -le $row_count)
    {
    $full_coord +=@( $sheet.Cells.Item($row,1).Value())
    $row = $row + 1
    }
    $Excel.Quit()
    #раскладываем полученные координаты на X и Y координаты, и сохраняем в два массива.
    $t = 0
    while ($t -lt $full_coord.Count)
    {
    $x_coord += @([regex]::Matches($full_coord[$t], "(?<=\(.).*\d(?=\|)"))
    $y_coord += @([regex]::Matches($full_coord[$t], "(?<=\|).*\d(?=)"))
    $t = $t + 1
    }
    #Решил что хранить логин и пароль в открытом виде в самом скрипте как то не кошерно,
    #поэтому скрипт каждый раз запрашивает пароль при работе. Можно хранить в условно
    #зашифрованном виде в реестре или файле, но строка легко расшифровывается одной командой,
    #так что думайте сами.
    #Если будет необходимо, пишите, добавлю возможность хранить пару логин\пароль
    $Cred = Get-Credential -Message 'Подключение к траве'
    $Password = ($Cred.getnetworkcredential().Password)
    $Login = ($Cred.UserName -replace "^.*\\")
    #Получаем поля формы Login для заполнения
    $Img = Invoke-WebRequest $url -SessionVariable session
    $Img.Forms["Login"].Fields | Out-Null
    #Заполняем форму логином и паролем, формируем POST запрос, передаем на сервер и запоминаем сессию
    $Img.Forms["Login"].Fields["name"] = "$Login"
    $Img.Forms["Login"].Fields["password"] = "$Password"
    $login = Invoke-WebRequest -Method Post -Uri ($url + $Img.Forms["Login"].Action) -Body $Img.Forms["Login"].Fields -WebSession $session
    #переходиим на страницу деревни
    $Img1 = Invoke-WebRequest ($url + "dorf1.php") -WebSession $session
    #грабим страницу и выцыпляем оттуда токен (посылается вместе с запросами на какие-то действия,
    #дополнительный аутентификатор), получаем список деревень и их идентификатор в базе данных игры
    $img1_temp = $Img1.Scripts.innerHtml -cmatch "window.ajaxToken"
    $img2_temp =[regex]::Matches($Img1.links.outerHTML, "(?<=\<DIV\sclass=name>).*?(?=\</DIV>)")
    $img3_temp =[regex]::Matches($Img1.links.href, "(?<=\?newdid=).*?(?=\&amp;)")
    $i = 0
    do
    {
    $der += @{$img2_temp.Value[$i] = $img3_temp.Value[$i]}
    $i = $i+1
    }
    while ($i -lt $img2_temp.Count)
    $tok_mass = [regex]::Matches($img1_temp, "(?<=\s').*?(?=';)")
    $token = $tok_mass.Value
    #выводим окно со списком деревень для выбора необходимой деревни
    $der_form = New-Object System.Windows.Forms.Form
    $der_form.Text ='Список деревень'
    $der_form.StartPosition  = "CenterScreen"
    $der_form.AutoSize = $true
    $der_form.TopMost = $true
    $der_form.Width = 470
    $der_form.Height = 220
    $header = New-Object System.Windows.Forms.Label
    $header.Text = "Выберите из списка деревню в которой необходимо создать farm лист"
    $header.Location  = New-Object System.Drawing.Point(20,10)
    $header.AutoSize = $true
    $der_form.Controls.Add($header)
    $dropdown_list = New-Object System.Windows.Forms.ComboBox
    $dropdown_list.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
    foreach($List in $img2_temp)
    {
    $dropdown_list.Items.Add($List) | Out-Null
    }
    $dropdown_list.Location = New-Object System.Drawing.Point(140,40)
    $der_form.Controls.Add($dropdown_list)
    $button = New-Object System.Windows.Forms.Button
    $button.Text = 'Ok'
    $button.Location = New-Object System.Drawing.Point(160,80)
    $button.Add_Click({$selected_der.Text = $dropdown_list.SelectedItem.ToString(); $der_form.Close()})
    $der_form.Controls.Add($button)
    $selected_der = New-Object System.Windows.Forms.Label
    $der_form.Controls.Add($selected_der)
    $der_form.Add_Shown({$der_form.Activate()})
    [void]$der_form.ShowDialog()
    # в итоге получили уникальный идентификатор выбранной деревни в БД игры
    $id_der = $der[$selected_der.Text]
    #переходим в пункт сбора, вкладка избранные цели, выбранной деревни
    $url1 = $url+'build.php?newdid='+$id_der+'&id=39&tt=99&gid=16'
    $search_farmlist = Invoke-WebRequest $url1 -WebSession $session
    #грабим страницу и получаем имена списков и их id в БД игры
    $farmlist_name = [regex]::Matches($search_farmlist.Content, '(?<=\<div\sclass=\"listTitleText\">\n...........................\s).*?(?=\s*\<img)')
    $farmlist_id = [regex]::Matches($search_farmlist.Content, '(?<=\<input\stype=\"hidden\"\sname=\"lid\"\svalue=\").*?(?=\")')
    $n = 0
    do
    {
    $farmlist_heshTable += @{$farmlist_name.Value[$n] = $farmlist_id.Value[$n]}
    $n = $n + 1
    }
    while ($n -lt $farmlist_name.Count)
    # создаем форму с списком доступных фарм листов и выбором из этого списка необходимого.
    $farmlist_form = New-Object System.Windows.Forms.Form
    $farmlist_form.Text ='Список фарм листов'
    $farmlist_form.StartPosition  = "CenterScreen"
    $farmlist_form.AutoSize = $true
    $farmlist_form.TopMost = $true
    $farmlist_form.Width = 470
    $farmlist_form.Height = 220
    $farmlist_header = New-Object System.Windows.Forms.Label
    $farmlist_header.Text = "Выберите из списка лист в которой необходимо внести деревни"
    $farmlist_header.Location  = New-Object System.Drawing.Point(20,10)
    $farmlist_header.AutoSize = $true
    $farmlist_form.Controls.Add($farmlist_header)
    $dropdown_farmlist = New-Object System.Windows.Forms.ComboBox
    $dropdown_farmlist.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
    foreach($FarmList in $farmlist_name)
    {
    $dropdown_farmlist.Items.Add($FarmList) | Out-Null
    }
    $dropdown_farmlist.Location = New-Object System.Drawing.Point(140,40)
    $farmlist_form.Controls.Add($dropdown_farmlist)
    $button_farmlist = New-Object System.Windows.Forms.Button
    $button_farmlist.Text = 'Ok'
    $button_farmlist.Location = New-Object System.Drawing.Point(160,80)
    $button_farmlist.Add_Click({$selected_farmlist.Text = $dropdown_farmlist.SelectedItem.ToString(); $farmlist_form.Close()})
    $farmlist_form.Controls.Add($button_farmlist)
    $selected_farmlist = New-Object System.Windows.Forms.Label
    $farmlist_form.Controls.Add($selected_farmlist)
    $farmlist_form.Add_Shown({$farmlist_form.Activate()})
    [void]$farmlist_form.ShowDialog()
    #в итоге получаем ид в БД игры необходимого фарм-листа
    $id_farmlist = $farmlist_heshTable[$selected_farmlist.Text]
    # выводим окно с выбором типов войск и их количетсва для внесения в список
    $troops_form = New-Object System.Windows.Forms.Form
    $troops_form.Text ='Выбор войск и кол-во для фарма'
    $troops_form.StartPosition  = "CenterScreen"
    $troops_form.AutoSize = $true
    $troops_form.TopMost = $true
    $troops_form.Width = 400
    $troops_form.Height = 430
    $troops = "Легионер,Дубинщик,Галльская Фаланга","Преторианец,Копьеносец,Мечник","Империанец,Топорщик,Следопыт","Конный разведчик,Скаут,Тевтатский гром","Конница императора,Паладин,Друид-всадник","Конница Цезаря,Тевтонская конница,Эдуйская конница","Таран","Огненная катапульта,Катапульта","Сенатор,Вождь,Лидер","Поселенец"
    $textLabel1 = New-Object “System.Windows.Forms.Label”
    $textLabel1.Left = 150
    $textLabel1.Top = 15
    $textLabel1.Width = 400
    $textLabel1.Text = $troops[0]
    $troops_form.Controls.Add($textLabel1)
    $textLabel2 = New-Object “System.Windows.Forms.Label”
    $textLabel2.Left = 150
    $textLabel2.Top = 45
    $textLabel2.Width = 400
    $textLabel2.Text = $troops[1]
    $troops_form.Controls.Add($textLabel2)
    $textLabel3 = New-Object “System.Windows.Forms.Label”
    $textLabel3.Left = 150
    $textLabel3.Top = 75
    $textLabel3.Width = 400
    $textLabel3.Text = $troops[2]
    $troops_form.Controls.Add($textLabel3)
    $textLabel4 = New-Object “System.Windows.Forms.Label”
    $textLabel4.Left = 150
    $textLabel4.Top = 105
    $textLabel4.Width = 400
    $textLabel4.Text = $troops[3]
    $troops_form.Controls.Add($textLabel4)
    $textLabel5 = New-Object “System.Windows.Forms.Label”
    $textLabel5.Left = 150
    $textLabel5.Top = 135
    $textLabel5.Width = 400
    $textLabel5.Text = $troops[4]
    $troops_form.Controls.Add($textLabel5)
    $textLabel6 = New-Object “System.Windows.Forms.Label”
    $textLabel6.Left = 150
    $textLabel6.Top = 165
    $textLabel6.Width = 400
    $textLabel6.Text = $troops[5]
    $troops_form.Controls.Add($textLabel6)
    $textLabel7 = New-Object “System.Windows.Forms.Label”
    $textLabel7.Left = 150
    $textLabel7.Top = 195
    $textLabel7.Width = 400
    $textLabel7.Text = $troops[6]
    $troops_form.Controls.Add($textLabel7)
    $textLabel8 = New-Object “System.Windows.Forms.Label”
    $textLabel8.Left = 150
    $textLabel8.Top = 225
    $textLabel8.Width = 400
    $textLabel8.Text = $troops[7]
    $troops_form.Controls.Add($textLabel8)
    $textLabel9 = New-Object “System.Windows.Forms.Label”
    $textLabel9.Left = 150
    $textLabel9.Top = 255
    $textLabel9.Width = 400
    $textLabel9.Text = $troops[8]
    $troops_form.Controls.Add($textLabel9)
    $textLabel10 = New-Object “System.Windows.Forms.Label”
    $textLabel10.Left = 150
    $textLabel10.Top = 285
    $textLabel10.Width = 400
    $textLabel10.Text = $troops[9]
    $troops_form.Controls.Add($textLabel10)
    $textbox1 = New-Object “System.Windows.Forms.TextBox”
    $textbox1.Left = 25
    $textbox1.Top = 15
    $textbox1.Width = 50
    $textbox1.Text = '0'
    $troops_form.Controls.Add($textbox1)
    $textbox2 = New-Object “System.Windows.Forms.TextBox”
    $textbox2.Left = 25
    $textbox2.Top = 45
    $textbox2.Width = 50
    $textbox2.Text = '0'
    $troops_form.Controls.Add($textbox2)
    $textbox3 = New-Object “System.Windows.Forms.TextBox”
    $textbox3.Left = 25
    $textbox3.Top = 75
    $textbox3.Width = 50
    $textbox3.Text = '0'
    $troops_form.Controls.Add($textbox3)
    $textbox4 = New-Object “System.Windows.Forms.TextBox”
    $textbox4.Left = 25
    $textbox4.Top = 105
    $textbox4.Width = 50
    $textbox4.Text = '0'
    $troops_form.Controls.Add($textbox4)
    $textbox5 = New-Object “System.Windows.Forms.TextBox”
    $textbox5.Left = 25
    $textbox5.Top = 135
    $textbox5.Width = 50
    $textbox5.Text = '0'
    $troops_form.Controls.Add($textbox5)
    $textbox6 = New-Object “System.Windows.Forms.TextBox”
    $textbox6.Left = 25
    $textbox6.Top = 165
    $textbox6.Width = 50
    $textbox6.Text = '0'
    $troops_form.Controls.Add($textbox6)
    $textbox7 = New-Object “System.Windows.Forms.TextBox”
    $textbox7.Left = 25
    $textbox7.Top = 195
    $textbox7.Width = 50
    $textbox7.Text = '0'
    $troops_form.Controls.Add($textbox7)
    $textbox8 = New-Object “System.Windows.Forms.TextBox”
    $textbox8.Left = 25
    $textbox8.Top = 225
    $textbox8.Width = 50
    $textbox8.Text = '0'
    $troops_form.Controls.Add($textbox8)
    $textbox9 = New-Object “System.Windows.Forms.TextBox”
    $textbox9.Left = 25
    $textbox9.Top = 255
    $textbox9.Width = 50
    $textbox9.Text = '0'
    $troops_form.Controls.Add($textbox9)
    $textbox10 = New-Object “System.Windows.Forms.TextBox”
    $textbox10.Left = 25
    $textbox10.Top = 285
    $textbox10.Width = 50
    $textbox10.Text = '0'
    $troops_form.Controls.Add($textbox10)
    $button_troops = New-Object System.Windows.Forms.Button
    $button_troops.Text = 'Ok'
    $button_troops.Left = 190
    $button_troops.Top = 350
    $button_troops.Add_Click({$troops_form.Close()})
    $troops_form.Controls.Add($button_troops)
    $troops_form.Add_Shown({$troops_form.Activate()})
    [void]$troops_form.ShowDialog()
    #готовим и отправляем запросы на заполнение таблицы
    $per = 0
    while ($per -lt $x_coord.Count)
    {
    $body = 'cmd=raidList&action=ActionAddSlot&listId='+$id_farmlist+'&x='+$x_coord[$per]+'&y='+$y_coord[$per]+'&t1='+$textbox1.Text+'&t2='+$textbox2.Text+'&t3='+$textbox3.Text+'&t4='+$textbox4.Text+'&t5='+$textbox5.Text+'&t6='+$textbox6.Text+'&t7='+$textbox7.Text+'&t8='+$textbox8.Text+'&t9='+$textbox9.Text+'&t10='+$textbox10.Text+'&ajaxToken='+$token
    $url2 = $url+'ajax.php?cmd=raidList'
    Invoke-WebRequest -Method Post -Uri $url2 -Body $body -WebSession $session | out-null
    $per = $per + 1
    }
    # выводим окно завершения работы
    $end_form = New-Object System.Windows.Forms.Form
    $end_form.Text ='Готово'
    $end_form.StartPosition  = "CenterScreen"
    $end_form.AutoSize = $true
    $end_form.TopMost = $true
    $end_form.Width = 410
    $end_form.Height = 200
    
    $textLabel11 = New-Object “System.Windows.Forms.Label”
    $textLabel11.Left = 15
    $textLabel11.Top = 15
    $textLabel11.Width = 400
    $textLabel11.Text = 'Цели в список '+$selected_farmlist.Text+' внесены в количестве: '+$x_coord.Count
    $end_form.Controls.Add($textLabel11)
    
    $button_end = New-Object System.Windows.Forms.Button
    $button_end.Text = 'Ok'
    $button_end.Left = 150
    $button_end.Top = 150
    $button_end.Add_Click({$end_form.Close()})
    $end_form.Controls.Add($button_end)
    $end_form.Add_Shown({$end_form.Activate()})
    [void]$end_form.ShowDialog()
    
    Remove-Variable textlabel11,button_end,end_form,url2,body,per,button_troops,textbox1,textbox2,textbox3,textbox4,textbox5,textbox6,textbox7,textbox8,textbox9,textbox10,troops,textlabel1,textlabel2,textlabel3,textlabel4,textlabel5,textlabel6,textlabel7,textlabel8,textlabel9,textlabel10,troops_form,y_coord,x_coord,t,full_coord,row,row_count,sheet,workbook,excel,file,id_farmlist,selected_farmlist,button_farmlist,FarmList,dropdown_farmlist,farmlist_form,farmlist_header,farmlist_heshTable,n,farmlist_id,farmlist_name,search_farmlist,session,url1,id_der,selected_der,button,dropdown_list,tok_mass,der_form,header,img1_temp,img1,i,der,img2_temp,img3_temp,url,img,token,login,password
    
    Особенность раз:
    Поленился и не прикрутил диалоговые окна для указания файла с координатами деревни и для указания url сайта.Поэтому скрипт перед запуском нужно подправлять. В качестве переменной url указываем интересующий сервер, в моем примере это первый, не забываем про закрывающий слеш. Руками прописываем путь к файлу с данными и его именем. можно этот файл обозвать так же как у меня в примере и поместить по тому же пути.

    Особенность два:
    Источником данных является excel файл. список не активных деревень, который я взял с ресурса http://www.gettertools.com и просто скопировал в файл. Сам список может быть взят с любого ресурса, главное, что бы координаты деревень были в 1-ом столбце.

    Особенность три:
    После запуска скрипт «молчит» секунд 15-20, зависит от компьютера. В это время обрабатывается excel файл.

    Особенность четыре:
    Список, в который нужно внести деревни, необходимо создать заранее в игре.

    Теперь о работе, как писал выше, после запуска обрабатывается файл, за тем уже появляются диалоговые окна. В первом окне, необходимо указать логин и пароль для подключения к игре.
    Во втором, выбрать из выпадающего списка название деревни, в список которой надо добавить.
    В третьем, название самого списка в этой деревне.
    Четвертое окно, спрашивает какие войска и сколько нужно добавить в этот список. Спрашивает один раз и применяет ко всему списку.
    Как логическое завершение, скрипт начинает формировать запросы к серверу и вносить деревни из файла в список фарма.
    По завершению работы, появится окно с сообщением.
    На тестовом прогоне, при добавление 95 деревень, на все у меня ушло не более 3-х минут.
     
  12. grimnir

    grimnir Members of Antichat

    Joined:
    23 Apr 2012
    Messages:
    1,114
    Likes Received:
    830
    Reputations:
    231
    _________________________
  13. Tirakal

    Tirakal New Member

    Joined:
    4 Sep 2016
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Для чего команда " ftp root " ?
     
  14. SinisterSoul

    SinisterSoul New Member

    Joined:
    12 Mar 2014
    Messages:
    16
    Likes Received:
    1
    Reputations:
    0
    Что делать, если Windows не запускает скрипты PowerShell по двойному клику?
    Запускать любые скрипты двойным кликом в «Проводнике» не совсем безопасно, но чертовски удобно, особенно если часто с ними работаешь. Однако на новой машине ты можешь столкнуться с тем, что эта возможность не работает. Посмотрим, что же может помешать скриптам запускаться.

    Скорее всего, при попытке запуска ты видишь такую ошибку: «Невозможно загрузить файл C:Usersusernametest1.ps1» (File C:UsersC:Usersusernametest1.ps1 cannot be loaded because running scripts is disabled on this system).

    Первым делом проверим настройки политики. Для этого откроем редактор PowerShell и выполним команду Get-ExecutionPolicy. В ответ ты получишь один из вариантов:

    • Restricted — запрет запуска сценариев;
    • AllSigned — могут быть запущены только сценарии, подписанные доверенным издателем. Будет запрашивать подтверждение перед каждым выполнением;
    • RemoteSigned — разрешено выполнять созданные и скачанные сценарии, подписанные доверенным издателем;
    • Unrestricted — самый опасный вариант, никаких ограничений. Все скрипты могут быть запущены.
    Чтобы выполнять сценарии, понизим бдительность системы и установим RemoteSigned:

    Code:
    Set-ExecutionPolicy RemoteSigned
    Попробуй снова запустить скрипт — теперь должно получиться.

    Если на компьютере несколько пользователей и предоставлять такие права всем не хочется, можно выдать их только одному. Для этого используй команду


    Code:
    Set-ExecutionPolicy RemoteSigned -Scope currentuser
    Здесь есть еще интересный нюанс. Если ты скачал скрипт из интернета и совершенно точно хочешь его запустить, то его потребуется сначала разблокировать. Для этого зайди в свойства файла и ищи внизу кнопку «Разблокировать».

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