Initial commit

This commit is contained in:
2022-06-07 10:34:00 +07:00
commit 16eec4f222
6 changed files with 448 additions and 0 deletions

173
main.py Normal file
View File

@@ -0,0 +1,173 @@
from sys import exit
from os import getcwd, remove
from os.path import isfile, exists
import ctypes
import subprocess
properties = {
"wim": {
"message": "\nВведите путь до wim-файла:\n",
"path": "",
"func": isfile
},
"mnt": {
"message": "\nВведите путь до папки монтирования:\n",
"path": "",
"func": exists
},
"upd": {
"message": "\nВведите путь до папки с обновлениями:\n",
"path": "",
"func": exists
}
}
ps1_script_path = getcwd() + "\\ps1_script.tmp.ps1"
# ps1_script_raw = r"""Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope Process
ps1_script_raw = r"""{appslist}
Remove-WindowsImage -ImagePath {wimpath} -Index 3
Remove-WindowsImage -ImagePath {wimpath} -Index 2
Remove-WindowsImage -ImagePath {wimpath} -Index 1
Mount-WindowsImage -ImagePath {wimpath} -Index 1 -Path {mntpath}
reg load HKLM\onedrive_delete {mntpath}\Users\default\ntuser.dat
reg delete HKLM\onedrive_delete\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ /v OneDriveSetup /f
reg unload HKLM\onedrive_delete
Get-AppxProvisionedPackage -Path {mntpath} | ForEach-Object {{
if ($apps -contains $_.DisplayName) {{
Write-Host Removing $_.DisplayName...
Remove-AppxProvisionedPackage -Path {mntpath} -PackageName $_.PackageName | Out-Null
}}
}}
Add-WindowsPackage -Path {mntpath} -PackagePath {updpath}
"""
bat_script_path = getcwd() + "\\bat_script.tmp.bat"
bat_script_raw = r"""@echo off
dism /cleanup-image /image:"{mntpath}" /startcomponentcleanup /resetbase /scratchdir:"C:\Windows\Temp"
dism /unmount-wim /mountdir:"{mntpath}" /commit
dism /export-image /sourceimagefile:"{wimpath}" /sourceindex:1 /destinationimagefile:"{wimpath}.esd" /Compress:recovery
dism /cleanup-wim
"""
apps = [
"Microsoft.BingWeather",
"Microsoft.GetHelp",
"Microsoft.Getstarted",
"Microsoft.Messaging",
"Microsoft.Microsoft3DViewer",
"Microsoft.MixedReality.Portal",
"Microsoft.MicrosoftOfficeHub",
"Microsoft.MicrosoftSolitaireCollection",
"Microsoft.MicrosoftStickyNotes",
"Microsoft.MSPaint",#Paint 3D (Windows 10)
"Microsoft.Office.OneNote",
"Microsoft.OneConnect",
"Microsoft.People",
"Microsoft.ScreenSketch",#Скриншоты (Windows 10 1809+)
"Microsoft.YourPhone",#Ваш телефон (Windows 10 1809+)
"Microsoft.Print3D",
"Microsoft.SkypeApp",
"Microsoft.ZuneMusic",
"Microsoft.ZuneVideo",#Кино и ТВ
"Microsoft.XboxApp"#Xbox (Windows 10)
# "Microsoft.Windows.Cortana" # ?????
]
w11_apps = [
"Microsoft.WindowsAlarms",
"Microsoft.WindowsCamera",
"microsoft.windowscommunicationsapps",
"Microsoft.WindowsFeedbackHub",
"Microsoft.WindowsMaps",
"Microsoft.WindowsSoundRecorder",
"Microsoft.GamingApp",#Xbox (Windows 11)
"Microsoft.PowerAutomateDesktop",#(Windows11)
"Microsoft.Todos",#(Windows11)
"Microsoft.BingNews",#Новости (Windows 11)
"MicrosoftWindows.Client.WebExperience",#Виджеты (Windows 11)
"Microsoft.Paint"#Paint (Windows11)
]
def is_admin():
return ctypes.windll.shell32.IsUserAnAdmin() != 0
def ask_input(message, checking_func):
user_input = input(message)
if not user_input or len(user_input) == 0 or not checking_func(user_input):
ask_input(message, checking_func)
else:
return user_input
def do_cleanup():
if isfile(ps1_script_path):
remove(ps1_script_path)
if isfile(bat_script_path):
remove(bat_script_path)
mntpath = properties.get("mnt").get("path")
if mntpath:
subprocess.Popen("dism /unmount-wim /mountdir:\"{}\" /discard".format(mntpath)).wait()
subprocess.Popen("dism /cleanup-wim").wait()
def convert_applist_to_string():
global apps
result = "$apps = @(\n"
for app in apps:
result += "\t'{}',\n".format(app)
return result[:-2] + "\n)"
def main():
global apps
for keys, value in properties.items():
if isinstance(value, dict):
value["path"] = ask_input(value.get("message"), value.get("func"))
if bool(input("\nWindows 10 (0) или Windows 11 (1) ?\n")):
apps += w11_apps
app_list = convert_applist_to_string()
with open(ps1_script_path, mode="w") as f:
f.write(ps1_script_raw.format(
appslist=app_list,
wimpath=properties.get("wim").get("path"),
mntpath=properties.get("mnt").get("path"),
updpath=properties.get("upd").get("path")
)
)
with open(bat_script_path, mode="w") as f:
f.write(bat_script_raw.format(
mntpath=properties.get("mnt").get("path"),
wimpath=properties.get("wim").get("path")
)
)
# subprocess.Popen("powershell Unblock-File -Path {}".format(ps1_script_path)).wait()
subprocess.Popen("powershell {}".format(ps1_script_path)).wait()
subprocess.Popen("{}".format(bat_script_path)).wait()
properties.get("wim")["path"] = ""
properties.get("mnt")["path"] = ""
properties.get("upd")["path"] = ""
do_cleanup()
if __name__ == '__main__':
try:
if not is_admin():
print("Запустите программу от имени администратора!")
raise KeyboardInterrupt
else:
main()
except KeyboardInterrupt:
do_cleanup()
exit()