В ирк 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 А вот ,что удобнее использовать решать уже вам =)
Кстати на Перле вышло в итоге ещё короче: Code: perl -e "$_ = shift, tr/A-Za-z/a-zA-Z/, print;" QwErTy Но таки хочется уменьшить ещё
Небольшая заметка,по поводу как получить свой внешний 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 Uploaded with ImageShack.us
Немного расширим предыдущий пример и добавим больше полезной информации. 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
У меня сервер примерно с полгода отлично пашет, без серьёзных замечаний, вот гляньте (ссылка на сайт <a href="http://sartelekom.ru/arenda-servera-europa.html">тут</a>)
Здравствуйте употребляю скрипт вот он : 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: ( [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException попробовал другие версии скриптов посылки почты ,но всегда выводит такую ошибку,попробовал я этот скрипт на ноутбуке ,сообщение прекрасно послалось можете подсказать почему так?
Доброго дня. На ноуте какая винда стоит? На стационаре какая версия powera? Сравни с версией на ноуте, скорее всего, версия PoSH на стационаре просто не понимает
Как то тема то "подзадохла", а на дворе уже 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=).*?(?=\&)") $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-х минут.
Что делать, если Windows не запускает скрипты PowerShell по двойному клику? Запускать любые скрипты двойным кликом в «Проводнике» не совсем безопасно, но чертовски удобно, особенно если часто с ними работаешь. Однако на новой машине ты можешь столкнуться с тем, что эта возможность не работает. Посмотрим, что же может помешать скриптам запускаться. Скорее всего, при попытке запуска ты видишь такую ошибку: «Невозможно загрузить файл C:Usersusernametest1.ps1» (File C:UsersC:Usersusernametest1.ps1 cannot be loaded because running scripts is disabled on this system). https://s8.hostingkartinok.com/uploads/images/2017/05/b2943ba2aaedf30793ab307808b216d5.jpg Первым делом проверим настройки политики. Для этого откроем редактор PowerShell и выполним команду Get-ExecutionPolicy. В ответ ты получишь один из вариантов: Restricted — запрет запуска сценариев; AllSigned — могут быть запущены только сценарии, подписанные доверенным издателем. Будет запрашивать подтверждение перед каждым выполнением; RemoteSigned — разрешено выполнять созданные и скачанные сценарии, подписанные доверенным издателем; Unrestricted — самый опасный вариант, никаких ограничений. Все скрипты могут быть запущены. Чтобы выполнять сценарии, понизим бдительность системы и установим RemoteSigned: Code: Set-ExecutionPolicy RemoteSigned Попробуй снова запустить скрипт — теперь должно получиться. Если на компьютере несколько пользователей и предоставлять такие права всем не хочется, можно выдать их только одному. Для этого используй команду Code: Set-ExecutionPolicy RemoteSigned -Scope currentuser Здесь есть еще интересный нюанс. Если ты скачал скрипт из интернета и совершенно точно хочешь его запустить, то его потребуется сначала разблокировать. Для этого зайди в свойства файла и ищи внизу кнопку «Разблокировать». https://s8.hostingkartinok.com/uploads/images/2017/05/732ac2e9c63407d5aadeb9b8b4844dbc.png Ну и на всякий случай напомню еще раз: когда снимешь все ограничения на запуск скриптов, внимательно смотри, что именно ты запускаешь, особенно если скачал файл из интернета.