Skip to content

Instantly share code, notes, and snippets.

@numbnet
Last active April 7, 2021 23:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save numbnet/983df0198a405476d92d4983b14f91a1 to your computer and use it in GitHub Desktop.
Save numbnet/983df0198a405476d92d4983b14f91a1 to your computer and use it in GitHub Desktop.
OpenSSH for PC
##*************************************************
New-Item -Path $env:SYSTEMDRIVE\ -Name 'PS\OpenSSH' -ItemType Directory
##====================================================
### ARH OS and Download OpenSSH x64 or x86
echo "******** Start Download OpenSSH v8.1.0.0p1-Beta .......... *********";
echo " "
if ((Get-WmiObject win32_operatingsystem | select osarchitecture).osarchitecture -like "64*")
{
Write '... for Windows x64';
Invoke-WebRequest -Uri 'https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.1.0.0p1-Beta/OpenSSH-Win64.zip' -OutFile $env:SYSTEMDRIVE\PS\OpenSSH\OpenSSH-Win64.zip
pause
##=====================================
## Unzip the files
Expand-Archive -Path $env:SYSTEMDRIVE\PS\OpenSSH\OpenSSH-Win64.Zip -DestinationPath $env:ProgramFiles\OpenSSH
pause
##================= ≠≠≠ =================
echo '## Copy \OpenSSH\OpenSSH-Win64\ \OpenSSH'
copy $env:ProgramFiles\OpenSSH\OpenSSH-Win64\* $env:ProgramFiles\OpenSSH
} else {
Write "... for Windows x86"
Invoke-WebRequest -Uri 'https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.1.0.0p1-Beta/OpenSSH-Win32.zip' -OutFile $env:SYSTEMDRIVE\PS\OpenSSH\OpenSSH-Win32.zip
pause
echo '## Unzip the files'
Expand-Archive -Path $env:SYSTEMDRIVE\PS\OpenSSH\OpenSSH-Win32.Zip -DestinationPath $env:ProgramFiles\OpenSSH
echo '## Copy \OpenSSH\OpenSSH-Win64\ \OpenSSH'
copy $env:ProgramFiles\OpenSSH\OpenSSH-Win32\* $env:ProgramFiles\OpenSSH
}
##================= ≠≠≠ =================
echo '## Install service'
. $env:ProgramFiles\OpenSSH\install-sshd.ps1
##================= ≠≠≠ =================
echo '## Set firewall permissions'
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22;
##================= ≠≠≠ =================
echo '## Set service startup END'
Set-Service sshd -StartupType Automatic;
Start-Service sshd;
##================= ≠≠≠ =================
echo '## Set Authentication to public key'
((Get-Content -path $env:ProgramData\ssh\sshd_config -Raw) ` -replace '#PubkeyAuthentication yes','PubkeyAuthentication yes' ` -replace '#PasswordAuthentication yes','PasswordAuthentication yes' ` -replace 'Match Group administrators','#Match Group administrators' ` -replace 'AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys','#AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys') | Set-Content -Path $env:ProgramData\ssh\sshd_config;
##================= ≠≠≠ =================
echo '## Restart after changes'
Restart-Service sshd;
##================= ≠≠≠ =================
echo '## force file creation'
New-item -Path "$env:USERPROFILE" -Name .ssh -ItemType Directory -force;
##================= ≠≠≠ =================
echo '## Gen SSH-KEY:'
#ssh-keygen -t ed25519 -C "$env:USERNAME" -f $env:USERPROFILE\.ssh\$env:COMPUTERNAME.$(Get-Random).ed25519.key | Out-File $env:USERPROFILE\.ssh\file.log -Encoding ascii;
#ssh-keygen -t ed25519 -C "$env:USERNAME" -f "$env:USERPROFILE\.ssh\$env:COMPUTERNAME.$env:USERNAME.ed25519.key" | Out-File $env:USERPROFILE\.ssh\file.log -Encoding ascii;
##================= ≠≠≠ =================
echo '## Copy SSH-KEY V1:'
echo 'ssh-ed25519 AAAAC*************************************************************************************YyHsv zusyurec@gmail.com' |Out-File $env:USERPROFILE\.ssh\authorized_keys -Encoding ascii; cat $env:USERPROFILE\.ssh\authorized_keys
## Copy SSH-KEY V2:
#cat $env:USERPROFILE\.ssh\*$env:COMPUTERNAME.$env:USERNAME.ed25519.key.pub | Out-File $env:USERPROFILE\.ssh\authorized_keys -Encoding ascii;
##================= ≠≠≠ =================
## Cleaning Dir
echo 'Clean dir'
if ((Get-WmiObject win32_operatingsystem | select osarchitecture).osarchitecture -like "64*")
{
Write 'Remove for Windows x64';
Remove-Item -Path "$env:ProgramFiles\OpenSSH\OpenSSH-Win64" -Recurse;
Remove-Item -Path $env:SYSTEMDRIVE\PS\OpenSSH\OpenSSH-Win64.Zip -Recurse;
} else {
Write 'Remove for Windows x86';
Remove-Item -Path $env:ProgramFiles\OpenSSH\OpenSSH-Win32 -Recurse;
Remove-Item -Path $env:SYSTEMDRIVE\PS\OpenSSH\OpenSSH-Win32.zip -Recurse;
}
##================= ≠≠≠ =================
echo 'OpenSSH for windows is installed'
exit
Dism /Get-WimInfo /WimFile:F:\sources\install.esd (где F:, буква виртуального диска с файлами Windows 10, папкой sources и файлом install.esd).
Нам нужна Windows 10 Профессиональная (индекс образа 1).
Следующей командой я разворачиваю файл install.esd на виртуальный диск VHD (раздел G:)
Dism /apply-image /imagefile:C:\offline\sources\install.wim /index:1 /ApplyDir:V:\
где H:\sources\ - адрес расположения файла install.esd,
index:1 - индекс Windows 10 Профессиональная,
G: - виртуальный диск VHD (раздел G:).
Файл install.esd развёрнут на виртуальный диск VHD (раздел G:).
Следующим этапом мы произведём удаление встроенных в Windows 10 приложений из установочного дистрибутива при помощи Windows PowerShell
Открываем Windows PowerShell 
и первым делом с помощью команды: 
Get-AppxProvisionedPackage -Path V:\ 
(где V:\ буква диска с развёрнутой Windows 10) получаем информацию о пакетах приложений, встроенных в операционную систему. 
Приложения можно удалять по одному или все вместе. Чтобы удалить одно приложение, нужно его выбрать. Выберем к примеру Microsoft 3D Viewer. Для начала скопируем полностью его описание. 
и введём команду:
Remove-AppxProvisionedPackage -path V:\ -PackageName Microsoft.Microsoft3DViewer_1.1702.21039.0_neutral_~_8wekyb3d8bbwe (где V:\ буква диска с развёрнутой Windows 10).
Приложение Microsoft 3D Viewer удалено.
Проверить это можно опять же командой Get-AppxProvisionedPackage -Path V:\
Если вы хотите избавится от всех встроенных в Windows 10 приложений сразу, введите команду:
Get-AppxProvisionedPackage -path V:\ | Remove-AppxProvisionedPackage -path V:\
Все встроенные пакеты приложений удалены из дистрибутива.
Теперь настало время сжать распакованную на раздел (G:) Windows 10 в файл-образ install.wim
Установочный ISO-образ Windows 10 подсоединён у нас к виртуальному дисководу (H:). Копируем всё его содержимое
и вставляем скопированное в созданную, в произвольном месте, папку с именем 1.
Я создал папку 1 на диске (E:). Заходим в папку 1.
Здесь нам нужно войти в папку sources.
В папке sources удаляем файл-образ install.esd, который является файлом образом Win 10. Создаём вместо него файл-образ install.esd, который не будет содержать встроенных приложений Win 10.
Открываем командную строку администратора и вводим команду:
Dism /capture-image /imagefile:E:\1\sources\install.wim /CaptureDir:V:\ /Name:Pro
данная команда архивирует Windows 10 в файл-образ install.wim,
который будет расположен вместо удалённого нами файла install.esd по адресу E:\1\sources\.
Теперь ещё больше сжимаем файл install.wim в файл install.esd командой:
Dism /Export-Image /SourceImageFile:E:\1\sources\install.wim /SourceIndex:1 /DestinationImageFile:E:\1\sources\install.esd /Compress:recovery 
В результате в папке E:\1\sources\ находятся теперь два файла: install.wim и install.esd.
install.wim удаляем.
Вот практически и всё. Осталось только превратить папку 10 с файлами Windows 10 в установочный ISO-дистрибутив
Установите "Комплект средств для развертывания Windows (Windows ADK)".
Для Windows 10, скачать можно здесь:
https://developer.microsoft.com/ru-ru/windows/hardware/windows-assessment-deployment-kit
 для Windows 8.1 здесь
https://www.microsoft.com/ru-ru/download/details.aspx?id=39982
После установки запускаем среду средств развёртывания и работы с образами. 
вводим команду:
Oscdimg /u2 /m /bootdаta:2#p0,e,bE:\1\boot\Etfsboot.com#pef,e,bE:\1\efi\microsoft\boot\Efisys.bin E:\1 E:\Windows10.iso
где:
u2, это файловая система UDF, а m - размер образа без ограничений. 
b - загрузочный сектор записать etfsboot.com, путь к файлу etfsboot.com при указании b(boot) пишется без пробела: bE:\1\boot\etfsboot.com
bE: - где E: - буква диска.
E:\1 - создать ISO-образ из файлов и папок, находящихся на разделе E: в папке 1.
E:\Windows10.iso - созданный образ разместить на разделе E:
присвоить имя образу - Windows10 (без пробела).
Дистрибутив Windows10.iso на диске (E:) готов и не содержит встроенных приложений.
Если с помощью данного ISO-образа создать загрузочную флешку и установить Windows 10, то
. .\try_execute_function.ps1
write-host "Попытка выполнить внешнюю функцию."
write-host "Пожалуйста, введите значение, которое вы хотите узнать:"
write-host "1. Результат выполнения функции"
write-host "2. Дату время и погоду"
write-host "3. Дату и время"
$ex=read-host
if ($ex -eq "1" -or $ex -eq "2" -or $ex -eq "3") {
write-host "Выполняю функцию:"
}
elseif ([string]::IsNullOrEmpty($ex)) {
write-host "Вы указали неверный параметр."
break;
}
switch ($ex){
"1"{
Execute-Function
}
"2"{
Get-DateOne
}
"3"{
Get-DateTwo
}
Default
{
write-host "Такой функции не существует."
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment