hekkaaa

hekkaaa

Пикабушник
95 рейтинг 6 подписчиков 4 подписки 3 поста 0 в горячем
Награды:
5 лет на Пикабу

Меню на Powershell для установки ПО.

Hello Wordl!


Не так давно я влился в новый для себя коллектив и резко поменял направление в IT для себя.

По этому теперь я осваиваю powershell как первый свой "язык программирования" (на счет этого у меня немного другое мнение)


Я уже написал несколько скриптов на работе или поправлял работы коллег, но дома довожу их до ума.

Первый мой скрипт которым я занялся и продолжаю доводить до ума это банальная установка ПО, им я и хочу поделиться. Просто поделиться и все =) (ну и совета получить).


Скрипт сам по себе тривиален:  Start-Process -FilePath .......

Но я реши заморочится с интерфейсом установки.


Рабочий скрипт на работе выглядел как отдельное вплывающее окно в котором нужно ввести цифру и скрипт пошел.

Я же захотел "чекбоксов" и "радиобаттонов" и тут у меня начались проблемы растянувшиеся на неделю.


Проблема 1: Не совсем представлял что хотел получить в итоге.

Проблема 2: Мало опыта. Мало информации (из за неумения адекватно искать).

Проблема 3: Получил не то что хотел и начал все по новой (хождение по мукам).


После получения информации как прикрутить "радиобаттон" начались проблемы.

Я не знал какой командой прикрутить выходные данные к кнопке "OK", бы скрипт запускал функцию установки Putty_x32 и Putty_x64 (при выборе нужного естественно).


Пытался извратиться следующей командой:

$Rbutton1.Controls.Add_click({putty32})


function putty32 {
copy-item $......

start-process...}


Было еще множество глупых попыток объявить глобальную переменную $wow = 0

и в add_click() уже добавить значение 1 или 2, а потом из полученной переменной с помощью if elseif делать логику.


Выглядело это извращение примерно так:

Меню на Powershell для установки ПО. Powershell, Windows, Программирование, Code, Длиннопост

Я даже пытался логику прописывать в сам .Add.click({if (...)}), что даже на каком то этапе работало, но не давало выбора.


Это было явно не то чего я хотел, но как бы я не старался получалось как на картинке "превозмогая трудности".


После долгих мучений я нашел несколько примеров как НУЖНО делать.

Все оказалось проще некуда, просто нужно знать или примерно помнить эти команды.


Итогом получилось:

Меню на Powershell для установки ПО. Powershell, Windows, Программирование, Code, Длиннопост

Супер! - Подумал я и быстро поискав информацию написал простенькую логику к кнопкам "Ok" и "Cancel".

Меню на Powershell для установки ПО. Powershell, Windows, Программирование, Code, Длиннопост

Ну собственно и обделался тут же.


Код работал. Необходимые функции запускал, но при нажатии кнопки "Cancel" или закрытия окна, запускался скрипт установки.

1.5 дня я потратил что бы понять где я горе программист очередной раз сел в лужу и нашел.

Я просто не прописал логику нормально с отсылкой на кнопку "Ok".


Готовый код:


$downloadfile_x32 = "D:\Distr\Putty\putty-0.73-installer.msi"
$downloadfile_x64 = "D:\Distr\Putty\putty-64bit-0.73-installer.msi"
$SettingProgramm_x32 = "C:\Temp\putty-0.73-installer.msi"
$SettingProgramm_x64 = "C:\Temp\putty-64bit-0.73-installer.msi"
$Share = "C:\Temp"
#=====Начало меню=====#
Add-Type -Assembly system.windows.forms # класс для графического GUI
$window_form = New-Object System.Windows.Forms.Form #создание самого окна
$window_form.Text = "Установка Putty" #заголовок окна
$window_form.Width = 350 #ширина
$window_form.Height = 180 #высота
$window_form.AutoScale = $true #автоматическое растягивание по тексту
$pLabel = New-Object System.windows.forms.Label
$pLabel.Location = New-Object System.Drawing.Point (8,10) #отступ слева #Отступ сверху
$pLabel.Size = New-Object System.Drawing.Size (140, 15)
$pLabel.Text = "Версия для установки : "
$window_form.Controls.Add($pLabel)
$RadioButton1 = New-Object System.Windows.Forms.RadioButton
$RadioButton1.Location = '20,40' #отступ слева/отступ сверху
$RadioButton1.size = '100,20' #длина и ширина отображаемой надписи
$RadioButton1.Checked = $true
$RadioButton1.Text = "Putty_x32"
$window_form.Controls.Add($RadioButton1)
$RadioButton2 = New-Object System.Windows.Forms.RadioButton
$RadioButton2.Location = '140,40'
$RadioButton2.size = '100,20'
$RadioButton2.Checked = $false
$RadioButton2.Text = "Putty_x64"
$window_form.Controls.Add($RadioButton2)
#кнопка OK.
$OKButton = new-object System.Windows.Forms.Button
$OKButton.Location = '30,90'
$OKButton.Size = '70,25'
$OKButton.Text = 'OK'
$OKButton.DialogResult=[System.Windows.Forms.DialogResult]::OK
$window_form.Controls.Add($OKButton)
#Кнопка закрытия меню.
$CancelButton = new-object System.Windows.Forms.Button
$CancelButton.Location = new-object System.Drawing.Size(110,90)
$CancelButton.Size = new-object System.Drawing.Size(70,25)
$CancelButton.Text = "Cancel"
$CancelButton.Add_Click({$window_form.Close()})
$window_form.Controls.Add($CancelButton)
$buttondialoge = $window_form.ShowDialog()

#=====Конец меню=====#

#----------Логика----------#
if ($buttondialoge -eq "OK") {
if ($RadioButton1.Checked)
{putty32}
elseif ($RadioButton2.Checked)
{putty64}
else
{exit}
}
#----------конец логики----------#

###установка x32###
function putty32 {
Copy-Item -Path $downloadfile_x32 -Destination $Share -Force
"Ready..."
Start-Process -FilePath $SettingProgramm_x32
}
###Установка x64###
function putty64 {
Copy-Item -Path $downloadfile_x64 -Destination $Share -Force
"Ready..."
Start-Process -FilePath $SettingProgramm_x64
}

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

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

Пару раз попытавшись провернуть это по мануалу через cmd у меня как то не вышло. Буду пробовать еще.


Так же есть недочет в удалении файла из TEMP стандартный Remove-item отказывается удалять даже через -Force

-Recurce в данном случае не имеет смысла подключать, иначе можно бахнуть все файлы в Temp (а задачи такой нет).

Вариант "Get-ChildItem -Path $SettingProgramm_x64 -File -Recurse | Remove-Item " - Грохает файл сразу после его добавления в Temp. Вывод его за функцию не помогает.

По этому я смотрю на применение stat-job и recive-job



От советов не откажусь как мне лучше поступить в данных ситуациях. Как закончу допишу что получилось и какие мучения были по пути.

Показать полностью 3

Маленькая история из маршрутки.

Маленькая история из маршрутки. Жизнь, Россия, Разочарование

Мой город находится где то за поясом астероидов в этой стране, хотя и город-миллионник. В нем происходит тут и там такие истории как вот эта. Но у меня полыхнуло.
Ехал я вечером в маршрутке со своей девушкой. В маршрутке было пустовато всего 2 человека ( с нами 4). Не успели мы проехать 2 остановки как водитель резко подрезает на остановке другую маршрутку и начинает в окно орать все что о нем думает. Из всего нецензурного я понял суть проблемы - она заключалась в том, что нашего водителя в это день 4 часами ранее не пропустил другой водила, не прижавшись к остановке ( дорога с 1 полосой движения).
После наш водила предложил выйти разобраться (набить е....о) другому водиле, на что тот по видимому согласился.
Битва маршрутчиков не входила в мою культурную программу на вечер, потому радости и восхищение я испытывать не стал.
Напомню, что нас в маршрутке было 4. Девушка, которой все было до фонаря, она как сидела в телефоне так и продолжала. Я и моя девушка.......а 4 пассажир был полицейский.
Заметил я полицейского только тогда, когда водила побежал за машину. Естественно я повернулся проводить его взглядом, тут то и увидел полицейского в салоне. Полицейский сидел как не в чем не бывало рубился во что то в телефоне. Я в начале посмеялся от сложившейся ситуации. После продолжающихся криков за грязными окнами маршрутки и бездействием полицейского я решил обратиться к нему.
Цитата : " Господин полицейский, вы не хотите что то предпринять?"
П - оторвавшись от игры - ". Ну а что я сделаю, он же его не убьет."
Я чуть не офигел. Тем временем крики за грязными окнами маршрутки продолжались.
П - "Понимаете, если я ввяжусь, это ещё на больше затянется." Дополнил полицейский.
Я в совершенно непонятных чувствах сидел дальше. Минуты через 3 все закончилось. Водилы дальше слов не зашли. Мы помчались дальше.
А через 2 дня я пошел сделал фотографии для документов, скинул на флешку и заполнил электронный бланк на Грин-карту. Я и так не особо люблю страну где живу и давно хочу уехать, но после этого ( очень мелкого и повседневного) случая на фоне общего мракобесия на всех уровнях власти и жизни, я решил что будущий 18 год для меня будет последний в этой стране, ни смотря на исход лотереи. Лотерея это просто шанс (1.2%). Если не так, то соберу вещи и подальше от сюда.
Всем добра! ))))))

Показать полностью 1
Отличная работа, все прочитано!