diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json
new file mode 100644
index 0000000..cc0e5ae
--- /dev/null
+++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 11 Enterprise",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "11e"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json
new file mode 100644
index 0000000..23e54ff
--- /dev/null
+++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 11 LTSC",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "11l"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json
new file mode 100644
index 0000000..c5a647b
--- /dev/null
+++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 10 Pro",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "10"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json
new file mode 100644
index 0000000..1466e11
--- /dev/null
+++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 10 Enterprise",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "10e"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json
new file mode 100644
index 0000000..dfc8f5c
--- /dev/null
+++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 10 LTSC",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "10l"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json
new file mode 100644
index 0000000..e58f7ad
--- /dev/null
+++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 8.1 Enterprise",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "8e"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json
new file mode 100644
index 0000000..85878f0
--- /dev/null
+++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 7 Ultimate",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "7u"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json
new file mode 100644
index 0000000..b99c942
--- /dev/null
+++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows Vista Ultimate",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "vu"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json
new file mode 100644
index 0000000..a2c51c4
--- /dev/null
+++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows XP Professional",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "xp"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json
new file mode 100644
index 0000000..e5fab13
--- /dev/null
+++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 2000 Professional",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "2k"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json
new file mode 100644
index 0000000..96089cc
--- /dev/null
+++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows Server 2025",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "2025"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json
new file mode 100644
index 0000000..9897a67
--- /dev/null
+++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows Server 2022",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "2022"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json
new file mode 100644
index 0000000..9903599
--- /dev/null
+++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows Server 2019",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "2019"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json
new file mode 100644
index 0000000..614b171
--- /dev/null
+++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows Server 2016",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "2016"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json
new file mode 100644
index 0000000..158036c
--- /dev/null
+++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows Server 2012 R2",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "2012"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json
new file mode 100644
index 0000000..5dc1af6
--- /dev/null
+++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows Server 2008 R2",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "2008"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json
new file mode 100644
index 0000000..c47effb
--- /dev/null
+++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows Server 2003",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "2003"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json
new file mode 100644
index 0000000..225a746
--- /dev/null
+++ b/.devcontainer/180 - Tiny11/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Tiny11",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "tiny11"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json
new file mode 100644
index 0000000..78da098
--- /dev/null
+++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Tiny11 Core",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "core11"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json
new file mode 100644
index 0000000..c7fdca9
--- /dev/null
+++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Tiny11 Nano",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "nano11"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json
new file mode 100644
index 0000000..3df1b88
--- /dev/null
+++ b/.devcontainer/210 - Tiny10/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Tiny10",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "tiny10"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "../codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml
new file mode 100644
index 0000000..85e3f64
--- /dev/null
+++ b/.devcontainer/codespaces.yml
@@ -0,0 +1,21 @@
+services:
+ windows:
+ container_name: windows
+ image: ghcr.io/dockur/windows
+ environment:
+ RAM_SIZE: "half"
+ DISK_SIZE: "max"
+ CPU_CORES: "max"
+ devices:
+ - /dev/kvm
+ - /dev/net/tun
+ cap_add:
+ - NET_ADMIN
+ ports:
+ - 8006:8006
+ - 3389:3389/tcp
+ - 3389:3389/udp
+ volumes:
+ - ./windows:/storage
+ restart: on-failure
+ stop_grace_period: 2m
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 0000000..d7c98a8
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,20 @@
+{
+ "name": "Windows 11 Pro",
+ "service": "windows",
+ "containerEnv": {
+ "VERSION": "11"
+ },
+ "forwardPorts": [8006],
+ "portsAttributes": {
+ "8006": {
+ "label": "Web",
+ "onAutoForward": "notify"
+ }
+ },
+ "otherPortsAttributes": {
+ "onAutoForward": "ignore"
+ },
+ "dockerComposeFile": "codespaces.yml",
+ "workspaceFolder": "/workspaces/windows",
+ "initializeCommand": "docker system prune --all --force"
+}
diff --git a/.dockerignore b/.dockerignore
index 258778b..154d44a 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,4 +1,5 @@
.dockerignore
+.devcontainer
.git
.github
.gitignore
diff --git a/.github/ISSUE_TEMPLATE/1-issue.yml b/.github/ISSUE_TEMPLATE/1-issue.yml
index 68f19b7..87860c9 100644
--- a/.github/ISSUE_TEMPLATE/1-issue.yml
+++ b/.github/ISSUE_TEMPLATE/1-issue.yml
@@ -21,6 +21,7 @@ body:
attributes:
label: Docker compose
description: The compose file (or otherwise the `docker run` command used).
+ render: yaml
validations:
required: true
- type: textarea
@@ -28,6 +29,7 @@ body:
attributes:
label: Docker log
description: The logfile of the container (as shown by `docker logs windows`).
+ render: shell
validations:
required: true
- type: textarea
diff --git a/.github/ISSUE_TEMPLATE/3-bug.yml b/.github/ISSUE_TEMPLATE/3-bug.yml
index 131742c..f614f27 100644
--- a/.github/ISSUE_TEMPLATE/3-bug.yml
+++ b/.github/ISSUE_TEMPLATE/3-bug.yml
@@ -23,6 +23,7 @@ body:
attributes:
label: Docker compose
description: The compose file (or otherwise the `docker run` command used).
+ render: yaml
validations:
required: true
- type: textarea
@@ -30,6 +31,7 @@ body:
attributes:
label: Docker log
description: The logfile of the container (as shown by `docker logs windows`).
+ render: shell
validations:
required: true
- type: textarea
diff --git a/.github/winboat.png b/.github/winboat.png
new file mode 100644
index 0000000..2b5f6db
Binary files /dev/null and b/.github/winboat.png differ
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8731ab4..27c6385 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -2,16 +2,6 @@ name: Build
on:
workflow_dispatch:
- push:
- branches:
- - master
- paths-ignore:
- - '**/*.md'
- - '**/*.yml'
- - '.gitignore'
- - '.dockerignore'
- - '.github/**'
- - '.github/workflows/**'
concurrency:
group: build
@@ -32,7 +22,7 @@ jobs:
steps:
-
name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
with:
fetch-depth: 0
-
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index b132f31..9e9d278 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -7,19 +7,29 @@ jobs:
name: shellcheck
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
- - name: Run ShellCheck
+ -
+ name: Checkout
+ uses: actions/checkout@v5
+ -
+ name: Run ShellCheck
uses: ludeeus/action-shellcheck@master
env:
SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028
- - name: Validate XML
- uses: action-pack/valid-xml@v1
- with:
- path: "assets"
- file-endings: ".xml"
- - name: Lint Dockerfile
- uses: hadolint/hadolint-action@v3.1.0
+ -
+ name: Lint Dockerfile
+ uses: hadolint/hadolint-action@v3.3.0
with:
dockerfile: Dockerfile
ignore: DL3006,DL3008
failure-threshold: warning
+ -
+ name: Validate XML
+ uses: action-pack/valid-xml@v1
+ with:
+ path: "assets"
+ file-endings: ".xml"
+ -
+ name: Validate JSON and YML files
+ uses: GrantBirki/json-yaml-validate@v4
+ with:
+ yaml_exclude_regex: ".*\\kubernetes\\.yml$"
diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml
index 0e0bcd1..0b2c17e 100644
--- a/.github/workflows/hub.yml
+++ b/.github/workflows/hub.yml
@@ -12,10 +12,10 @@ jobs:
dockerHubDescription:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v5
-
name: Docker Hub Description
- uses: peter-evans/dockerhub-description@v4
+ uses: peter-evans/dockerhub-description@v5
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml
new file mode 100644
index 0000000..51f8503
--- /dev/null
+++ b/.github/workflows/review.yml
@@ -0,0 +1,66 @@
+on:
+ pull_request:
+
+name: "Review"
+
+permissions:
+ contents: read
+ pull-requests: write
+ checks: write
+
+jobs:
+ review:
+ name: review
+ runs-on: ubuntu-latest
+ steps:
+ -
+ name: Checkout
+ uses: actions/checkout@v5
+ -
+ name: Spelling
+ uses: reviewdog/action-misspell@v1
+ with:
+ locale: "US"
+ level: warning
+ pattern: |
+ *.md
+ *.sh
+ reporter: github-pr-review
+ github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
+ -
+ name: Hadolint
+ uses: reviewdog/action-hadolint@v1
+ with:
+ level: warning
+ reporter: github-pr-review
+ hadolint_ignore: DL3006 DL3008
+ github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
+ -
+ name: YamlLint
+ uses: reviewdog/action-yamllint@v1
+ with:
+ level: warning
+ reporter: github-pr-review
+ github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
+ -
+ name: ActionLint
+ uses: reviewdog/action-actionlint@v1
+ with:
+ level: warning
+ reporter: github-pr-review
+ github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
+ -
+ name: Shellformat
+ uses: reviewdog/action-shfmt@v1
+ with:
+ level: warning
+ shfmt_flags: "-i 2 -ci -bn"
+ github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
+ -
+ name: Shellcheck
+ uses: reviewdog/action-shellcheck@v1
+ with:
+ level: warning
+ reporter: github-pr-review
+ shellcheck_flags: -x -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028
+ github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 4903636..c275f1a 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,12 +1,6 @@
on:
workflow_dispatch:
pull_request:
- paths:
- - '**/*.sh'
- - '**/*.xml'
- - '.github/workflows/test.yml'
- - '.github/workflows/check.yml'
- - 'Dockerfile'
name: "Test"
permissions: {}
diff --git a/Dockerfile b/Dockerfile
index e5abb6f..bf6dab2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,11 @@
-FROM scratch AS build-amd64
-COPY --from=qemux/qemu-docker:6.06 / /
+# syntax=docker/dockerfile:1
-ARG VERSION_ARG="0.0"
+ARG VERSION_ARG="latest"
+FROM scratch AS build-amd64
+
+COPY --from=qemux/qemu:7.27 / /
+
+ARG TARGETARCH
ARG DEBCONF_NOWARNINGS="yes"
ARG DEBIAN_FRONTEND="noninteractive"
ARG DEBCONF_NONINTERACTIVE_SEEN="true"
@@ -9,33 +13,30 @@ ARG DEBCONF_NONINTERACTIVE_SEEN="true"
RUN set -eu && \
apt-get update && \
apt-get --no-install-recommends -y install \
- bc \
- curl \
- 7zip \
- wsdd \
samba \
- xz-utils \
wimtools \
dos2unix \
cabextract \
- genisoimage \
libxml2-utils \
libarchive-tools && \
+ wget "https://github.com/gershnik/wsdd-native/releases/download/v1.22/wsddn_1.22_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \
+ dpkg -i /tmp/wsddn.deb && \
apt-get clean && \
- echo "$VERSION_ARG" > /run/version && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY --chmod=755 ./src /run/
COPY --chmod=755 ./assets /run/assets
-ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd
-ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz
+ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.48-0/virtio-win-1.9.48.tar.xz /var/drivers.txz
-FROM dockurr/windows-arm:2.22 AS build-arm64
+FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64
FROM build-${TARGETARCH}
-EXPOSE 8006 3389
+ARG VERSION_ARG="0.00"
+RUN echo "$VERSION_ARG" > /run/version
+
VOLUME /storage
+EXPOSE 3389 8006
ENV VERSION="11"
ENV RAM_SIZE="4G"
diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml
index df17cbe..ee75f27 100644
--- a/assets/win10x64-enterprise-eval.xml
+++ b/assets/win10x64-enterprise-eval.xml
@@ -323,11 +323,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -360,61 +355,81 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 11
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 12
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
- 13
+ 14
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml
index 5b60828..5e5eb8c 100644
--- a/assets/win10x64-enterprise.xml
+++ b/assets/win10x64-enterprise.xml
@@ -326,11 +326,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -363,61 +358,81 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 11
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 12
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
- 13
+ 14
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml
index 9516684..00a049e 100644
--- a/assets/win10x64-iot.xml
+++ b/assets/win10x64-iot.xml
@@ -332,11 +332,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -369,61 +364,81 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 11
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 12
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
- 13
+ 14
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml
index 108db1f..e77dd6a 100644
--- a/assets/win10x64-ltsc.xml
+++ b/assets/win10x64-ltsc.xml
@@ -329,11 +329,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -366,61 +361,81 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 11
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 12
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
- 13
+ 14
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win10x64.xml b/assets/win10x64.xml
index 0b19f99..7c21359 100644
--- a/assets/win10x64.xml
+++ b/assets/win10x64.xml
@@ -326,11 +326,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -363,61 +358,81 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 11
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 12
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
- 13
+ 14
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml
index b8c3cbf..39c3f02 100644
--- a/assets/win11x64-enterprise-eval.xml
+++ b/assets/win11x64-enterprise-eval.xml
@@ -264,6 +264,11 @@
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
Set Network Location to Home
+
+ 26
+ pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
+ Install VirtIO display driver
+
@@ -346,11 +351,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
-
- 3
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -358,7 +358,7 @@
5
- cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
Password Never Expires
@@ -378,81 +378,91 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 12
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 13
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 14
+ 15
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 21
+ 23
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 22
- pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
- Install VirtIO display driver
-
-
- 23
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 24
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 26
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml
index fc8562a..bafed49 100644
--- a/assets/win11x64-enterprise.xml
+++ b/assets/win11x64-enterprise.xml
@@ -267,6 +267,11 @@
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
Set Network Location to Home
+
+ 26
+ pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
+ Install VirtIO display driver
+
@@ -349,11 +354,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
-
- 3
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,7 +361,7 @@
5
- cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
Password Never Expires
@@ -381,81 +381,91 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 12
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 13
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 14
+ 15
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 21
+ 23
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 22
- pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
- Install VirtIO display driver
-
-
- 23
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 24
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 26
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
@@ -463,4 +473,3 @@
-
diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml
index 0de7bb4..d6825d0 100644
--- a/assets/win11x64-iot.xml
+++ b/assets/win11x64-iot.xml
@@ -267,6 +267,11 @@
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
Set Network Location to Home
+
+ 26
+ pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
+ Install VirtIO display driver
+
@@ -349,11 +354,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
-
- 3
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,7 +361,7 @@
5
- cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
Password Never Expires
@@ -381,81 +381,91 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 12
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 13
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 14
+ 15
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 21
+ 23
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 22
- pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
- Install VirtIO display driver
-
-
- 23
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 24
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 26
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml
index 8e42eb6..a9a6ce7 100644
--- a/assets/win11x64-ltsc.xml
+++ b/assets/win11x64-ltsc.xml
@@ -267,6 +267,11 @@
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
Set Network Location to Home
+
+ 26
+ pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
+ Install VirtIO display driver
+
@@ -349,11 +354,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
-
- 3
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,7 +361,7 @@
5
- cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
Password Never Expires
@@ -381,81 +381,91 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 12
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 13
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 14
+ 15
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 21
+ 23
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 22
- pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
- Install VirtIO display driver
-
-
- 23
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 24
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 26
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64.xml b/assets/win11x64.xml
index 3130bb4..8082c7c 100644
--- a/assets/win11x64.xml
+++ b/assets/win11x64.xml
@@ -267,6 +267,11 @@
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
Set Network Location to Home
+
+ 26
+ pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
+ Install VirtIO display driver
+
@@ -349,11 +354,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
-
- 3
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,7 +361,7 @@
5
- cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
Password Never Expires
@@ -381,81 +381,91 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 12
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 13
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 14
+ 15
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 21
+ 23
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 22
- pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
- Install VirtIO display driver
-
-
- 23
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 24
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 26
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml
index ed35737..09a23ce 100644
--- a/assets/win2008r2-eval.xml
+++ b/assets/win2008r2-eval.xml
@@ -203,11 +203,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -271,25 +266,35 @@
15
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
16
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 17
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 18
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 19
+ 20
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 21
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml
index bd75078..5dee0a5 100644
--- a/assets/win2008r2.xml
+++ b/assets/win2008r2.xml
@@ -206,11 +206,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -274,25 +269,35 @@
15
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
16
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 17
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 18
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 19
+ 20
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 21
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml
index fcb7c32..6351559 100644
--- a/assets/win2012r2-eval.xml
+++ b/assets/win2012r2-eval.xml
@@ -236,11 +236,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -289,25 +284,40 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 14
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 15
+ 16
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 17
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 16
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 19
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml
index dea2c37..bb3dd70 100644
--- a/assets/win2012r2.xml
+++ b/assets/win2012r2.xml
@@ -239,11 +239,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -292,25 +287,40 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 14
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 15
+ 16
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 17
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 16
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 19
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml
index 66fc244..d788960 100644
--- a/assets/win2016-eval.xml
+++ b/assets/win2016-eval.xml
@@ -236,11 +236,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -289,45 +284,60 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 18
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 20
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2016.xml b/assets/win2016.xml
index 1336e3f..e055e00 100644
--- a/assets/win2016.xml
+++ b/assets/win2016.xml
@@ -239,11 +239,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -292,45 +287,60 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 18
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 20
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml
index e9aebfd..332d974 100644
--- a/assets/win2019-eval.xml
+++ b/assets/win2019-eval.xml
@@ -240,11 +240,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -293,45 +288,60 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 18
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 20
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml
new file mode 100644
index 0000000..2fb6e32
--- /dev/null
+++ b/assets/win2019-hv.xml
@@ -0,0 +1,356 @@
+
+
+
+
+
+ en-US
+
+ 0409:00000409
+ en-US
+ en-US
+ en-US
+ en-US
+
+
+
+
+ 0
+ true
+
+
+
+ 1
+ EFI
+ 128
+
+
+
+ 2
+ MSR
+ 128
+
+
+
+ 3
+ Primary
+ true
+
+
+
+
+
+ 1
+ 1
+
+ FAT32
+
+
+
+ 2
+ 2
+
+
+
+ 3
+ 3
+
+ C
+ NTFS
+
+
+
+
+
+
+
+
+ /IMAGE/NAME
+ Hyper-V Server 2019 SERVERHYPERCORE
+
+
+
+ 0
+ 3
+
+ OnError
+ false
+
+
+
+ true
+ Never
+
+
+ false
+ Never
+
+
+ true
+ Docker
+ Windows for Docker
+
+ false
+
+ false
+
+
+
+
+
+ false
+
+
+
+
+ true
+
+
+ 1
+
+
+
+
+ true
+
+
+ *
+
+ Dockur
+ Windows for Docker
+ 24/7
+
+ Dockur
+ https://github.com/dockur/windows/issues
+
+ Windows for Docker
+
+
+ 1
+
+
+ true
+ true
+ https://google.com
+ about:blank
+
+
+ true
+ true
+ https://google.com
+ about:blank
+
+
+ 0
+
+
+ 1
+
+
+ 0409:00000409
+ en-US
+ en-US
+ en-US
+ en-US
+
+
+
+
+ 1
+ reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
+ Set Network Location to Home
+
+
+ 2
+ dism.exe /online /Disable-Feature /FeatureName:Microsoft-Hyper-V /NoRestart
+ Disable Hyper-V role
+
+
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ 0
+
+
+
+
+ true
+ all
+ @FirewallAPI.dll,-28752
+
+
+
+
+
+
+ true
+
+
+ 1
+
+
+
+
+
+ Docker
+ Administrators
+
+
+ true
+
+
+
+
+ password
+ true
+
+
+
+ Docker
+ true
+ 65432
+
+
+ true
+
+
+
+ 32
+ 1920
+ 1080
+
+
+ true
+ true
+ true
+ true
+ true
+ Home
+ 3
+ true
+ true
+
+ Dockur
+ Windows for Docker
+
+
+ 1
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
+ Allow guest access to network shares
+
+
+ 3
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
+ Enable option for passwordless sign-in
+
+
+ 4
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ Password Never Expires
+
+
+ 5
+ cmd /C POWERCFG -H OFF
+ Disable Hibernation
+
+
+ 6
+ cmd /C POWERCFG -X -monitor-timeout-ac 0
+ Disable monitor blanking
+
+
+ 7
+ reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f
+ Disable first-run experience in Edge
+
+
+ 8
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
+ Show file extensions in Explorer
+
+
+ 9
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
+ Zero Hibernation File
+
+
+ 10
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
+ Disable Hibernation
+
+
+ 11
+ cmd /C POWERCFG -X -standby-timeout-ac 0
+ Disable Sleep
+
+
+ 12
+ reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
+ Enable RemoteApp to launch unlisted programs
+
+
+ 13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
+ Remove Search from the Taskbar
+
+
+ 15
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
+ Remove Task View from the Taskbar
+
+
+ 16
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
+ Remove Widgets from the Taskbar
+
+
+ 17
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
+ Remove Chat from the Taskbar
+
+
+ 18
+ reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
+ Turn off Windows Update auto download
+
+
+ 19
+ netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
+ Enable Network Discovery
+
+
+ 20
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 21
+ netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
+ Enable File Sharing
+
+
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 23
+ cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
+ Execute custom script from the OEM folder if exists
+
+
+
+
+
diff --git a/assets/win2019.xml b/assets/win2019.xml
index aa43463..b5d8235 100644
--- a/assets/win2019.xml
+++ b/assets/win2019.xml
@@ -243,11 +243,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -296,45 +291,60 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 18
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 20
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml
index 782752e..5748cb4 100644
--- a/assets/win2022-eval.xml
+++ b/assets/win2022-eval.xml
@@ -240,11 +240,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -293,45 +288,60 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 18
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 20
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2022.xml b/assets/win2022.xml
index 3b61f90..eac9414 100644
--- a/assets/win2022.xml
+++ b/assets/win2022.xml
@@ -243,11 +243,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -296,45 +291,60 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 14
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 15
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 16
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 17
+ 18
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 20
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml
index 9d90c77..5b92f00 100644
--- a/assets/win2025-eval.xml
+++ b/assets/win2025-eval.xml
@@ -159,6 +159,11 @@
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
Set Network Location to Home
+
+ 2
+ pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
+ Install VirtIO display driver
+
@@ -245,11 +250,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
-
- 3
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -257,7 +257,7 @@
5
- cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
Password Never Expires
@@ -277,69 +277,69 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 12
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 13
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 14
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
- Remove Search from the Taskbar
+ 15
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
- 15
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
-
- 21
- pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
- Install VirtIO display driver
-
22
cmd /C rd /q C:\Windows.old
@@ -347,6 +347,11 @@
23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2025.xml b/assets/win2025.xml
index 7e543a2..2796db6 100644
--- a/assets/win2025.xml
+++ b/assets/win2025.xml
@@ -162,6 +162,11 @@
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
Set Network Location to Home
+
+ 2
+ pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
+ Install VirtIO display driver
+
@@ -248,11 +253,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
-
- 3
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -260,7 +260,7 @@
5
- cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
Password Never Expires
@@ -280,69 +280,69 @@
9
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
+ Hide Copilot button
+
+
+ 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 10
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 12
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 13
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 14
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
- Remove Search from the Taskbar
+ 15
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
- 15
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 18
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
-
- 21
- pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf
- Install VirtIO display driver
-
22
cmd /C rd /q C:\Windows.old
@@ -350,6 +350,11 @@
23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml
new file mode 100644
index 0000000..c3cc15b
--- /dev/null
+++ b/assets/win7x64-enterprise-eval.xml
@@ -0,0 +1,283 @@
+
+
+
+
+
+ en-US
+
+ 0409:00000409
+ en-US
+ en-US
+ en-US
+
+
+
+ OnError
+
+ 0
+ true
+
+
+ 1
+ Primary
+ 100
+
+
+ 2
+ Primary
+ true
+
+
+
+
+ NTFS
+
+ 1
+ true
+ 1
+ 0x27
+
+
+ true
+ NTFS
+
+ C
+ 2
+ 2
+
+
+
+
+
+
+
+
+ Windows 7 Enterprise
+ /IMAGE/NAME
+
+
+
+ 0
+ 2
+
+ false
+
+
+
+ true
+ Never
+
+
+ false
+ Never
+
+
+ true
+ Docker
+ Windows for Docker
+
+ false
+
+ false
+
+
+
+
+
+ false
+
+
+
+
+ true
+
+
+ 1
+
+
+
+
+ true
+
+
+ *
+
+ Dockur
+ Windows for Docker
+
+
+
+ 1
+
+
+ true
+ true
+ https://google.com
+ about:blank
+
+
+ true
+ true
+ https://google.com
+ about:blank
+
+
+ 0
+
+
+ 1
+
+
+ 0409:00000409
+ en-US
+ en-US
+ en-US
+
+
+ false
+
+
+ 0
+
+
+
+
+ true
+ all
+ @FirewallAPI.dll,-28752
+
+
+
+
+
+
+
+
+
+ Docker
+ Administrators
+
+
+ true
+
+
+
+
+ password
+ true
+
+
+
+ Docker
+ true
+ 65432
+
+
+ true
+
+
+
+ 32
+ 1920
+ 1080
+
+
+ true
+ true
+ Home
+ 3
+ true
+ true
+
+ Dockur
+ Windows for Docker
+
+
+ 1
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
+ Allow guest access to network shares
+
+
+ 3
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
+ Password Never Expires
+
+
+ 4
+ cmd /C POWERCFG -H OFF
+ Disable Hibernation
+
+
+ 5
+ cmd /C POWERCFG -X -monitor-timeout-ac 0
+ Disable monitor blanking
+
+
+ 6
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 7
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f
+ Disable Network Discovery popup
+
+
+ 8
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f
+ Disable Network Discovery popup
+
+
+ 9
+ reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f
+ Disable first-run experience in Edge
+
+
+ 10
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
+ Show file extensions in Explorer
+
+
+ 11
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
+ Zero Hibernation File
+
+
+ 12
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
+ Disable Hibernation
+
+
+ 13
+ cmd /C POWERCFG -X -standby-timeout-ac 0
+ Disable Sleep
+
+
+ 14
+ reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
+ Enable RemoteAPP to launch unlisted programs
+
+
+ 15
+ netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
+ Enable Network Discovery
+
+
+ 16
+ netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
+ Enable File Sharing
+
+
+ 17
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 18
+ cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
+ Execute custom script from the OEM folder if exists
+
+
+
+
+
diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml
index 14c4060..b362a9f 100644
--- a/assets/win7x64-enterprise.xml
+++ b/assets/win7x64-enterprise.xml
@@ -201,11 +201,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -278,6 +273,11 @@
17
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml
index f3c1ae3..2ee085a 100644
--- a/assets/win7x64-ultimate.xml
+++ b/assets/win7x64-ultimate.xml
@@ -201,11 +201,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -278,6 +273,11 @@
17
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x64.xml b/assets/win7x64.xml
index b9f2908..3769dfd 100644
--- a/assets/win7x64.xml
+++ b/assets/win7x64.xml
@@ -201,11 +201,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -278,6 +273,11 @@
17
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml
index ef606e5..7ac8ef0 100644
--- a/assets/win7x86-enterprise.xml
+++ b/assets/win7x86-enterprise.xml
@@ -201,11 +201,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -278,6 +273,11 @@
17
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml
index f0748cd..419a508 100644
--- a/assets/win7x86-ultimate.xml
+++ b/assets/win7x86-ultimate.xml
@@ -201,11 +201,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -278,6 +273,11 @@
17
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x86.xml b/assets/win7x86.xml
index c5cd323..bae5a8f 100644
--- a/assets/win7x86.xml
+++ b/assets/win7x86.xml
@@ -201,11 +201,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -278,6 +273,11 @@
17
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml
index 2fe8c73..745fd9d 100644
--- a/assets/win81x64-enterprise-eval.xml
+++ b/assets/win81x64-enterprise-eval.xml
@@ -221,11 +221,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -274,25 +269,40 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 14
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 15
+ 16
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 17
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 16
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 19
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml
index d6c72dc..a073c38 100644
--- a/assets/win81x64-enterprise.xml
+++ b/assets/win81x64-enterprise.xml
@@ -224,11 +224,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -277,25 +272,40 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 14
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 15
+ 16
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 17
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 16
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 19
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win81x64.xml b/assets/win81x64.xml
index e5e268e..6b45785 100644
--- a/assets/win81x64.xml
+++ b/assets/win81x64.xml
@@ -231,11 +231,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -284,25 +279,40 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
13
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 14
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 15
+ 16
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
+ Disable Network Discovery popup
+
+
+ 17
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 16
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 19
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml
index 50527a0..a3dac19 100644
--- a/assets/winvistax64-enterprise.xml
+++ b/assets/winvistax64-enterprise.xml
@@ -150,11 +150,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -238,20 +233,30 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
20
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml
index 14c627d..eb12e60 100644
--- a/assets/winvistax64-ultimate.xml
+++ b/assets/winvistax64-ultimate.xml
@@ -150,11 +150,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -238,20 +233,30 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
20
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml
index f753ea3..ad2ac70 100644
--- a/assets/winvistax64.xml
+++ b/assets/winvistax64.xml
@@ -150,11 +150,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -238,20 +233,30 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
20
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml
index d087355..5092331 100644
--- a/assets/winvistax86-enterprise.xml
+++ b/assets/winvistax86-enterprise.xml
@@ -150,11 +150,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -238,20 +233,30 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
20
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml
index 417722e..97ad23e 100644
--- a/assets/winvistax86-ultimate.xml
+++ b/assets/winvistax86-ultimate.xml
@@ -150,11 +150,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -238,20 +233,30 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
20
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml
index 172e5dd..ade1942 100644
--- a/assets/winvistax86.xml
+++ b/assets/winvistax86.xml
@@ -150,11 +150,6 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
-
- 2
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
- Allow RDP login with blank password
-
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -238,20 +233,30 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteAPP to launch unlisted programs
+ Enable RemoteApp to launch unlisted programs
20
+ reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
+ Disable RemoteApp allowlist
+
+
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 22
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
+
+
+ 24
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/compose.yml b/compose.yml
index 9d0134b..e5b6257 100644
--- a/compose.yml
+++ b/compose.yml
@@ -6,10 +6,14 @@ services:
VERSION: "11"
devices:
- /dev/kvm
+ - /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
+ volumes:
+ - ./windows:/storage
+ restart: always
stop_grace_period: 2m
diff --git a/kubernetes.yml b/kubernetes.yml
index efa668d..fa8eef0 100644
--- a/kubernetes.yml
+++ b/kubernetes.yml
@@ -1,74 +1,100 @@
+---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: windows-pvc
spec:
accessModes:
- - ReadWriteOnce
+ - ReadWriteOnce
resources:
requests:
storage: 64Gi
---
-apiVersion: v1
-kind: Pod
+apiVersion: apps/v1
+kind: Deployment
metadata:
name: windows
labels:
name: windows
spec:
- terminationGracePeriodSeconds: 120 # the Kubernetes default is 30 seconds and it may be not enough
- containers:
- - name: windows
- image: dockurr/windows
- ports:
- - containerPort: 8006
- protocol: TCP
- - containerPort: 3389
- protocol: TCP
- - containerPort: 3389
- protocol: UDP
- securityContext:
- privileged: true
- env:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: windows
+ template:
+ metadata:
+ labels:
+ app: windows
+ spec:
+ containers:
+ - name: windows
+ image: dockurr/windows
+ env:
- name: VERSION
value: "11"
- - name: RAM_SIZE
- value: "4G"
- - name: CPU_CORES
- value: "2"
- name: DISK_SIZE
value: "64G"
- volumeMounts:
+ ports:
+ - containerPort: 8006
+ name: http
+ protocol: TCP
+ - containerPort: 3389
+ name: rdp
+ protocol: TCP
+ - containerPort: 3389
+ name: udp
+ protocol: UDP
+ - containerPort: 5900
+ name: vnc
+ protocol: TCP
+ securityContext:
+ capabilities:
+ add:
+ - NET_ADMIN
+ privileged: true
+ volumeMounts:
- mountPath: /storage
name: storage
- mountPath: /dev/kvm
name: dev-kvm
- volumes:
- - name: storage
- persistentVolumeClaim:
- claimName: windows-pvc
- - name: dev-kvm
- hostPath:
- path: /dev/kvm
+ - mountPath: /dev/net/tun
+ name: dev-tun
+ terminationGracePeriodSeconds: 120
+ volumes:
+ - name: storage
+ persistentVolumeClaim:
+ claimName: windows-pvc
+ - hostPath:
+ path: /dev/kvm
+ name: dev-kvm
+ - hostPath:
+ path: /dev/net/tun
+ type: CharDevice
+ name: dev-tun
---
apiVersion: v1
kind: Service
metadata:
name: windows
spec:
- type: NodePort
- selector:
- name: windows
+ internalTrafficPolicy: Cluster
ports:
- - name: tcp-8006
- protocol: TCP
+ - name: http
port: 8006
- targetPort: 8006
- - name: tcp-3389
protocol: TCP
+ targetPort: 8006
+ - name: rdp
port: 3389
+ protocol: TCP
targetPort: 3389
- - name: udp-3389
+ - name: udp
+ port: 3389
protocol: UDP
- port: 3389
targetPort: 3389
+ - name: vnc
+ port: 5900
+ protocol: TCP
+ targetPort: 5900
+ selector:
+ app: windows
+ type: ClusterIP
diff --git a/readme.md b/readme.md
index 4ad3c42..adbb6bf 100644
--- a/readme.md
+++ b/readme.md
@@ -26,7 +26,7 @@ Windows inside a Docker container.
## Usage 🐳
-Via Docker Compose:
+##### Via Docker Compose:
```yaml
services:
@@ -37,34 +37,46 @@ services:
VERSION: "11"
devices:
- /dev/kvm
+ - /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
+ volumes:
+ - ./windows:/storage
+ restart: always
stop_grace_period: 2m
```
-Via Docker CLI:
+##### Via Docker CLI:
```bash
-docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows
+docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows
```
-Via Kubernetes:
+##### Via Kubernetes:
```shell
-kubectl apply -f kubernetes.yml
+kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
```
+##### Via Github Codespaces:
+
+[](https://codespaces.new/dockur/windows)
+
+##### Via a graphical installer:
+
+[](https://winboat.app)
+
## FAQ 💬
### How do I use it?
Very simple! These are the steps:
- - Start the container and connect to [port 8006](http://localhost:8006) using your web browser.
+ - Start the container and connect to [port 8006](http://127.0.0.1:8006/) using your web browser.
- Sit back and relax while the magic happens, the whole installation will be performed fully automatic.
@@ -74,7 +86,7 @@ kubectl apply -f kubernetes.yml
### How do I select the Windows version?
- By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded:
+ By default, Windows 11 Pro will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded:
```yaml
environment:
@@ -83,29 +95,29 @@ kubectl apply -f kubernetes.yml
Select from the values below:
- | **Value** | **Version** | **Size** |
+ | **Value** | **Version** | **Size** |
|---|---|---|
- | `11` | Windows 11 Pro | 5.4 GB |
- | `11l` | Windows 11 LTSC | 4.2 GB |
- | `11e` | Windows 11 Enterprise | 5.8 GB |
+ | `11` | Windows 11 Pro | 7.2 GB |
+ | `11l` | Windows 11 LTSC | 4.7 GB |
+ | `11e` | Windows 11 Enterprise | 6.6 GB |
||||
- | `10` | Windows 10 Pro | 5.7 GB |
- | `10l` | Windows 10 LTSC | 4.6 GB |
- | `10e` | Windows 10 Enterprise | 5.2 GB |
+ | `10` | Windows 10 Pro | 5.7 GB |
+ | `10l` | Windows 10 LTSC | 4.6 GB |
+ | `10e` | Windows 10 Enterprise | 5.2 GB |
||||
- | `8` | Windows 8.1 Pro | 4.0 GB |
- | `8e` | Windows 8.1 Enterprise | 3.7 GB |
- | `7e` | Windows 7 Enterprise | 3.0 GB |
- | `ve` | Windows Vista Enterprise | 3.0 GB |
- | `xp` | Windows XP Professional | 0.6 GB |
- ||||
- | `2025` | Windows Server 2025 | 5.0 GB |
- | `2022` | Windows Server 2022 | 4.7 GB |
- | `2019` | Windows Server 2019 | 5.3 GB |
- | `2016` | Windows Server 2016 | 6.5 GB |
- | `2012` | Windows Server 2012 | 4.3 GB |
- | `2008` | Windows Server 2008 | 3.0 GB |
- | `2003` | Windows Server 2003 | 0.6 GB |
+ | `8e` | Windows 8.1 Enterprise | 3.7 GB |
+ | `7u` | Windows 7 Ultimate | 3.1 GB |
+ | `vu` | Windows Vista Ultimate | 3.0 GB |
+ | `xp` | Windows XP Professional | 0.6 GB |
+ | `2k` | Windows 2000 Professional | 0.4 GB |
+ ||||
+ | `2025` | Windows Server 2025 | 6.7 GB |
+ | `2022` | Windows Server 2022 | 6.0 GB |
+ | `2019` | Windows Server 2019 | 5.3 GB |
+ | `2016` | Windows Server 2016 | 6.5 GB |
+ | `2012` | Windows Server 2012 | 4.3 GB |
+ | `2008` | Windows Server 2008 | 3.0 GB |
+ | `2003` | Windows Server 2003 | 0.6 GB |
> [!TIP]
> To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/).
@@ -116,10 +128,10 @@ kubectl apply -f kubernetes.yml
```yaml
volumes:
- - /var/win:/storage
+ - ./windows:/storage
```
- Replace the example path `/var/win` with the desired storage folder.
+ Replace the example path `./windows` with the desired storage folder or named volume.
### How do I change the size of the disk?
@@ -131,65 +143,24 @@ kubectl apply -f kubernetes.yml
```
> [!TIP]
-> This can also be used to resize the existing disk to a larger capacity without any data loss.
+> This can also be used to resize the existing disk to a larger capacity without any data loss. However you will need to [manually extend the disk partition](https://learn.microsoft.com/en-us/windows-server/storage/disk-management/extend-a-basic-volume?tabs=disk-management) since the added disk space will appear as unallocated.
### How do I share files with the host?
- Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file:
+ After installation there will be a folder called `Shared` on your desktop, which can be used to exchange files with the host machine.
+
+ To select a folder on the host for this purpose, include the following bind mount in your compose file:
```yaml
volumes:
- - /home/user/example:/data
+ - ./example:/shared
```
- The example folder `/home/user/example` will be available as ` \\host.lan\Data`.
-
-> [!TIP]
-> You can map this path to a drive letter in Windows, for easier access.
-
-### How do I install a custom image?
-
- In order to download an unsupported ISO image that is not selectable from the list above, specify the URL of that ISO in the `VERSION` environment variable, for example:
-
- ```yaml
- environment:
- VERSION: "https://example.com/win.iso"
- ```
-
- Alternatively, you can also skip the download and use a local file instead, by binding it in your compose file in this way:
-
- ```yaml
- volumes:
- - /home/user/example.iso:/custom.iso
- ```
-
- Replace the example path `/home/user/example.iso` with the filename of your desired ISO file, the value of `VERSION` will be ignored in this case.
-
-### How do I run a script after installation?
-
- To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). Then bind that folder in your compose file like this:
-
- ```yaml
- volumes:
- - /home/user/example:/oem
- ```
-
- The example folder `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed during the last step.
-
-### How do I perform a manual installation?
-
- It's best to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment.
-
- However, if you insist on performing the installation manually, add the following environment variable to your compose file:
-
- ```yaml
- environment:
- MANUAL: "Y"
- ```
+ Replace the example path `./example` with your desired shared folder, which then will become visible as `Shared`.
### How do I change the amount of CPU or RAM?
- By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM.
+ By default, Windows will be allowed to use 2 CPU cores and 4 GB of RAM.
If you want to adjust this, you can specify the desired amount using the following environment variables:
@@ -201,9 +172,9 @@ kubectl apply -f kubernetes.yml
### How do I configure the username and password?
- By default, a user called `Docker` is created during the installation, with an empty password.
+ By default, a user called `Docker` is created and its password is `admin`.
- If you want to use different credentials, you can change them in your compose file:
+ If you want to use different credentials during installation, you can configure them in your compose file:
```yaml
environment:
@@ -213,7 +184,9 @@ kubectl apply -f kubernetes.yml
### How do I select the Windows language?
- By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language:
+ By default, the English version of Windows will be downloaded.
+
+ But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language to be downloaded:
```yaml
environment:
@@ -224,7 +197,7 @@ kubectl apply -f kubernetes.yml
### How do I select the keyboard layout?
- If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this:
+ If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this:
```yaml
environment:
@@ -232,15 +205,53 @@ kubectl apply -f kubernetes.yml
KEYBOARD: "en-US"
```
-> [!NOTE]
-> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case.
->
+### How do I install a custom image?
+
+ In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable:
+
+ ```yaml
+ environment:
+ VERSION: "https://example.com/win.iso"
+ ```
+
+ Alternatively, you can also skip the download and use a local file instead, by binding it in your compose file in this way:
+
+ ```yaml
+ volumes:
+ - ./example.iso:/boot.iso
+ ```
+
+ Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case.
+
+### How do I run a script after installation?
+
+ To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example).
+
+ Then bind that folder in your compose file like this:
+
+ ```yaml
+ volumes:
+ - ./example:/oem
+ ```
+
+ The example folder `./example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation.
+
+### How do I perform a manual installation?
+
+ It's recommended to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment.
+
+ However, if you insist on performing the installation manually at your own risk, add the following environment variable to your compose file:
+
+ ```yaml
+ environment:
+ MANUAL: "Y"
+ ```
### How do I connect using RDP?
The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example.
- So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and by leaving the password empty.
+ So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and password `admin`.
There is a RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box.
@@ -285,7 +296,7 @@ kubectl apply -f kubernetes.yml
After configuring the container for [macvlan](#how-do-i-assign-an-individual-ip-address-to-the-container), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC.
- To enable this mode, add the following lines to your compose file:
+ To enable this mode, in which the container and Windows will have separate IP addresses, add the following lines to your compose file:
```yaml
environment:
@@ -296,9 +307,6 @@ kubectl apply -f kubernetes.yml
- 'c *:* rwm'
```
-> [!NOTE]
-> In this mode, the container and Windows will each have their own separate IPs.
-
### How do I add multiple disks?
To create additional disks, modify your compose file like this:
@@ -308,18 +316,18 @@ kubectl apply -f kubernetes.yml
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- - /home/example:/storage2
- - /mnt/data/example:/storage3
+ - ./example2:/storage2
+ - ./example3:/storage3
```
### How do I pass-through a disk?
- It is possible to pass-through disk devices directly by adding them to your compose file in this way:
+ It is possible to pass-through disk devices or partitions directly by adding them to your compose file in this way:
```yaml
devices:
- /dev/sdb:/disk1
- - /dev/sdc:/disk2
+ - /dev/sdc1:/disk2
```
Use `/disk1` if you want it to become your main drive (which will be formatted during installation), and use `/disk2` and higher to add them as secondary drives (which will stay untouched).
@@ -335,14 +343,20 @@ kubectl apply -f kubernetes.yml
- /dev/bus/usb
```
-> [!IMPORTANT]
-> If the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged.
+ If the device is a USB disk drive, please wait until after the installation is fully completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged.
### How do I verify if my system supports KVM?
- Only Linux and Windows 11 support KVM virtualization, macOS and Windows 10 do not unfortunately.
-
- You can run the following commands in Linux to check your system:
+ First check if your software is compatible using this chart:
+
+ | **Product** | **Linux** | **Win11** | **Win10** | **macOS** |
+ |---|---|---|---|---|
+ | Docker CLI | ✅ | ✅ | ❌ | ❌ |
+ | Docker Desktop | ❌ | ✅ | ❌ | ❌ |
+ | Podman CLI | ✅ | ✅ | ❌ | ❌ |
+ | Podman Desktop | ✅ | ✅ | ❌ | ❌ |
+
+ After that you can run the following commands in Linux to check your system:
```bash
sudo apt install cpu-checker
@@ -357,23 +371,20 @@ kubectl apply -f kubernetes.yml
- you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's.
- If you do not receive any error from `kvm-ok` but the container still complains about KVM, please check whether:
-
- - you are not using "Docker Desktop for Linux" as it does not support KVM, instead make use of Docker Engine directly.
-
- - it could help to add `privileged: true` to your compose file (or `sudo` to your `run` command), to rule out any permission issue.
+ If you did not receive any error from `kvm-ok` but the container still complains about a missing KVM device, it could help to add `privileged: true` to your compose file (or `sudo` to your `docker` command) to rule out any permission issue.
### How do I run macOS in a container?
You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation.
+### How do I run a Linux desktop in a container?
+
+ You can use [qemus/qemu](https://github.com/qemus/qemu) in that case.
+
### Is this project legal?
Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal.
-## Stars 🌟
-[](https://starchart.cc/dockur/windows)
-
## Disclaimer ⚖️
*The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation.*
diff --git a/src/define.sh b/src/define.sh
index a2706e3..3db2069 100644
--- a/src/define.sh
+++ b/src/define.sh
@@ -1,10 +1,12 @@
#!/usr/bin/env bash
set -Eeuo pipefail
-: "${XRES:=""}"
-: "${YRES:=""}"
+: "${KEY:=""}"
+: "${WIDTH:=""}"
+: "${HEIGHT:=""}"
: "${VERIFY:=""}"
: "${REGION:=""}"
+: "${EDITION:=""}"
: "${MANUAL:=""}"
: "${REMOVE:=""}"
: "${VERSION:=""}"
@@ -15,7 +17,6 @@ set -Eeuo pipefail
: "${PASSWORD:=""}"
MIRRORS=4
-PLATFORM="x64"
parseVersion() {
@@ -23,6 +24,7 @@ parseVersion() {
VERSION="${VERSION:1:-1}"
fi
+ VERSION=$(expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$")
[ -z "$VERSION" ] && VERSION="win11"
case "${VERSION,,}" in
@@ -32,11 +34,11 @@ parseVersion() {
"11e" | "win11e" | "windows11e" | "windows 11e" )
VERSION="win11x64-enterprise-eval"
;;
- "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" )
+ "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" )
VERSION="win11x64-enterprise-iot-eval"
[ -z "$DETECTED" ] && DETECTED="win11x64-iot"
;;
- "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" )
+ "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" )
VERSION="win11x64-enterprise-ltsc-eval"
[ -z "$DETECTED" ] && DETECTED="win11x64-ltsc"
;;
@@ -46,11 +48,11 @@ parseVersion() {
"10e" | "win10e" | "windows10e" | "windows 10e" )
VERSION="win10x64-enterprise-eval"
;;
- "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" )
+ "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" )
VERSION="win10x64-enterprise-iot-eval"
[ -z "$DETECTED" ] && DETECTED="win10x64-iot"
;;
- "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" )
+ "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" )
VERSION="win10x64-enterprise-ltsc-eval"
[ -z "$DETECTED" ] && DETECTED="win10x64-ltsc"
;;
@@ -60,27 +62,45 @@ parseVersion() {
"8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" )
VERSION="win81x64-enterprise-eval"
;;
- "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" )
+ "7" | "win7" | "windows7" | "windows 7" )
VERSION="win7x64"
- [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise"
+ [ -z "$DETECTED" ] && DETECTED="win7x64-ultimate"
;;
"7u" | "win7u" | "windows7u" | "windows 7u" )
VERSION="win7x64-ultimate"
;;
- "7x86" | "win7x86" | "windows7x86" | "win7x86-enterprise" )
+ "7e" | "win7e" | "windows7e" | "windows 7e" )
+ VERSION="win7x64-enterprise"
+ ;;
+ "7x86" | "win7x86" | "win732" | "windows7x86" )
VERSION="win7x86"
- [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise"
+ [ -z "$DETECTED" ] && DETECTED="win7x86-ultimate"
;;
- "vista" | "ve" | "6" | "winvista" | "windowsvista" | "windows vista" )
+ "7ux86" | "7u32" | "win7x86-ultimate" )
+ VERSION="win7x86-ultimate"
+ ;;
+ "7ex86" | "7e32" | "win7x86-enterprise" )
+ VERSION="win7x86-enterprise"
+ ;;
+ "vista" | "vs" | "6" | "winvista" | "windowsvista" | "windows vista" )
VERSION="winvistax64"
- [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise"
+ [ -z "$DETECTED" ] && DETECTED="winvistax64-ultimate"
;;
- "vistu" | "vu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" )
+ "vistu" | "vu" | "6u" | "winvistu" )
VERSION="winvistax64-ultimate"
;;
- "vistax86" | "vex86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" )
+ "viste" | "ve" | "6e" | "winviste" )
+ VERSION="winvistax64-enterprise"
+ ;;
+ "vistax86" | "vista32" | "6x86" | "winvistax86" | "windowsvistax86" )
VERSION="winvistax86"
- [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise"
+ [ -z "$DETECTED" ] && DETECTED="winvistax86-ultimate"
+ ;;
+ "vux86" | "vu32" | "winvistax86-ultimate" )
+ VERSION="winvistax86-ultimate"
+ ;;
+ "vex86" | "ve32" | "winvistax86-enterprise" )
+ VERSION="winvistax86-enterprise"
;;
"xp" | "xp32" | "xpx86" | "5" | "5x86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" )
VERSION="winxpx86"
@@ -88,6 +108,9 @@ parseVersion() {
"xp64" | "xpx64" | "5x64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" )
VERSION="winxpx64"
;;
+ "2k" | "2000" | "win2k" | "win2000" | "windows2k" | "windows2000" )
+ VERSION="win2kx86"
+ ;;
"25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" )
VERSION="win2025-eval"
;;
@@ -100,6 +123,9 @@ parseVersion() {
"16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016" )
VERSION="win2016-eval"
;;
+ "hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv" )
+ VERSION="win2019-hv"
+ ;;
"2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012" )
VERSION="win2012r2-eval"
;;
@@ -109,6 +135,10 @@ parseVersion() {
"2003" | "2003r2" | "win2003" | "win2003r2" | "windows2003" | "windows 2003" )
VERSION="win2003r2"
;;
+ "nano11" | "nano 11" )
+ VERSION="nano11"
+ [ -z "$DETECTED" ] && DETECTED="win11x64"
+ ;;
"core11" | "core 11" )
VERSION="core11"
[ -z "$DETECTED" ] && DETECTED="win11x64"
@@ -132,163 +162,203 @@ getLanguage() {
local ret="$2"
local lang=""
local desc=""
+ local short=""
local culture=""
case "${id,,}" in
"ar" | "ar-"* )
+ short="ar"
lang="Arabic"
desc="$lang"
culture="ar-SA" ;;
"bg" | "bg-"* )
+ short="bg"
lang="Bulgarian"
desc="$lang"
culture="bg-BG" ;;
"cs" | "cs-"* | "cz" | "cz-"* )
+ short="cs"
lang="Czech"
desc="$lang"
culture="cs-CZ" ;;
"da" | "da-"* | "dk" | "dk-"* )
+ short="da"
lang="Danish"
desc="$lang"
culture="da-DK" ;;
"de" | "de-"* )
+ short="de"
lang="German"
desc="$lang"
culture="de-DE" ;;
"el" | "el-"* | "gr" | "gr-"* )
+ short="el"
lang="Greek"
desc="$lang"
culture="el-GR" ;;
"gb" | "en-gb" )
+ short="en-gb"
lang="English International"
desc="English"
culture="en-GB" ;;
"en" | "en-"* )
- lang="English (United States)"
+ short="en"
+ lang="English"
desc="English"
culture="en-US" ;;
"mx" | "es-mx" )
+ short="mx"
lang="Spanish (Mexico)"
desc="Spanish"
culture="es-MX" ;;
"es" | "es-"* )
+ short="es"
lang="Spanish"
desc="$lang"
culture="es-ES" ;;
"et" | "et-"* )
+ short="et"
lang="Estonian"
desc="$lang"
culture="et-EE" ;;
"fi" | "fi-"* )
+ short="fi"
lang="Finnish"
desc="$lang"
culture="fi-FI" ;;
"ca" | "fr-ca" )
+ short="ca"
lang="French Canadian"
desc="French"
culture="fr-CA" ;;
"fr" | "fr-"* )
+ short="fr"
lang="French"
desc="$lang"
culture="fr-FR" ;;
"he" | "he-"* | "il" | "il-"* )
+ short="he"
lang="Hebrew"
desc="$lang"
culture="he-IL" ;;
"hr" | "hr-"* | "cr" | "cr-"* )
+ short="hr"
lang="Croatian"
desc="$lang"
culture="hr-HR" ;;
"hu" | "hu-"* )
+ short="hu"
lang="Hungarian"
desc="$lang"
culture="hu-HU" ;;
"it" | "it-"* )
+ short="it"
lang="Italian"
desc="$lang"
culture="it-IT" ;;
"ja" | "ja-"* | "jp" | "jp-"* )
+ short="ja"
lang="Japanese"
desc="$lang"
culture="ja-JP" ;;
"ko" | "ko-"* | "kr" | "kr-"* )
+ short="ko"
lang="Korean"
desc="$lang"
culture="ko-KR" ;;
"lt" | "lt-"* )
+ short="lt"
lang="Lithuanian"
desc="$lang"
- culture="lv-LV" ;;
+ culture="lt-LT" ;;
"lv" | "lv-"* )
+ short="lv"
lang="Latvian"
desc="$lang"
- culture="lt-LT" ;;
+ culture="lv-LV" ;;
"nb" | "nb-"* |"nn" | "nn-"* | "no" | "no-"* )
+ short="no"
lang="Norwegian"
desc="$lang"
culture="nb-NO" ;;
"nl" | "nl-"* )
+ short="nl"
lang="Dutch"
desc="$lang"
culture="nl-NL" ;;
"pl" | "pl-"* )
+ short="pl"
lang="Polish"
desc="$lang"
culture="pl-PL" ;;
"br" | "pt-br" )
+ short="pt"
lang="Brazilian Portuguese"
desc="Portuguese"
culture="pt-BR" ;;
"pt" | "pt-"* )
+ short="pp"
lang="Portuguese"
desc="$lang"
culture="pt-BR" ;;
"ro" | "ro-"* )
+ short="ro"
lang="Romanian"
desc="$lang"
culture="ro-RO" ;;
"ru" | "ru-"* )
+ short="ru"
lang="Russian"
desc="$lang"
culture="ru-RU" ;;
"sk" | "sk-"* )
+ short="sk"
lang="Slovak"
desc="$lang"
culture="sk-SK" ;;
"sl" | "sl-"* | "si" | "si-"* )
+ short="sl"
lang="Slovenian"
desc="$lang"
culture="sl-SI" ;;
"sr" | "sr-"* )
+ short="sr"
lang="Serbian Latin"
desc="Serbian"
culture="sr-Latn-RS" ;;
"sv" | "sv-"* | "se" | "se-"* )
+ short="sv"
lang="Swedish"
desc="$lang"
culture="sv-SE" ;;
"th" | "th-"* )
+ short="th"
lang="Thai"
desc="$lang"
culture="th-TH" ;;
"tr" | "tr-"* )
+ short="tr"
lang="Turkish"
desc="$lang"
culture="tr-TR" ;;
"ua" | "ua-"* | "uk" | "uk-"* )
+ short="uk"
lang="Ukrainian"
desc="$lang"
culture="uk-UA" ;;
"hk" | "zh-hk" | "cn-hk" )
- lang="Chinese Traditional"
+ short="hk"
+ lang="Chinese (Traditional)"
desc="Chinese HK"
culture="zh-TW" ;;
"tw" | "zh-tw" | "cn-tw" )
- lang="Chinese Traditional"
+ short="tw"
+ lang="Chinese (Traditional)"
desc="Chinese TW"
culture="zh-TW" ;;
"zh" | "zh-"* | "cn" | "cn-"* )
- lang="Chinese Simplified"
+ short="cn"
+ lang="Chinese (Simplified)"
desc="Chinese"
culture="zh-CN" ;;
esac
@@ -296,6 +366,7 @@ getLanguage() {
case "${ret,,}" in
"desc" ) echo "$desc" ;;
"name" ) echo "$lang" ;;
+ "code" ) echo "$short" ;;
"culture" ) echo "$culture" ;;
*) echo "$desc";;
esac
@@ -365,6 +436,7 @@ printVersion() {
"tiny11"* ) desc="Tiny 11" ;;
"tiny10"* ) desc="Tiny 10" ;;
"core11"* ) desc="Core 11" ;;
+ "nano11"* ) desc="Nano 11" ;;
"win7"* ) desc="Windows 7" ;;
"win8"* ) desc="Windows 8" ;;
"win10"* ) desc="Windows 10" ;;
@@ -375,6 +447,7 @@ printVersion() {
"win95"* ) desc="Windows 95" ;;
"win2k"* ) desc="Windows 2000" ;;
"winvista"* ) desc="Windows Vista" ;;
+ "win2019-hv"* ) desc="Hyper-V Server" ;;
"win2003"* ) desc="Windows Server 2003" ;;
"win2008"* ) desc="Windows Server 2008" ;;
"win2012"* ) desc="Windows Server 2012" ;;
@@ -419,6 +492,9 @@ printEdition() {
*"-education" )
edition="Education"
;;
+ *"-hv" )
+ edition="2019"
+ ;;
*"-iot" | *"-iot-eval" )
edition="LTSC"
;;
@@ -440,11 +516,12 @@ printEdition() {
"winvista"* )
edition="Business"
;;
- "win2025"* | "win2022"* | "win2019"* | "win2016"* )
- edition="Standard"
- ;;
- "win2012"* | "win2008"* | "win2003"* )
- edition="Standard"
+ "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* | "win2003"* )
+ case "${EDITION^^}" in
+ *"DATACENTER"* ) edition="Datacenter" ;;
+ "CORE" | "STANDARDCORE" ) edition="Core" ;;
+ * ) edition="Standard" ;;
+ esac
;;
esac
@@ -461,7 +538,10 @@ fromFile() {
local file="${1,,}"
local arch="${PLATFORM,,}"
- case "${file// /_}" in
+ file="${file//-/_}"
+ file="${file// /_}"
+
+ case "$file" in
*"_x64_"* | *"_x64."*)
arch="x64"
;;
@@ -476,7 +556,7 @@ fromFile() {
local add=""
[[ "$arch" != "x64" ]] && add="$arch"
- case "${file// /_}" in
+ case "$file" in
"win7"* | "win_7"* | *"windows7"* | *"windows_7"* )
id="win7${arch}"
;;
@@ -495,6 +575,9 @@ fromFile() {
*"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* )
id="winvista${arch}"
;;
+ "nano11"* | "nano_11"* )
+ id="nano11"
+ ;;
"tiny11core"* | "tiny11_core"* | "tiny_11_core"* )
id="core11"
;;
@@ -504,6 +587,9 @@ fromFile() {
"tiny10"* | "tiny_10"* )
id="tiny10"
;;
+ *"_serverhypercore_"* )
+ id="win2019${add}-hv"
+ ;;
*"server2025"* | *"server_2025"* )
id="win2025${add}"
;;
@@ -548,7 +634,9 @@ fromName() {
*"windows 7"* ) id="win7${arch}" ;;
*"windows 8"* ) id="win81${arch}" ;;
*"windows 10"* ) id="win10${arch}" ;;
+ *"optimum 10"* ) id="win10${arch}" ;;
*"windows 11"* ) id="win11${arch}" ;;
+ *"optimum 11"* ) id="win11${arch}" ;;
*"windows vista"* ) id="winvista${arch}" ;;
*"server 2025"* ) id="win2025${add}" ;;
*"server 2022"* ) id="win2022${add}" ;;
@@ -557,6 +645,7 @@ fromName() {
*"server 2012"* ) id="win2012r2${add}" ;;
*"server 2008"* ) id="win2008r2${add}" ;;
*"server 2003"* ) id="win2003r2${add}" ;;
+ *"hyper-v server"* ) id="win2019${add}" ;;
esac
echo "$id"
@@ -577,6 +666,7 @@ getVersion() {
*" home"* ) id="$id-home" ;;
*" starter"* ) id="$id-starter" ;;
*" ultimate"* ) id="$id-ultimate" ;;
+ *" enterprise evaluation"* ) id="$id-enterprise-eval" ;;
*" enterprise"* ) id="$id-enterprise" ;;
esac
;;
@@ -599,6 +689,7 @@ getVersion() {
"win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* | "win2003"* )
case "${name,,}" in
*" evaluation"* ) id="$id-eval" ;;
+ *"hyper-v server"* ) id="$id-hv" ;;
esac
;;
esac
@@ -611,23 +702,9 @@ switchEdition() {
local id="$1"
- case "${id,,}" in
- "win11${PLATFORM,,}-enterprise-eval" )
- DETECTED="win11${PLATFORM,,}-enterprise"
- ;;
- "win10${PLATFORM,,}-enterprise-eval" )
- DETECTED="win10${PLATFORM,,}-enterprise"
- ;;
- "win81${PLATFORM,,}-enterprise-eval" )
- DETECTED="win81${PLATFORM,,}-enterprise"
- ;;
- "win2025-eval" ) DETECTED="win2025" ;;
- "win2022-eval" ) DETECTED="win2022" ;;
- "win2019-eval" ) DETECTED="win2019" ;;
- "win2016-eval" ) DETECTED="win2016" ;;
- "win2012r2-eval" ) DETECTED="win2012r2" ;;
- "win2008r2-eval" ) DETECTED="win2008r2" ;;
- esac
+ if [[ "${id,,}" == *"-eval" ]]; then
+ [ -z "$DETECTED" ] && DETECTED="${id::-5}"
+ fi
return 0
}
@@ -637,27 +714,27 @@ getMido() {
local id="$1"
local lang="$2"
local ret="$3"
+ local url=""
local sum=""
local size=""
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
"win11x64" )
- size=5819484160
- sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11"
+ size=7736125440
+ sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32"
+ url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso"
;;
"win11x64-enterprise-eval" )
- size=6209064960
- sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c"
+ size=7092807680
+ sum="a61adeab895ef5a4db436e0a7011c92a2ff17bb0357f58b13bbc4062e535e7b9"
+ url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso"
;;
- "win11x64-enterprise-ltsc-eval" )
- size=4428627968
- sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195"
- ;;
- "win11x64-enterprise-iot-eval" )
- size=4428627968
- sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195"
+ "win11x64-enterprise-iot-eval" | "win11x64-enterprise-ltsc-eval" )
+ size=5060020224
+ sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29"
+ url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso"
;;
"win10x64" )
size=6140975104
@@ -666,49 +743,59 @@ getMido() {
"win10x64-enterprise-eval" )
size=5550497792
sum="ef7312733a9f5d7d51cfa04ac497671995674ca5e1058d5164d6028f0938d668"
+ url="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66750/19045.2006.220908-0225.22h2_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso"
;;
"win10x64-enterprise-ltsc-eval" )
size=4898582528
sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5"
- ;;
- "win81x64" )
- size=4320526336
- sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51"
+ url="https://software-download.microsoft.com/download/pr/19044.1288.211006-0501.21h2_release_svc_refresh_CLIENT_LTSC_EVAL_x64FRE_en-us.iso"
;;
"win81x64-enterprise-eval" )
size=3961473024
sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2"
+ url="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO"
;;
"win2025-eval" )
- size=5307996160
- sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4"
+ size=6014152704
+ sum="d0ef4502e350e3c6c53c15b1b3020d38a5ded011bf04998e950720ac8579b23d"
+ url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1742.240906-0331.ge_release_svc_refresh_SERVER_EVAL_x64FRE_en-us.iso"
;;
"win2022-eval" )
size=5044094976
sum="3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325"
+ url="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso"
;;
"win2019-eval" )
size=5652088832
sum="6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb"
+ url="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso"
+ ;;
+ "win2019-hv" )
+ size=3072712704
+ sum="48e9b944518e5bbc80876a9a7ff99716f386f404f4be48dca47e16a66ae7872c"
+ url="https://software-download.microsoft.com/download/pr/17763.557.190612-0019.rs5_release_svc_refresh_SERVERHYPERCORE_OEM_x64FRE_en-us.ISO"
;;
"win2016-eval" )
size=6972221440
sum="1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f"
+ url="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO"
;;
"win2012r2-eval" )
size=4542291968
sum="6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5"
+ url="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO"
;;
"win2008r2" )
size=3166840832
sum="30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312"
+ url="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso"
;;
esac
case "${ret,,}" in
"sum" ) echo "$sum" ;;
"size" ) echo "$size" ;;
- *) echo "";;
+ *) echo "$url";;
esac
return 0
@@ -726,37 +813,35 @@ getLink1() {
local size=""
local host="https://dl.bobpony.com/windows"
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
"win11x64" | "win11x64-enterprise" | "win11x64-enterprise-eval" )
- size=5946128384
- sum="5bb1459034f50766ee480d895d751af73a4af30814240ae32ebc5633546a5af7"
- url="11/en-us_windows_11_23h2_x64.iso"
+ size=5332989952
+ sum="aa1ad990f930d907b7a34ea897abbb0dfbe47552ca8acc146f92e40381839e05"
+ url="11/en-us_windows_11_24h2_x64.iso"
;;
- "win11x64-iot" | "win11x64-enterprise-iot-eval" )
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
+ "win11x64-iot" | "win11x64-enterprise-iot" | "win11x64-enterprise-iot-eval" )
size=5144817664
sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso"
;;
- "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" )
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
+ "win11x64-ltsc" | "win11x64-enterprise-ltsc" | "win11x64-enterprise-ltsc-eval" )
size=5144817664
sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso"
;;
"win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" )
- size=5623582720
- sum="57371545d752a79a8a8b163b209c7028915da661de83516e06ddae913290a855"
+ size=5535252480
+ sum="557871965263d0fd0a1ea50b5d0d0d7cb04a279148ca905c1c675c9bc0d5486c"
url="10/en-us_windows_10_22h2_x64.iso"
;;
- "win10x64-iot" | "win10x64-enterprise-iot-eval" )
+ "win10x64-iot" | "win10x64-enterprise-iot" | "win10x64-enterprise-iot-eval" )
size=4851668992
sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160"
url="10/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso"
;;
- "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" )
+ "win10x64-ltsc" | "win10x64-enterprise-ltsc" | "win10x64-enterprise-ltsc-eval" )
size=4899461120
sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d"
url="10/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso"
@@ -766,15 +851,20 @@ getLink1() {
sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51"
url="8.x/8.1/en_windows_8.1_with_update_x64_dvd_6051480.iso"
;;
+ "win81x64-enterprise" | "win81x64-enterprise-eval" )
+ size=4139163648
+ sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1"
+ url="8.x/8.1/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso"
+ ;;
"win2025" | "win2025-eval" )
- size=5307176960
- sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3"
- url="server/2025/en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso"
+ size=6786627584
+ sum="bf3ef0849c7cb5e818e1035b7466d206af5aa227ace1a3f4b0de2bf00d2e2144"
+ url="server/2025/en-us_windows_server_2025_updated_april_2025_x64_dvd_ea86301d.iso"
;;
"win2022" | "win2022-eval" )
- size=5365624832
- sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db"
- url="server/2022/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso"
+ size=6005706752
+ sum="cea2cb2c09de9910c236e64eae3a801c55e9c77ec25e8d81585e3a4581d24bfb"
+ url="server/2022/en-us_windows_server_2022_updated_april_2025_x64_dvd_3f755ec1.iso"
;;
"win2019" | "win2019-eval" )
size=5575774208
@@ -796,36 +886,41 @@ getLink1() {
sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8"
url="server/2008r2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601-018.iso"
;;
- "win7x64" | "win7x64-enterprise" )
- size=3182604288
- sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
- url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
- ;;
- "win7x64-ultimate" )
+ "win7x64" | "win7x64-ultimate" )
size=3320836096
sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1"
url="7/en_windows_7_with_sp1_x64.iso"
;;
- "win7x86" | "win7x86-enterprise" )
- size=2434502656
- sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
- url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
+ "win7x64-enterprise" | "win7x64-enterprise-eval" )
+ size=3182604288
+ sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
+ url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
;;
- "win7x86-ultimate" )
+ "win7x86" | "win7x86-ultimate" )
size=2564411392
sum="99f3369c90160816be07093dbb0ac053e0a84e52d6ed1395c92ae208ccdf67e5"
url="7/en_windows_7_with_sp1_x86.iso"
;;
- "winvistax64-ultimate" )
+ "win7x86-enterprise" | "win7x86-enterprise-eval" )
+ size=2434502656
+ sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
+ url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
+ ;;
+ "winvistax64" | "winvistax64-ultimate" )
size=3861460992
sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
url="vista/en_windows_vista_sp2_x64_dvd_342267.iso"
;;
- "winvistax86-ultimate" )
+ "winvistax86" | "winvistax86-ultimate" )
size=3243413504
sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
url="vista/en_windows_vista_with_sp2_x86_dvd_342266.iso"
;;
+ "win2003r2" )
+ size=731650535
+ sum="6b64bbae7eb00fd000cc887ffdc9f224d00c557daad7f756cfa373950b880dc8"
+ url="server/2003r2/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_cd2.zip"
+ ;;
"winxpx86" )
size=617756672
sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
@@ -836,6 +931,11 @@ getLink1() {
sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6"
url="xp/professional/en_win_xp_pro_x64_vl.iso"
;;
+ "win2kx86" )
+ size=331701982
+ sum="a93251b31f92316411bb48458a695d9051b13cdeba714c46f105012fdda45bf3"
+ url="2000/5.00.2195.6717_x86fre_client-professional_retail_en-us.7z"
+ ;;
esac
case "${ret,,}" in
@@ -857,7 +957,7 @@ getLink2() {
local size=""
local host="https://files.dog/MSDN"
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
"win81x64" )
@@ -880,46 +980,46 @@ getLink2() {
sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8"
url="Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso"
;;
- "win7x64" | "win7x64-enterprise" )
- size=3182604288
- sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
- url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
- ;;
- "win7x64-ultimate" )
+ "win7x64" | "win7x64-ultimate" )
size=3320903680
sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso"
;;
- "win7x86" | "win7x86-enterprise" )
- size=2434502656
- sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
- url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
+ "win7x64-enterprise" | "win7x64-enterprise-eval" )
+ size=3182604288
+ sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
+ url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
;;
- "win7x86-ultimate" )
+ "win7x86" | "win7x86-ultimate" )
size=2564476928
sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
url="Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso"
;;
- "winvistax64" | "winvistax64-enterprise" )
- size=3205953536
- sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
- url="Windows%20Vista/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso"
+ "win7x86-enterprise" | "win7x86-enterprise-eval" )
+ size=2434502656
+ sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
+ url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
;;
- "winvistax64-ultimate" )
+ "winvistax64" | "winvistax64-ultimate" )
size=3861460992
sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
url="Windows%20Vista/en_windows_vista_sp2_x64_dvd_342267.iso"
;;
- "winvistax86" | "winvistax86-enterprise" )
- size=2420981760
- sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5"
- url="Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso"
+ "winvistax64-enterprise" )
+ size=3205953536
+ sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
+ url="Windows%20Vista/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso"
;;
- "winvistax86-ultimate" )
+ "winvistax86" | "winvistax86-ultimate" )
size=3243413504
sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
url="Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso"
;;
+ "winvistax86-enterprise" )
+ size=2420981760
+ sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5"
+ url="Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso"
+ ;;
"win2003r2" )
size=652367872
sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32"
@@ -948,887 +1048,36 @@ getLink2() {
getLink3() {
- # Fallbacks for users who cannot connect to the Microsoft servers
-
local id="$1"
local lang="$2"
local ret="$3"
local url=""
local sum=""
local size=""
- local host="https://drive.massgrave.dev"
- local w19="windows_server_2019_x64_dvd"
- local w25="windows_server_2025_x64_dvd"
- local w16="windows_server_2016_vl_x64_dvd"
- local w12="windows_server_2012_r2_vl_with_update_x64_dvd"
- local w08="windows_server_2008_r2_with_sp1_vl_build_x64_dvd"
- local w81="windows_8.1_enterprise_with_update_x64_dvd"
- local l11="windows_11_enterprise_ltsc_2024_x64_dvd"
- local l10="windows_10_enterprise_ltsc_2021_x64_dvd"
- local c11="windows_11_consumer_editions_version_24h2_x64_dvd"
- local b11="windows_11_business_editions_version_24h2_x64_dvd"
- local w22="windows_server_2022_updated_oct_2024_x64_dvd_d1a47ecc"
- local b10="windows_10_business_editions_version_22h2_updated_oct_2024_x64_dvd"
- local c10="windows_10_consumer_editions_version_22h2_updated_oct_2024_x64_dvd_d0cfb2e9"
+ local host="https://nixsys.com/drivers"
- culture=$(getLanguage "$lang" "culture")
+ [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
- "win11x64" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar-sa_${c11}_3c9a7ef3.iso" ;;
- "bg" | "bg-"* ) url="bg-bg_${c11}_f8623745.iso" ;;
- "cs" | "cs-"* ) url="cs-cz_${c11}_ae72ca80.iso" ;;
- "da" | "da-"* ) url="da-dk_${c11}_4f25c452.iso" ;;
- "de" | "de-"* ) url="de-de_${c11}_bc4adebe.iso" ;;
- "el" | "el-"* ) url="el-gr_${c11}_9e6ef9a0.iso" ;;
- "gb" | "en-gb" ) url="en-gb_${c11}_4b3a8183.iso" ;;
- "en" | "en-"* )
- size=5819484160
- sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11"
- url="en-us_${c11}_1d5fcad3.iso" ;;
- "mx" | "es-mx" ) url="es-es_${c11}_3bc0e5c3.iso" ;;
- "es" | "es-"* ) url="es-mx_${c11}_a28d9dab.iso" ;;
- "et" | "et-"* ) url="et-ee_${c11}_48306c65.iso" ;;
- "fi" | "fi-"* ) url="fi-fi_${c11}_21618747.iso" ;;
- "ca" | "fr-ca" ) url="fr-ca_${c11}_42755257.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${c11}_033875c5.iso" ;;
- "he" | "he-"* ) url="he-il_${c11}_533bc3ac.iso" ;;
- "hr" | "hr-"* ) url="hr-hr_${c11}_40c769ed.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${c11}_7d2259d6.iso" ;;
- "it" | "it-"* ) url="it-it_${c11}_33e81ff0.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${c11}_fc6538fd.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${c11}_f09a396b.iso" ;;
- "lt" | "lt-"* ) url="lt-lt_${c11}_22d54265.iso" ;;
- "lv" | "lv-"* ) url="lv-lv_${c11}_5ff65441.iso" ;;
- "nb" | "nb-"* ) url="nb-no_${c11}_5a5d625b.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${c11}_7959020a.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${c11}_c0dcd21b.iso" ;;
- "br" | "pt-br" ) url="pt-br_${c11}_751fe150.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${c11}_e0df188a.iso" ;;
- "ro" | "ro-"* ) url="ro-ro_${c11}_0821b265.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${c11}_784471d8.iso" ;;
- "sk" | "sk-"* ) url="sk-sk_${c11}_fd13020e.iso" ;;
- "sl" | "sl-"* ) url="sl-si_${c11}_9aa9f408.iso" ;;
- "sr" | "sr-"* ) url="sr-latn-rs_${c11}_febab1a9.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${c11}_fe34647f.iso" ;;
- "th" | "th-"* ) url="th-th_${c11}_fc3e523e.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${c11}_443fefaf.iso" ;;
- "uk" | "uk-"* ) url="uk-ua_${c11}_32966915.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${c11}_d0825b63.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${c11}_bfc0d79b.iso" ;;
- esac
+ "win7x64" | "win7x64-ultimate" )
+ size=3319478272
+ sum="3286963e1476082ba882a5058c205c264772bead9e99e15cd1cb255f04b72900"
+ url="WINDOWS764_EN_DVD.iso"
;;
- "win11x64-enterprise" | "win11x64-enterprise-eval" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar-sa_${b11}_47dae48e.iso" ;;
- "bg" | "bg-"* ) url="bg-bg_${b11}_4231caca.iso" ;;
- "cs" | "cs-"* ) url="cs-cz_${b11}_ca1661fd.iso" ;;
- "da" | "da-"* ) url="da-dk_${b11}_ac0db9fc.iso" ;;
- "de" | "de-"* ) url="de-de_${b11}_87a70226.iso" ;;
- "el" | "el-"* ) url="el-gr_${b11}_946ba34d.iso" ;;
- "gb" | "en-gb" ) url="en-gb_${b11}_27d8c2f1.iso" ;;
- "en" | "en-"* )
- size=5722114048
- sum="d0dca325314322518ae967d58c3061bcae57ee9743a8a1cf374aad8637e5e8ac"
- url="en-us_${b11}_59a1851e.iso" ;;
- "mx" | "es-mx" ) url="es-es_${b11}_86632f8d.iso" ;;
- "es" | "es-"* ) url="es-mx_${b11}_6ee25ce4.iso" ;;
- "et" | "et-"* ) url="et-ee_${b11}_c26c1e3a.iso" ;;
- "fi" | "fi-"* ) url="fi-fi_${b11}_59dd0bb5.iso" ;;
- "ca" | "fr-ca" ) url="fr-ca_${b11}_a02f0c99.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${b11}_c0a4510e.iso" ;;
- "he" | "he-"* ) url="he-il_${b11}_c844d280.iso" ;;
- "hr" | "hr-"* ) url="hr-hr_${b11}_6e4839cc.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${b11}_aed71101.iso" ;;
- "it" | "it-"* ) url="it-it_${b11}_5552c3a1.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${b11}_7fdb7541.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${b11}_646bb9fc.iso" ;;
- "lt" | "lt-"* ) url="lt-lt_${b11}_54d6d7e2.iso" ;;
- "lv" | "lv-"* ) url="lv-lv_${b11}_acee0541.iso" ;;
- "nb" | "nb-"* ) url="nb-no_${b11}_78f22960.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${b11}_0719b251.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${b11}_1a183794.iso" ;;
- "br" | "pt-br" ) url="pt-br_${b11}_ecc90645.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${b11}_e7bf77a1.iso" ;;
- "ro" | "ro-"* ) url="ro-ro_${b11}_9adc8d7b.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${b11}_f9b9b5d6.iso" ;;
- "sk" | "sk-"* ) url="sk-sk_${b11}_1a91433b.iso" ;;
- "sl" | "sl-"* ) url="sl-si_${b11}_0b79bd14.iso" ;;
- "sr" | "sr-"* ) url="sr-latn-rs_${b11}_8a4b35b5.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${b11}_55ad9818.iso" ;;
- "th" | "th-"* ) url="th-th_${b11}_a2a350c3.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${b11}_f35a9f1b.iso" ;;
- "uk" | "uk-"* ) url="uk-ua_${b11}_38ff1d1d.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_a9b30de5.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${b11}_5f9e5858.iso" ;;
- esac
- ;;
- "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar-sa_${l11}_8012f159.iso" ;;
- "bg" | "bg-"* ) url="bg-bg_${l11}_2778f4e8.iso" ;;
- "cs" | "cs-"* ) url="cs-cz_${l11}_d4ef05f2.iso" ;;
- "da" | "da-"* ) url="da-dk_${l11}_c231c267.iso" ;;
- "de" | "de-"* ) url="de-de_${l11}_4f136f69.iso" ;;
- "el" | "el-"* ) url="el-gr_${l11}_54eaabb2.iso" ;;
- "gb" | "en-gb" ) url="en-gb_${l11}_e2137661.iso" ;;
- "en" | "en-"* )
- size=5125844992
- sum="157d8365a517c40afeb3106fdd74d0836e1025debbc343f2080e1a8687607f51"
- url="en-us_${l11}_965cfb00.iso" ;;
- "mx" | "es-mx" ) url="es-mx_${l11}_3310c094.iso" ;;
- "es" | "es-"* ) url="es-es_${l11}_77392d61.iso" ;;
- "et" | "et-"* ) url="et-ee_${l11}_2dbd4bfe.iso" ;;
- "fi" | "fi-"* ) url="fi-fi_${l11}_998f5df6.iso" ;;
- "ca" | "fr-ca" ) url="fr-ca_${l11}_78732953.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${l11}_d66e386e.iso" ;;
- "he" | "he-"* ) url="he-il_${l11}_fae050ec.iso" ;;
- "hr" | "hr-"* ) url="hr-hr_${l11}_e3594411.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${l11}_8fea6034.iso" ;;
- "it" | "it-"* ) url="it-it_${l11}_1e8cabb6.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${l11}_e59ad418.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${l11}_b6b6eb18.iso" ;;
- "lt" | "lt-"* ) url="lt-lt_${l11}_145479e9.iso" ;;
- "lv" | "lv-"* ) url="lv-lv_${l11}_e0ebc53d.iso" ;;
- "nb" | "nb-"* ) url="nb-no_${l11}_d41eeb48.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${l11}_e3063aab.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${l11}_e00807a1.iso" ;;
- "br" | "pt-br" ) url="pt-br_${l11}_2bb6b75b.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${l11}_2f34bd6b.iso" ;;
- "ro" | "ro-"* ) url="ro-ro_${l11}_2eadb4df.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${l11}_f9af5773.iso" ;;
- "sk" | "sk-"* ) url="sk-sk_${l11}_03b916e7.iso" ;;
- "sl" | "sl-"* ) url="sl-si_${l11}_310b3a76.iso" ;;
- "sr" | "sr-"* ) url="sr-latn-rs_${l11}_3dfa5da5.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${l11}_191cf991.iso" ;;
- "th" | "th-"* ) url="th-th_${l11}_47ce2c8a.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${l11}_27bdab81.iso" ;;
- "uk" | "uk-"* ) url="uk-ua_${l11}_b3f00872.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${l11}_6287d84d.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${l11}_cff9cd2d.iso" ;;
- esac
- ;;
- "win11x64-iot" | "win11x64-enterprise-iot-eval" )
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
- size=5144817664
- sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
- url="en-us_windows_11_iot_enterprise_ltsc_2024_x64_dvd_f6b14814.iso"
- ;;
- "win10x64" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;;
- "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;;
- "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;;
- "da" | "da-"* ) url="da-dk_${c10}.iso" ;;
- "de" | "de-"* ) url="de-de_${c10}.iso" ;;
- "el" | "el-"* ) url="el-gr_${c10}.iso" ;;
- "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;;
- "en" | "en-"* )
- size=7176140800
- sum="dda45d271061937657689b30944c792be97405fd5ca2110094049dc01a9201ec"
- url="en-us_${c10}.iso" ;;
- "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;;
- "es" | "es-"* ) url="es-es_${c10}.iso" ;;
- "et" | "et-"* ) url="et-ee_${c10}.iso" ;;
- "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;;
- "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;;
- "he" | "he-"* ) url="he-il_${c10}.iso" ;;
- "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;;
- "it" | "it-"* ) url="it-it_${c10}.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;;
- "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;;
- "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;;
- "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;;
- "br" | "pt-br" ) url="pt-br_${c10}.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;;
- "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;;
- "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;;
- "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;;
- "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;;
- "th" | "th-"* ) url="th-th_${c10}.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;;
- "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;;
- esac
- ;;
- "win10x64-enterprise" | "win10x64-enterprise-eval" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar-sa_${b10}_72d26609.iso" ;;
- "bg" | "bg-"* ) url="bg-bg_${b10}_916cba75.iso" ;;
- "cs" | "cs-"* ) url="cs-cz_${b10}_737b3dce.iso" ;;
- "da" | "da-"* ) url="da-dk_${b10}_beb2874a.iso" ;;
- "de" | "de-"* ) url="de-de_${b10}_e5656293.iso" ;;
- "el" | "el-"* ) url="el-gr_${b10}_3dcced88.iso" ;;
- "gb" | "en-gb" ) url="en-gb_${b10}_4b87ccc8.iso" ;;
- "en" | "en-"* )
- size=6985318400
- sum="cd224fff371bbce4ab2120a3ace8ed30dc5c48c87f766ff699eed3327d0db83e"
- url="en-us_${b10}_66a185c7.iso" ;;
- "mx" | "es-mx" ) url="es-mx_${b10}_c71c3a9b.iso" ;;
- "es" | "es-"* ) url="es-es_${b10}_6a893bdb.iso" ;;
- "et" | "et-"* ) url="et-ee_${b10}_e73ca294.iso" ;;
- "fi" | "fi-"* ) url="fi-fi_${b10}_b4138a1f.iso" ;;
- "ca" | "fr-ca" ) url="fr-ca_${b10}_fa1fcfd1.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${b10}_2582115c.iso" ;;
- "he" | "he-"* ) url="he-il_${b10}_070da6e1.iso" ;;
- "hr" | "hr-"* ) url="hr-hr_${b10}_7ab0b83d.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${b10}_9ae1341c.iso" ;;
- "it" | "it-"* ) url="it-it_${b10}_ed9771c1.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${b10}_41fb6974.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${b10}_8ee84458.iso" ;;
- "lt" | "lt-"* ) url="lt-lt_${b10}_dde00c8b.iso" ;;
- "lv" | "lv-"* ) url="lv-lv_${b10}_3c6ec670.iso" ;;
- "nb" | "nb-"* ) url="nb-no_${b10}_5c0830a7.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${b10}_98c1911c.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${b10}_21470c6f.iso" ;;
- "br" | "pt-br" ) url="pt-br_${b10}_a8287ba4.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${b10}_927e183d.iso" ;;
- "ro" | "ro-"* ) url="ro-ro_${b10}_05768a51.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${b10}_e0d31c6c.iso" ;;
- "sk" | "sk-"* ) url="sk-sk_${b10}_a09d6210.iso" ;;
- "sl" | "sl-"* ) url="sl-si_${b10}_b6e9be37.iso" ;;
- "sr" | "sr-"* ) url="sr-latn-rs_${b10}_d3114222.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${b10}_4fbbd5fa.iso" ;;
- "th" | "th-"* ) url="th-th_${b10}_c820f914.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${b10}_62d51ca5.iso" ;;
- "uk" | "uk-"* ) url="uk-ua_${b10}_3d50cf88.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_2fab2287.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${b10}_52bd0537.iso" ;;
- esac
- ;;
- "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar-sa_${l10}_60bc2a7a.iso" ;;
- "bg" | "bg-"* ) url="bg-bg_${l10}_b0887275.iso" ;;
- "cs" | "cs-"* ) url="cs-cz_${l10}_d624c653.iso" ;;
- "da" | "da-"* ) url="da-dk_${l10}_6ec511bb.iso" ;;
- "de" | "de-"* ) url="de-de_${l10}_71796d33.iso" ;;
- "el" | "el-"* ) url="el-gr_${l10}_c83eab34.iso" ;;
- "gb" | "en-gb" ) url="en-gb_${l10}_7fe51fe8.iso" ;;
- "en" | "en-"* )
- size=4899461120
- sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d"
- url="en-us_${l10}_d289cf96.iso" ;;
- "mx" | "es-mx" ) url="es-mx_${l10}_f6aaf384.iso" ;;
- "es" | "es-"* ) url="es-es_${l10}_51d721ea.iso" ;;
- "et" | "et-"* ) url="et-ee_${l10}_012a5c50.iso" ;;
- "fi" | "fi-"* ) url="fi-fi_${l10}_551582d9.iso" ;;
- "ca" | "fr-ca" ) url="fr-ca_${l10}_2770e649.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${l10}_bda01eb0.iso" ;;
- "he" | "he-"* ) url="he-il_${l10}_3a55ecd6.iso" ;;
- "hr" | "hr-"* ) url="hr-hr_${l10}_f5085b75.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${l10}_d541ddb3.iso" ;;
- "it" | "it-"* ) url="it-it_${l10}_0c1aa034.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${l10}_ef58c6a1.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${l10}_6d26f398.iso" ;;
- "lt" | "lt-"* ) url="lt-lt_${l10}_9ffbbd5b.iso" ;;
- "lv" | "lv-"* ) url="lv-lv_${l10}_6c89d2e0.iso" ;;
- "nb" | "nb-"* ) url="nb-no_${l10}_c65c51a5.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${l10}_88f53466.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${l10}_eff40776.iso" ;;
- "br" | "pt-br" ) url="pt-br_${l10}_f318268e.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${l10}_f2e9b6a0.iso" ;;
- "ro" | "ro-"* ) url="ro-ro_${l10}_ae2284d6.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${l10}_5044a1e7.iso" ;;
- "sk" | "sk-"* ) url="sk-sk_${l10}_d6c64c5f.iso" ;;
- "sl" | "sl-"* ) url="sl-si_${l10}_ec090386.iso" ;;
- "sr" | "sr-"* ) url="sr-latn-rs_${l10}_2d2f8815.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${l10}_9a28bb6b.iso" ;;
- "th" | "th-"* ) url="th-th_${l10}_b7ed34d6.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${l10}_e55b1896.iso" ;;
- "uk" | "uk-"* ) url="uk-ua_${l10}_816da3c3.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${l10}_80dba877.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${l10}_033b7312.iso" ;;
- esac
- ;;
- "win10x64-iot" | "win10x64-enterprise-iot-eval" )
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
- size=4851668992
- sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160"
- url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso"
- ;;
- "win81x64-enterprise" | "win81x64-enterprise-eval" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_${w81}_6050360.iso" ;;
- "bg" | "bg-"* ) url="bg_${w81}_6050367.iso" ;;
- "cs" | "cs-"* ) url="cs_${w81}_6050393.iso" ;;
- "da" | "da-"* ) url="da_${w81}_6050394.iso" ;;
- "de" | "de-"* ) url="de_${w81}_6050501.iso" ;;
- "el" | "el-"* ) url="el_${w81}_6050503.iso" ;;
- "gb" | "en-gb" ) url="en-gb_${w81}_6054383.iso" ;;
- "en" | "en-"* )
- size=4139163648
- sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1"
- url="en_${w81}_6054382.iso" ;;
- "es" | "es-"* ) url="es_${w81}_6050578.iso" ;;
- "et" | "et-"* ) url="et_${w81}_6054384.iso" ;;
- "fi" | "fi-"* ) url="fi_${w81}_6050497.iso" ;;
- "fr" | "fr-"* ) url="fr_${w81}_6050499.iso" ;;
- "he" | "he-"* ) url="he_${w81}_6050504.iso" ;;
- "hr" | "hr-"* ) url="hr_${w81}_6050391.iso" ;;
- "hu" | "hu-"* ) url="hu_${w81}_6050505.iso" ;;
- "it" | "it-"* ) url="it_${w81}_6050507.iso" ;;
- "ja" | "ja-"* ) url="ja_${w81}_6050508.iso" ;;
- "ko" | "ko-"* ) url="ko_${w81}_6050509.iso" ;;
- "lt" | "lt-"* ) url="lt_${w81}_6050511.iso" ;;
- "lv" | "lv-"* ) url="lv_${w81}_6050510.iso" ;;
- "nb" | "nb-"* ) url="nb_${w81}_6050512.iso" ;;
- "nl" | "nl-"* ) url="nl_${w81}_6054381.iso" ;;
- "pl" | "pl-"* ) url="pl_${w81}_6050515.iso" ;;
- "br" | "pt-br" ) url="pt_${w81}_6050521.iso" ;;
- "pt" | "pt-"* ) url="pp_${w81}_6050526.iso" ;;
- "ro" | "ro-"* ) url="ro_${w81}_6050534.iso" ;;
- "ru" | "ru-"* ) url="ru_${w81}_6050542.iso" ;;
- "sk" | "sk-"* ) url="sk_${w81}_6050562.iso" ;;
- "sl" | "sl-"* ) url="sl_${w81}_6050570.iso" ;;
- "sr" | "sr-"* ) url="sr-latn_${w81}_6050553.iso" ;;
- "sv" | "sv-"* ) url="sv_${w81}_6050590.iso" ;;
- "th" | "th-"* ) url="th_${w81}_6050602.iso" ;;
- "tr" | "tr-"* ) url="tr_${w81}_6050609.iso" ;;
- "uk" | "uk-"* ) url="uk_${w81}_6050618.iso" ;;
- "zh-hk" ) url="hk_${w81}_6050380.iso" ;;
- "zh-tw" ) url="tw_${w81}_6050387.iso" ;;
- "zh" | "zh-"* ) url="cn_${w81}_6050374.iso" ;;
- esac
- ;;
- "win2025" | "win2025-eval" )
- case "${culture,,}" in
- "cs" | "cs-"* ) url="cs-cz_${w25}_4f54e1b0.iso" ;;
- "de" | "de-"* ) url="de-de_${w25}_5282a882.iso" ;;
- "en" | "en-"* )
- size=6013794304
- sum="854109e1f215a29fc3541188297a6ca97c8a8f0f8c4dd6236b78dfdf845bf75e"
- url="en-us_${w25}_b7ec10f3.iso" ;;
- "es" | "es-"* ) url="es-es_${w25}_c15f0ce2.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${w25}_bd6be507.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${w25}_e13eb8bf.iso" ;;
- "it" | "it-"* ) url="it-it_${w25}_98437899.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${w25}_7a2e979b.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${w25}_85109737.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${w25}_5c3218f3.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${w25}_aa368cf8.iso" ;;
- "br" | "pt-br" ) url="pt-br_${w25}_66107129.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${w25}_62bb3c31.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${w25}_2dfe1679.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${w25}_512bf117.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${w25}_a03fe256.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${w25}_6d2c01e3.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${w25}_1d93dd12.iso" ;;
- esac
- ;;
- "win2022" | "win2022-eval" )
- case "${culture,,}" in
- "cs" | "cs-"* ) url="cs-cz_${w22}.iso" ;;
- "de" | "de-"* ) url="de-de_${w22}.iso" ;;
- "en" | "en-"* )
- size=5973856256
- sum="61fa400b6e8f54e644529d024b18a578547147cdf815ea66c4b7961798717291"
- url="en-us_${w22}.iso" ;;
- "es" | "es-"* ) url="es-es_${w22}.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${w22}.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${w22}.iso" ;;
- "it" | "it-"* ) url="it-it_${w22}.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${w22}.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${w22}.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${w22}.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${w22}.iso" ;;
- "br" | "pt-br" ) url="pt-br_${w22}.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${w22}.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${w22}.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${w22}.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${w22}.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${w22}.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${w22}.iso" ;;
- esac
- ;;
- "win2019" | "win2019-eval" )
- case "${culture,,}" in
- "cs" | "cs-"* ) url="cs-cz_${w19}_3781c31c.iso" ;;
- "de" | "de-"* ) url="de-de_${w19}_132f7aa4.iso" ;;
- "en" | "en-"* )
- size=5651695616
- sum="ea247e5cf4df3e5829bfaaf45d899933a2a67b1c700a02ee8141287a8520261c"
- url="en-us_${w19}_f9475476.iso" ;;
- "es" | "es-"* ) url="es-es_${w19}_3ce0fd9e.iso" ;;
- "fr" | "fr-"* ) url="fr-fr_${w19}_f6f6acf6.iso" ;;
- "hu" | "hu-"* ) url="hu-hu_${w19}_1d834c46.iso" ;;
- "it" | "it-"* ) url="it-it_${w19}_454267de.iso" ;;
- "ja" | "ja-"* ) url="ja-jp_${w19}_3899c3a3.iso" ;;
- "ko" | "ko-"* ) url="ko-kr_${w19}_84101c0a.iso" ;;
- "nl" | "nl-"* ) url="nl-nl_${w19}_f69d914e.iso" ;;
- "pl" | "pl-"* ) url="pl-pl_${w19}_a50263e1.iso" ;;
- "br" | "pt-br" ) url="pt-br_${w19}_aee8c1c2.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_${w19}_464373e8.iso" ;;
- "ru" | "ru-"* ) url="ru-ru_${w19}_e02b76ba.iso" ;;
- "sv" | "sv-"* ) url="sv-se_${w19}_48c1aeff.iso" ;;
- "tr" | "tr-"* ) url="tr-tr_${w19}_b51af600.iso" ;;
- "zh-hk" | "zh-tw" ) url="zh-tw_${w19}_a4c80409.iso" ;;
- "zh" | "zh-"* ) url="zh-cn_${w19}_19d65722.iso" ;;
- esac
- ;;
- "win2016" | "win2016-eval" )
- case "${culture,,}" in
- "cs" | "cs-"* ) url="cs_${w16}_11636699.iso" ;;
- "de" | "de-"* ) url="de_${w16}_11636696.iso" ;;
- "en" | "en-"* )
- size=6003804160
- sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8"
- url="en_${w16}_11636701.iso" ;;
- "es" | "es-"* ) url="es_${w16}_11636712.iso" ;;
- "fr" | "fr-"* ) url="fr_${w16}_11636729.iso" ;;
- "hu" | "hu-"* ) url="hu_${w16}_11636720.iso" ;;
- "it" | "it-"* ) url="it_${w16}_11636710.iso" ;;
- "ja" | "ja-"* ) url="ja_${w16}_11645964.iso" ;;
- "ko" | "ko-"* ) url="ko_${w16}_11636709.iso" ;;
- "nl" | "nl-"* ) url="nl_${w16}_11636731.iso" ;;
- "pl" | "pl-"* ) url="pl_${w16}_11636719.iso" ;;
- "br" | "pt-br" ) url="pt_${w16}_11636697.iso" ;;
- "pt" | "pt-"* ) url="pp_${w16}_11637454.iso" ;;
- "ru" | "ru-"* ) url="ru_${w16}_11636694.iso" ;;
- "sv" | "sv-"* ) url="sv_${w16}_11636706.iso" ;;
- "tr" | "tr-"* ) url="tr_${w16}_11636725.iso" ;;
- "zh-hk" | "zh-tw" ) url="ct_${w16}_11636717.iso" ;;
- "zh" | "zh-"* ) url="cn_${w16}_11636695.iso" ;;
- esac
- ;;
- "win2012r2" | "win2012r2-eval" )
- case "${culture,,}" in
- "cs" | "cs-"* ) url="cs_${w12}_6052752.iso" ;;
- "de" | "de-"* ) url="de_${w12}_6052780.iso" ;;
- "en" | "en-"* )
- size=5400115200
- sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d"
- url="en_${w12}_6052766.iso" ;;
- "es" | "es-"* ) url="es_${w12}_6052831.iso" ;;
- "fr" | "fr-"* ) url="fr_${w12}_6052772.iso" ;;
- "hu" | "hu-"* ) url="hu_${w12}_6052786.iso" ;;
- "it" | "it-"* ) url="it_${w12}_6052792.iso" ;;
- "ja" | "ja-"* ) url="ja_${w12}_6052800.iso" ;;
- "ko" | "ko-"* ) url="ko_${w12}_6052806.iso" ;;
- "nl" | "nl-"* ) url="nl_${w12}_6052760.iso" ;;
- "pl" | "pl-"* ) url="pl_${w12}_6052815.iso" ;;
- "br" | "pt-br" ) url="pt_${w12}_6052819.iso" ;;
- "pt" | "pt-"* ) url="pp_${w12}_6052823.iso" ;;
- "ru" | "ru-"* ) url="ru_${w12}_6052827.iso" ;;
- "sv" | "sv-"* ) url="sv_${w12}_6052835.iso" ;;
- "tr" | "tr-"* ) url="tr_${w12}_6052838.iso" ;;
- "zh-hk" ) url="hk_${w12}_6052739.iso" ;;
- "zh-tw" ) url="tw_${w12}_6052746.iso" ;;
- "zh" | "zh-"* ) url="cn_${w12}_6052729.iso" ;;
- esac
- ;;
- "win2008r2" | "win2008r2-eval" )
- case "${culture,,}" in
- "cs" | "cs-"* ) url="cs_${w08}_617402.iso" ;;
- "de" | "de-"* ) url="de_${w08}_617404.iso" ;;
- "en" | "en-"* )
- size=3166720000
- sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f"
- url="en_${w08}_617403.iso" ;;
- "es" | "es-"* ) url="es_${w08}_617410.iso" ;;
- "fr" | "fr-"* ) url="fr_${w08}_617392.iso" ;;
- "hu" | "hu-"* ) url="hu_${w08}_617415.iso" ;;
- "it" | "it-"* ) url="it_${w08}_619596.iso" ;;
- "ja" | "ja-"* ) url="ja_${w08}_631466.iso" ;;
- "ko" | "ko-"* ) url="ko_${w08}_617409.iso" ;;
- "nl" | "nl-"* ) url="nl_${w08}_617395.iso" ;;
- "pl" | "pl-"* ) url="pl_${w08}_617397.iso" ;;
- "br" | "pt-br" ) url="pt_${w08}_617394.iso" ;;
- "pt" | "pt-"* ) url="pp_${w08}_617411.iso" ;;
- "ru" | "ru-"* ) url="ru_${w08}_617421.iso" ;;
- "sv" | "sv-"* ) url="sv_${w08}_617400.iso" ;;
- "tr" | "tr-"* ) url="tr_${w08}_617416.iso" ;;
- "zh-hk" ) url="hk_${w08}_617386.iso" ;;
- "zh-tw" ) url="tw_${w08}_617405.iso" ;;
- "zh" | "zh-"* ) url="cn_${w08}_617396.iso" ;;
- esac
- ;;
- "win7x64" | "win7x64-enterprise" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x64_dvd_u_677643.iso" ;;
- "bg" | "bg-"* ) url="bg_windows_7_enterprise_with_sp1_x64_dvd_u_677644.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_7_enterprise_with_sp1_x64_dvd_u_677646.iso" ;;
- "da" | "da-"* ) url="da_windows_7_enterprise_with_sp1_x64_dvd_u_677648.iso" ;;
- "de" | "de-"* ) url="de_windows_7_enterprise_with_sp1_x64_dvd_u_677649.iso" ;;
- "el" | "el-"* ) url="el_windows_7_enterprise_with_sp1_x64_dvd_u_677650.iso" ;;
- "en" | "en-"* )
- size=3182604288
- sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
- url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;;
- "es" | "es-"* ) url="es_windows_7_enterprise_with_sp1_x64_dvd_u_677652.iso" ;;
- "et" | "et-"* ) url="et_windows_7_enterprise_with_sp1_x64_dvd_u_677653.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_7_enterprise_with_sp1_x64_dvd_u_677655.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_7_enterprise_with_sp1_x64_dvd_u_677656.iso" ;;
- "he" | "he-"* ) url="he_windows_7_enterprise_with_sp1_x64_dvd_u_677657.iso" ;;
- "hr" | "hr-"* ) url="hr_windows_7_enterprise_with_sp1_x64_dvd_u_677658.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_7_enterprise_with_sp1_x64_dvd_u_677659.iso" ;;
- "it" | "it-"* ) url="it_windows_7_enterprise_with_sp1_x64_dvd_u_677660.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_7_enterprise_with_sp1_x64_dvd_u_677662.iso" ;;
- "ko" | "ko-"* ) url="ko_windows_7_enterprise_k_with_sp1_x64_dvd_u_677728.iso" ;;
- "lt" | "lt-"* ) url="lt_windows_7_enterprise_with_sp1_x64_dvd_u_677663.iso" ;;
- "lv" | "lv-"* ) url="lv_windows_7_enterprise_with_sp1_x64_dvd_u_677664.iso" ;;
- "nb" | "nb-"* ) url="no_windows_7_enterprise_with_sp1_x64_dvd_u_677665.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_7_enterprise_with_sp1_x64_dvd_u_677666.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_7_enterprise_with_sp1_x64_dvd_u_677667.iso" ;;
- "br" | "pt-br" ) url="pt_windows_7_enterprise_with_sp1_x64_dvd_u_677668.iso" ;;
- "pt" | "pt-"* ) url="pp_windows_7_enterprise_with_sp1_x64_dvd_u_677669.iso" ;;
- "ro" | "ro-"* ) url="ro_windows_7_enterprise_with_sp1_x64_dvd_u_677670.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_7_enterprise_with_sp1_x64_dvd_u_677671.iso" ;;
- "sk" | "sk-"* ) url="sk_windows_7_enterprise_with_sp1_x64_dvd_u_677673.iso" ;;
- "sl" | "sl-"* ) url="sl_windows_7_enterprise_with_sp1_x64_dvd_u_677674.iso" ;;
- "sr" | "sr-"* ) url="sr_windows_7_enterprise_with_sp1_x64_dvd_u_677675.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_7_enterprise_with_sp1_x64_dvd_u_677676.iso" ;;
- "th" | "th-"* ) url="th_windows_7_enterprise_with_sp1_x64_dvd_u_677678.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_7_enterprise_with_sp1_x64_dvd_u_677681.iso" ;;
- "uk" | "uk-"* ) url="uk_windows_7_enterprise_with_sp1_x64_dvd_u_677683.iso" ;;
- "zh-hk" ) url="hk_windows_7_enterprise_with_sp1_x64_dvd_u_677687.iso" ;;
- "zh-tw" ) url="tw_windows_7_enterprise_with_sp1_x64_dvd_u_677689.iso" ;;
- "zh" | "zh-"* ) url="cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso" ;;
- esac
- ;;
- "win7x64-ultimate" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_7_ultimate_with_sp1_x64_dvd_u_677345.iso" ;;
- "bg" | "bg-"* ) url="bg_windows_7_ultimate_with_sp1_x64_dvd_u_677363.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_7_ultimate_with_sp1_x64_dvd_u_677376.iso" ;;
- "da" | "da-"* ) url="da_windows_7_ultimate_with_sp1_x64_dvd_u_677294.iso" ;;
- "de" | "de-"* ) url="de_windows_7_ultimate_with_sp1_x64_dvd_u_677306.iso" ;;
- "el" | "el-"* ) url="el_windows_7_ultimate_with_sp1_x64_dvd_u_677318.iso" ;;
- "en" | "en-"* )
- size=3320903680
- sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
- url="en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;;
- "es" | "es-"* ) url="es_windows_7_ultimate_with_sp1_x64_dvd_u_677350.iso" ;;
- "et" | "et-"* ) url="et_windows_7_ultimate_with_sp1_x64_dvd_u_677368.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_7_ultimate_with_sp1_x64_dvd_u_677378.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_7_ultimate_with_sp1_x64_dvd_u_677299.iso" ;;
- "he" | "he-"* ) url="he_windows_7_ultimate_with_sp1_x64_dvd_u_677312.iso" ;;
- "hr" | "hr-"* ) url="hr_windows_7_ultimate_with_sp1_x64_dvd_u_677324.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_7_ultimate_with_sp1_x64_dvd_u_677338.iso" ;;
- "it" | "it-"* ) url="it_windows_7_ultimate_with_sp1_x64_dvd_u_677356.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_7_ultimate_with_sp1_x64_dvd_u_677372.iso" ;;
- "ko" | "ko-"* ) url="ko_windows_7_ultimate_k_with_sp1_x64_dvd_u_677502.iso" ;;
- "lt" | "lt-"* ) url="lt_windows_7_ultimate_with_sp1_x64_dvd_u_677379.iso" ;;
- "lv" | "lv-"* ) url="lv_windows_7_ultimate_with_sp1_x64_dvd_u_677302.iso" ;;
- "nb" | "nb-"* ) url="no_windows_7_ultimate_with_sp1_x64_dvd_u_677314.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_7_ultimate_with_sp1_x64_dvd_u_677325.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_7_ultimate_with_sp1_x64_dvd_u_677341.iso" ;;
- "br" | "pt-br" ) url="pt_windows_7_ultimate_with_sp1_x64_dvd_u_677358.iso" ;;
- "pt" | "pt-"* ) url="pp_windows_7_ultimate_with_sp1_x64_dvd_u_677373.iso" ;;
- "ro" | "ro-"* ) url="ro_windows_7_ultimate_with_sp1_x64_dvd_u_677380.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_7_ultimate_with_sp1_x64_dvd_u_677391.iso" ;;
- "sk" | "sk-"* ) url="sk_windows_7_ultimate_with_sp1_x64_dvd_u_677393.iso" ;;
- "sl" | "sl-"* ) url="sl_windows_7_ultimate_with_sp1_x64_dvd_u_677396.iso" ;;
- "sr" | "sr-"* ) url="sr_windows_7_ultimate_with_sp1_x64_dvd_u_677398.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_7_ultimate_with_sp1_x64_dvd_u_677400.iso" ;;
- "th" | "th-"* ) url="th_windows_7_ultimate_with_sp1_x64_dvd_u_677402.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_7_ultimate_with_sp1_x64_dvd_u_677404.iso" ;;
- "uk" | "uk-"* ) url="uk_windows_7_ultimate_with_sp1_x64_dvd_u_677406.iso" ;;
- "zh-hk" ) url="hk_windows_7_ultimate_with_sp1_x64_dvd_u_677411.iso" ;;
- "zh-tw" ) url="tw_windows_7_ultimate_with_sp1_x64_dvd_u_677414.iso" ;;
- "zh" | "zh-"* ) url="cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso" ;;
- esac
- ;;
- "win7x86" | "win7x86-enterprise" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x86_dvd_u_677691.iso" ;;
- "bg" | "bg-"* ) url="bg_windows_7_enterprise_with_sp1_x86_dvd_u_677693.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_7_enterprise_with_sp1_x86_dvd_u_677695.iso" ;;
- "da" | "da-"* ) url="da_windows_7_enterprise_with_sp1_x86_dvd_u_677698.iso" ;;
- "de" | "de-"* ) url="de_windows_7_enterprise_with_sp1_x86_dvd_u_677702.iso" ;;
- "el" | "el-"* ) url="el_windows_7_enterprise_with_sp1_x86_dvd_u_677706.iso" ;;
- "en" | "en-"* )
- size=2434502656
- sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
- url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;;
- "es" | "es-"* ) url="es_windows_7_enterprise_with_sp1_x86_dvd_u_677714.iso" ;;
- "et" | "et-"* ) url="et_windows_7_enterprise_with_sp1_x86_dvd_u_677718.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_7_enterprise_with_sp1_x86_dvd_u_677722.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_7_enterprise_with_sp1_x86_dvd_u_677727.iso" ;;
- "he" | "he-"* ) url="he_windows_7_enterprise_with_sp1_x86_dvd_u_677733.iso" ;;
- "hr" | "hr-"* ) url="hr_windows_7_enterprise_with_sp1_x86_dvd_u_677739.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_7_enterprise_with_sp1_x86_dvd_u_677744.iso" ;;
- "it" | "it-"* ) url="it_windows_7_enterprise_with_sp1_x86_dvd_u_677749.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_7_enterprise_with_sp1_x86_dvd_u_677757.iso" ;;
- "ko" | "ko-"* ) url="ko_windows_7_enterprise_k_with_sp1_x86_dvd_u_677732.iso" ;;
- "lt" | "lt-"* ) url="lt_windows_7_enterprise_with_sp1_x86_dvd_u_677764.iso" ;;
- "lv" | "lv-"* ) url="lv_windows_7_enterprise_with_sp1_x86_dvd_u_677677.iso" ;;
- "nb" | "nb-"* ) url="no_windows_7_enterprise_with_sp1_x86_dvd_u_677679.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_7_enterprise_with_sp1_x86_dvd_u_677682.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_7_enterprise_with_sp1_x86_dvd_u_677684.iso" ;;
- "br" | "pt-br" ) url="pt_windows_7_enterprise_with_sp1_x86_dvd_u_677686.iso" ;;
- "pt" | "pt-"* ) url="pp_windows_7_enterprise_with_sp1_x86_dvd_u_677688.iso" ;;
- "ro" | "ro-"* ) url="ro_windows_7_enterprise_with_sp1_x86_dvd_u_677690.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_7_enterprise_with_sp1_x86_dvd_u_677692.iso" ;;
- "sk" | "sk-"* ) url="sk_windows_7_enterprise_with_sp1_x86_dvd_u_677694.iso" ;;
- "sl" | "sl-"* ) url="sl_windows_7_enterprise_with_sp1_x86_dvd_u_677696.iso" ;;
- "sr" | "sr-"* ) url="sr_windows_7_enterprise_with_sp1_x86_dvd_u_677699.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_7_enterprise_with_sp1_x86_dvd_u_677701.iso" ;;
- "th" | "th-"* ) url="th_windows_7_enterprise_with_sp1_x86_dvd_u_677705.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_7_enterprise_with_sp1_x86_dvd_u_677708.iso" ;;
- "uk" | "uk-"* ) url="uk_windows_7_enterprise_with_sp1_x86_dvd_u_677712.iso" ;;
- "zh-hk" ) url="hk_windows_7_enterprise_with_sp1_x86_dvd_u_677720.iso" ;;
- "zh-tw" ) url="tw_windows_7_enterprise_with_sp1_x86_dvd_u_677723.iso" ;;
- "zh" | "zh-"* ) url="cn_windows_7_enterprise_with_sp1_x86_dvd_u_677716.iso" ;;
- esac
- ;;
- "win7x86-ultimate" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_7_ultimate_with_sp1_x86_dvd_u_677448.iso" ;;
- "bg" | "bg-"* ) url="bg_windows_7_ultimate_with_sp1_x86_dvd_u_677450.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_7_ultimate_with_sp1_x86_dvd_u_677452.iso" ;;
- "da" | "da-"* ) url="da_windows_7_ultimate_with_sp1_x86_dvd_u_677454.iso" ;;
- "de" | "de-"* ) url="de_windows_7_ultimate_with_sp1_x86_dvd_u_677456.iso" ;;
- "el" | "el-"* ) url="el_windows_7_ultimate_with_sp1_x86_dvd_u_677458.iso" ;;
- "en" | "en-"* )
- size=2564476928
- sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
- url="en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" ;;
- "es" | "es-"* ) url="es_windows_7_ultimate_with_sp1_x86_dvd_u_677462.iso" ;;
- "et" | "et-"* ) url="et_windows_7_ultimate_with_sp1_x86_dvd_u_677464.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_7_ultimate_with_sp1_x86_dvd_u_677466.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_7_ultimate_with_sp1_x86_dvd_u_677434.iso" ;;
- "he" | "he-"* ) url="he_windows_7_ultimate_with_sp1_x86_dvd_u_677436.iso" ;;
- "hr" | "hr-"* ) url="hr_windows_7_ultimate_with_sp1_x86_dvd_u_677438.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_7_ultimate_with_sp1_x86_dvd_u_677441.iso" ;;
- "it" | "it-"* ) url="it_windows_7_ultimate_with_sp1_x86_dvd_u_677443.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_7_ultimate_with_sp1_x86_dvd_u_677445.iso" ;;
- "ko" | "ko-"* ) url="ko_windows_7_ultimate_k_with_sp1_x86_dvd_u_677508.iso" ;;
- "lt" | "lt-"* ) url="lt_windows_7_ultimate_with_sp1_x86_dvd_u_677447.iso" ;;
- "lv" | "lv-"* ) url="lv_windows_7_ultimate_with_sp1_x86_dvd_u_677449.iso" ;;
- "nb" | "nb-"* ) url="no_windows_7_ultimate_with_sp1_x86_dvd_u_677451.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_7_ultimate_with_sp1_x86_dvd_u_677453.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_7_ultimate_with_sp1_x86_dvd_u_677455.iso" ;;
- "br" | "pt-br" ) url="pt_windows_7_ultimate_with_sp1_x86_dvd_u_677457.iso" ;;
- "pt" | "pt-"* ) url="pp_windows_7_ultimate_with_sp1_x86_dvd_u_677459.iso" ;;
- "ro" | "ro-"* ) url="ro_windows_7_ultimate_with_sp1_x86_dvd_u_677461.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_7_ultimate_with_sp1_x86_dvd_u_677463.iso" ;;
- "sk" | "sk-"* ) url="sk_windows_7_ultimate_with_sp1_x86_dvd_u_677465.iso" ;;
- "sl" | "sl-"* ) url="sl_windows_7_ultimate_with_sp1_x86_dvd_u_677467.iso" ;;
- "sr" | "sr-"* ) url="sr_windows_7_ultimate_with_sp1_x86_dvd_u_677468.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_7_ultimate_with_sp1_x86_dvd_u_677482.iso" ;;
- "th" | "th-"* ) url="th_windows_7_ultimate_with_sp1_x86_dvd_u_677483.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_7_ultimate_with_sp1_x86_dvd_u_677484.iso" ;;
- "uk" | "uk-"* ) url="uk_windows_7_ultimate_with_sp1_x86_dvd_u_677485.iso" ;;
- "zh-hk" ) url="hk_windows_7_ultimate_with_sp1_x86_dvd_u_677487.iso" ;;
- "zh-tw" ) url="tw_windows_7_ultimate_with_sp1_x86_dvd_u_677488.iso" ;;
- "zh" | "zh-"* ) url="cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso" ;;
- esac
- ;;
- "winvistax64" | "winvistax64-enterprise" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_vista_enterprise_with_sp2_x64_dvd_x15-40408.iso" ;;
- "bg" | "bg-"* ) url="bg_windows_vista_enterprise_with_sp2_x64_dvd_x15-40410.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_vista_enterprise_with_sp2_x64_dvd_x15-40412.iso" ;;
- "da" | "da-"* ) url="da_windows_vista_enterprise_with_sp2_x64_dvd_x15-40416.iso" ;;
- "de" | "de-"* ) url="de_windows_vista_enterprise_sp2_x64_dvd_342376.iso" ;;
- "el" | "el-"* ) url="el_windows_vista_enterprise_with_sp2_x64_dvd_x15-40423.iso" ;;
- "en" | "en-"* )
- size=3205953536
- sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
- url="en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" ;;
- "es" | "es-"* ) url="es_windows_vista_enterprise_sp2_x64_dvd_342415.iso" ;;
- "et" | "et-"* ) url="et_windows_vista_enterprise_with_sp2_x64_dvd_x15-40437.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_vista_enterprise_with_sp2_x64_dvd_x15-40451.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_vista_enterprise_sp2_x64_dvd_342355.iso" ;;
- "he" | "he-"* ) url="he_windows_vista_enterprise_with_sp2_x64_dvd_x15-40425.iso" ;;
- "hr" | "hr-"* ) url="hr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40396.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_vista_enterprise_with_sp2_x64_dvd_x15-40427.iso" ;;
- "it" | "it-"* ) url="it_windows_vista_enterprise_with_sp2_x64_dvd_x15-40429.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_vista_enterprise_sp2_x64_dvd_342393.iso" ;;
- "ko" | "ko-"* ) url="ko_windows_vista_enterprise_k_with_sp2_x64_dvd_x15-40433.iso" ;;
- "lt" | "lt-"* ) url="lt_windows_vista_enterprise_with_sp2_x64_dvd_x15-40394.iso" ;;
- "lv" | "lv-"* ) url="lv_windows_vista_enterprise_with_sp2_x64_dvd_x15-40392.iso" ;;
- "nb" | "nb-"* ) url="no_windows_vista_enterprise_with_sp2_x64_dvd_x15-40439.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40441.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40445.iso" ;;
- "br" | "pt-br" ) url="pt_windows_vista_enterprise_with_sp2_x64_dvd_x15-40400.iso" ;;
- "pt" | "pt-"* ) url="pp_windows_vista_enterprise_with_sp2_x64_dvd_x15-40443.iso" ;;
- "ro" | "ro-"* ) url="ro_windows_vista_enterprise_with_sp2_x64_dvd_x15-40447.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_vista_enterprise_with_sp2_x64_dvd_x15-40455.iso" ;;
- "sk" | "sk-"* ) url="sk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40453.iso" ;;
- "sl" | "sl-"* ) url="sl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40435.iso" ;;
- "sr" | "sr-"* ) url="sr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40406.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_vista_enterprise_with_sp2_x64_dvd_x15-40449.iso" ;;
- "th" | "th-"* ) url="th_windows_vista_enterprise_with_sp2_x64_dvd_x15-40457.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40459.iso" ;;
- "uk" | "uk-"* ) url="uk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40398.iso" ;;
- "zh-hk" ) url="hk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40463.iso" ;;
- "zh-tw" ) url="tw_windows_vista_enterprise_with_sp2_x64_dvd_x15-40461.iso" ;;
- "zh" | "zh-"* ) url="cn_windows_vista_enterprise_with_sp2_x64_dvd_x15-40402.iso" ;;
- esac
- ;;
- "winvistax64-ultimate" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_vista_with_sp2_x64_dvd_x15-36318.iso" ;;
- "bg" | "bg-"* ) url="bg_windows_vista_with_sp2_x64_dvd_x15-36321.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_vista_with_sp2_x64_dvd_x15-36327.iso" ;;
- "da" | "da-"* ) url="da_windows_vista_with_sp2_x64_dvd_x15-36329.iso" ;;
- "de" | "de-"* ) url="de_windows_vista_sp2_x64_dvd_342287.iso" ;;
- "el" | "el-"* ) url="el_windows_vista_with_sp2_x64_dvd_x15-36343.iso" ;;
- "en" | "en-"* )
- size=3861460992
- sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
- url="en_windows_vista_sp2_x64_dvd_342267.iso" ;;
- "es" | "es-"* ) url="es_windows_vista_sp2_x64_dvd_342309.iso" ;;
- "et" | "et-"* ) url="et_windows_vista_with_sp2_x64_dvd_x15-36335.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_vista_with_sp2_x64_dvd_x15-36337.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_vista_sp2_x64_dvd_342277.iso" ;;
- "he" | "he-"* ) url="he_windows_vista_with_sp2_x64_dvd_x15-36344.iso" ;;
- "hr" | "hr-"* ) url="hr_windows_vista_with_sp2_x64_dvd_x15-36325.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_vista_with_sp2_x64_dvd_x15-36346.iso" ;;
- "it" | "it-"* ) url="it_windows_vista_with_sp2_x64_dvd_x15-36348.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_vista_sp2_x64_dvd_342298.iso" ;;
- "ko" | "ko-"* ) url="ko_windows_vista_k_and_kn_with_sp2_x86_dvd_x15-36302.iso" ;;
- "lt" | "lt-"* ) url="lt_windows_vista_with_sp2_x64_dvd_x15-36355.iso" ;;
- "lv" | "lv-"* ) url="lv_windows_vista_with_sp2_x64_dvd_x15-36353.iso" ;;
- "nb" | "nb-"* ) url="no_windows_vista_with_sp2_x64_dvd_x15-36357.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_vista_with_sp2_x64_dvd_x15-36331.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_vista_with_sp2_x64_dvd_x15-36359.iso" ;;
- "br" | "pt-br" ) url="pt_windows_vista_with_sp2_x64_dvd_x15-36319.iso" ;;
- "pt" | "pt-"* ) url="pp_windows_vista_with_sp2_x64_dvd_x15-36361.iso" ;;
- "ro" | "ro-"* ) url="ro_windows_vista_with_sp2_x64_dvd_x15-36363.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_vista_with_sp2_x64_dvd_x15-36364.iso" ;;
- "sk" | "sk-"* ) url="sk_windows_vista_with_sp2_x64_dvd_x15-36367.iso" ;;
- "sl" | "sl-"* ) url="sl_windows_vista_with_sp2_x64_dvd_x15-36369.iso" ;;
- "sr" | "sr-"* ) url="sr_windows_vista_with_sp2_x64_dvd_x15-36365.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_vista_with_sp2_x64_dvd_x15-36373.iso" ;;
- "th" | "th-"* ) url="th_windows_vista_with_sp2_x64_dvd_x15-36374.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_vista_with_sp2_x64_dvd_x15-36375.iso" ;;
- "uk" | "uk-"* ) url="uk_windows_vista_with_sp2_x64_dvd_x15-36376.iso" ;;
- "zh-hk" ) url="hk_windows_vista_with_sp2_x64_dvd_x15-36324.iso" ;;
- "zh-tw" ) url="tw_windows_vista_with_sp2_x64_dvd_x15-36323.iso" ;;
- "zh" | "zh-"* ) url="cn_windows_vista_with_sp2_x64_dvd_x15-36322.iso" ;;
- esac
- ;;
- "winvistax86" | "winvistax86-enterprise" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_vista_enterprise_with_sp2_x86_dvd_x15-40263.iso" ;;
- "bg" | "bg-"* ) url="bg_windows_vista_enterprise_with_sp2_x86_dvd_x15-40265.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_vista_enterprise_with_sp2_x86_dvd_x15-40267.iso" ;;
- "da" | "da-"* ) url="da_windows_vista_enterprise_with_sp2_x86_dvd_x15-40271.iso" ;;
- "de" | "de-"* ) url="de_windows_vista_enterprise_sp2_x86_dvd_342373.iso" ;;
- "el" | "el-"* ) url="el_windows_vista_enterprise_with_sp2_x86_dvd_x15-40277.iso" ;;
- "en" | "en-"* )
- size=2420981760
- sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5"
- url="en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" ;;
- "es" | "es-"* ) url="es_windows_vista_enterprise_sp2_x86_dvd_342413.iso" ;;
- "et" | "et-"* ) url="et_windows_vista_enterprise_with_sp2_x86_dvd_x15-40291.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_vista_enterprise_with_sp2_x86_dvd_x15-40305.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_vista_enterprise_sp2_x86_dvd_342352.iso" ;;
- "he" | "he-"* ) url="he_windows_vista_enterprise_with_sp2_x86_dvd_x15-40279.iso" ;;
- "hr" | "hr-"* ) url="hr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40251.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_vista_enterprise_with_sp2_x86_dvd_x15-40281.iso" ;;
- "it" | "it-"* ) url="it_windows_vista_enterprise_with_sp2_x86_dvd_x15-40283.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_vista_enterprise_sp2_x86_dvd_342391.iso" ;;
- "ko" | "ko-"* ) url="ko_windows_vista_enterprise_k_with_sp2_x86_dvd_x15-40287.iso" ;;
- "lt" | "lt-"* ) url="lt_windows_vista_enterprise_with_sp2_x86_dvd_x15-40249.iso" ;;
- "lv" | "lv-"* ) url="lv_windows_vista_enterprise_with_sp2_x86_dvd_x15-40247.iso" ;;
- "nb" | "nb-"* ) url="no_windows_vista_enterprise_with_sp2_x86_dvd_x15-40293.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40295.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40299.iso" ;;
- "br" | "pt-br" ) url="pt_windows_vista_enterprise_with_sp2_x86_dvd_x15-40255.iso" ;;
- "pt" | "pt-"* ) url="pp_windows_vista_enterprise_with_sp2_x86_dvd_x15-40297.iso" ;;
- "ro" | "ro-"* ) url="ro_windows_vista_enterprise_with_sp2_x86_dvd_x15-40301.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_vista_enterprise_with_sp2_x86_dvd_x15-40309.iso" ;;
- "sk" | "sk-"* ) url="sk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40307.iso" ;;
- "sl" | "sl-"* ) url="sl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40289.iso" ;;
- "sr" | "sr-"* ) url="sr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40261.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_vista_enterprise_with_sp2_x86_dvd_x15-40303.iso" ;;
- "th" | "th-"* ) url="th_windows_vista_enterprise_with_sp2_x86_dvd_x15-40311.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40313.iso" ;;
- "uk" | "uk-"* ) url="uk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40253.iso" ;;
- "zh-hk" ) url="hk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40317.iso" ;;
- "zh-tw" ) url="tw_windows_vista_enterprise_with_sp2_x86_dvd_x15-40315.iso" ;;
- "zh" | "zh-"* ) url="cn_windows_vista_enterprise_with_sp2_x86_dvd_x15-40257.iso" ;;
- esac
- ;;
- "winvistax86-ultimate" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_vista_with_sp2_x86_dvd_x15-36282.iso" ;;
- "bg" | "bg-"* ) url="bg_windows_vista_with_sp2_x86_dvd_x15-36284.iso" ;;
- "hr" | "hr-"* ) url="hr_windows_vista_with_sp2_x86_dvd_x15-36288.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_vista_with_sp2_x86_dvd_x15-36289.iso" ;;
- "da" | "da-"* ) url="da_windows_vista_with_sp2_x86_dvd_x15-36290.iso" ;;
- "de" | "de-"* ) url="de_windows_vista_sp2_x86_dvd_342286.iso" ;;
- "el" | "el-"* ) url="el_windows_vista_with_sp2_x86_dvd_x15-36297.iso" ;;
- "en" | "en-"* )
- size=3243413504
- sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
- url="en_windows_vista_with_sp2_x86_dvd_342266.iso" ;;
- "es" | "es-"* ) url="es_windows_vista_sp2_x86_dvd_342308.iso" ;;
- "et" | "et-"* ) url="et_windows_vista_with_sp2_x86_dvd_x15-36293.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_vista_with_sp2_x86_dvd_x15-36294.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_vista_sp2_x86_dvd_342276.iso" ;;
- "he" | "he-"* ) url="he_windows_vista_with_sp2_x86_dvd_x15-36298.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_vista_with_sp2_x86_dvd_x15-36299.iso" ;;
- "it" | "it-"* ) url="it_windows_vista_with_sp2_x86_dvd_x15-36300.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_vista_sp2_x86_dvd_342296.iso" ;;
- "ko" | "ko-"* ) url="ko_windows_vista_k_with_sp2_x64_dvd_x15-36350.iso" ;;
- "lt" | "lt-"* ) url="lt_windows_vista_with_sp2_x86_dvd_x15-36304.iso" ;;
- "lv" | "lv-"* ) url="lv_windows_vista_with_sp2_x86_dvd_x15-36303.iso" ;;
- "nb" | "nb-"* ) url="no_windows_vista_with_sp2_x86_dvd_x15-36305.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_vista_with_sp2_x86_dvd_x15-36291.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_vista_with_sp2_x86_dvd_x15-36306.iso" ;;
- "br" | "pt-br" ) url="pt_windows_vista_with_sp2_x86_dvd_x15-36283.iso" ;;
- "pt" | "pt-"* ) url="pp_windows_vista_with_sp2_x86_dvd_x15-36307.iso" ;;
- "ro" | "ro-"* ) url="ro_windows_vista_with_sp2_x86_dvd_x15-36308.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_vista_with_sp2_x86_dvd_x15-36309.iso" ;;
- "sk" | "sk-"* ) url="sk_windows_vista_with_sp2_x86_dvd_x15-36311.iso" ;;
- "sl" | "sl-"* ) url="sl_windows_vista_with_sp2_x86_dvd_x15-36312.iso" ;;
- "sr" | "sr-"* ) url="sr_windows_vista_with_sp2_x86_dvd_x15-36310.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_vista_with_sp2_x86_dvd_x15-36314.iso" ;;
- "th" | "th-"* ) url="th_windows_vista_with_sp2_x86_dvd_x15-36315.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_vista_with_sp2_x86_dvd_x15-36316.iso" ;;
- "uk" | "uk-"* ) url="uk_windows_vista_with_sp2_x86_dvd_x15-36317.iso" ;;
- "zh-hk" ) url="hk_windows_vista_with_sp2_x86_dvd_x15-36287.iso" ;;
- "zh-tw" ) url="tw_windows_vista_with_sp2_x86_dvd_x15-36286.iso" ;;
- "zh" | "zh-"* ) url="cn_windows_vista_with_sp2_x86_dvd_x15-36285.iso" ;;
- esac
+ "win7x86" | "win7x86-ultimate" )
+ size=2564784128
+ sum="bd4c03c917d00a40222d92a6fab04981a7bd46140bda1888eb961a322e3c5d89"
+ url="WINDOWS732_EN_DVD.iso"
;;
"winxpx86" )
- case "${culture,,}" in
- "ar" | "ar-"* ) url="ar_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74065.iso" ;;
- "cs" | "cs-"* ) url="cs_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73965.iso" ;;
- "da" | "da-"* ) url="da_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73968.iso" ;;
- "de" | "de-"* ) url="de_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73985.iso" ;;
- "el" | "el-"* ) url="el_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73988.iso" ;;
- "es" | "es-"* ) url="es_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74009.iso" ;;
- "fi" | "fi-"* ) url="fi_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73979.iso" ;;
- "fr" | "fr-"* ) url="fr_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73982.iso" ;;
- "he" | "he-"* ) url="he_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74143.iso" ;;
- "hu" | "hu-"* ) url="hu_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73991.iso" ;;
- "it" | "it-"* ) url="it_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73994.iso" ;;
- "ja" | "ja-"* ) url="ja_windows_xp_professional_with_service_pack_3_x86_dvd_vl_x14-74058.iso" ;;
- "nb" | "nb-"* ) url="no_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74000.iso" ;;
- "nl" | "nl-"* ) url="nl_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73971.iso" ;;
- "pl" | "pl-"* ) url="pl_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74003.iso" ;;
- "br" | "pt-br" ) url="pt-br_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74137.iso" ;;
- "pt" | "pt-"* ) url="pt-pt_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74006.iso" ;;
- "ru" | "ru-"* ) url="ru_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74146.iso" ;;
- "sv" | "sv-"* ) url="sv_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74012.iso" ;;
- "tr" | "tr-"* ) url="tr_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74085.iso" ;;
- "zh-hk" ) url="zh-hk_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74075.iso" ;;
- "zh-tw" ) url="zh-tw_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74140.iso" ;;
- "zh" | "zh-"* ) url="zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso" ;;
- esac
- ;;
- "winxpx64" )
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
- size=628168704
- sum="b641514c2265ba6c0a9ddbcfa4a6daaac6539db8d1ce704366cdfe5a516e0495"
- url="en_win_xp_pro_x64_with_sp2_vl_x13-41611.iso"
+ size=618065920
+ sum="8177d0137dfe4e8296a85793f140806c9250a5992c8e0e50158c742767ad1182"
+ url="WinXPsp3.iso"
;;
+ "win2kx86" )
+ size=387424256
+ sum="08b11c3897eb38d1e6566a17cec5cdf2b3c620444e160e3db200a7e223aabbd8"
+ url="Windows_2000_SP4.iso"
esac
case "${ret,,}" in
@@ -1850,29 +1099,158 @@ getLink4() {
local size=""
local host="https://archive.org/download"
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
+ "nano11" )
+ size=2463565824
+ sum="a1e0614372768cbe2d24de74b78a4a97bc1017ea5080dfed1d2125e4a527eb1a"
+ url="nano11_25h2/nano11%2025h2.iso"
+ ;;
"core11" )
- size=2159738880
- sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1"
- url="tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso"
+ size=3176654848
+ sum="29c055fcfb7b089abd9e007e7abe4bb82c70a03aac9d65e56a38b87ab32d04d2"
+ url="tiny11_25H2/tiny11core_25H2_Oct25.iso"
;;
"tiny11" )
- size=3788177408
- sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280"
- url="tiny11-2311/tiny11%202311%20x64.iso"
+ size=5514559488
+ sum="92484f2b7f707e42383294402a9eabbadeaa5ede80ac633390ae7f3537e36275"
+ url="tiny11_25H2/tiny11_25H2_Oct25.iso"
;;
"tiny10" )
size=3839819776
sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35"
url="tiny-10-23-h2/tiny10%20x64%2023h2.iso"
;;
+ "win11x64" )
+ size=7736125440
+ sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32"
+ url="W11x64_26200.6584/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso"
+ ;;
+ "win11x64-enterprise" | "win11x64-enterprise-eval" )
+ size=6209064960
+ sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c"
+ url="Windows11Enterprise23H2x64/22631.2428.231001-0608.23H2_NI_RELEASE_SVC_REFRESH_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso"
+ ;;
+ "win11x64-iot" | "win11x64-enterprise-iot" | "win11x64-enterprise-iot-eval" )
+ size=5144817664
+ sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
+ url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso"
+ ;;
+ "win11x64-ltsc" | "win11x64-enterprise-ltsc" | "win11x64-enterprise-ltsc-eval" )
+ size=5144817664
+ sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
+ url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso"
+ ;;
+ "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" )
+ size=6978310144
+ sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67"
+ url="Windows-10-22H2-July-2024-64-bit-DVD-English/en-us_windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd_c004521a.iso"
+ ;;
+ "win10x64-iot" | "win10x64-enterprise-iot" | "win10x64-enterprise-iot-eval" )
+ size=4851668992
+ sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160"
+ url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f_202411/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso"
+ ;;
+ "win10x64-ltsc" | "win10x64-enterprise-ltsc" | "win10x64-enterprise-ltsc-eval" )
+ size=4899461120
+ sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d"
+ url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_202302/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso"
+ ;;
+ "win81x64" )
+ size=4320526336
+ sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51"
+ url="en_windows_8.1_with_update_x64_dvd_6051480/en_windows_8.1_with_update_x64_dvd_6051480.iso"
+ ;;
+ "win81x64-enterprise" | "win81x64-enterprise-eval" )
+ size=4139163648
+ sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1"
+ url="en_windows_8.1_enterprise_with_update_x64_dvd/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso"
+ ;;
+ "win2022" | "win2022-eval" )
+ size=5365624832
+ sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db"
+ url="win-server-2022/2227-January_2024/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso"
+ ;;
+ "win2019" | "win2019-eval" )
+ size=5575774208
+ sum="0067afe7fdc4e61f677bd8c35a209082aa917df9c117527fc4b2b52a447e89bb"
+ url="sw-dvd-9-win-server-std-core-2019-1809.18-64-bit-english-dc-std-mlf-x-22-74330/SW_DVD9_Win_Server_STD_CORE_2019_1809.18_64Bit_English_DC_STD_MLF_X22-74330.ISO"
+ ;;
+ "win2016" | "win2016-eval" )
+ size=6006587392
+ sum="af06e5483c786c023123e325cea4775050324d9e1366f46850b515ae43f764be"
+ url="en_windows_server_2016_updated_feb_2018_x64_dvd_11636692/en_windows_server_2016_updated_feb_2018_x64_dvd_11636692.iso"
+ ;;
+ "win2012r2" | "win2012r2-eval" )
+ size=5397889024
+ sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e"
+ url="en_windows_server_2012_r2_with_update_x64_dvd_6052708_202006/en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso"
+ ;;
+ "win2008r2" | "win2008r2-eval" )
+ size=3166584832
+ sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8"
+ url="en_windows_server_2008_r2_with_sp1_x64_dvd_617601_202006/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso"
+ ;;
+ "win7x64" | "win7x64-ultimate" )
+ size=3320903680
+ sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
+ url="win7-ult-sp1-english/Win7_Ult_SP1_English_x64.iso"
+ ;;
+ "win7x64-enterprise" | "win7x64-enterprise-eval" )
+ size=3182604288
+ sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
+ url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
+ ;;
+ "win7x86" | "win7x86-ultimate" )
+ size=2564476928
+ sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
+ url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso"
+ ;;
+ "win7x86-enterprise" | "win7x86-enterprise-eval" )
+ size=2434502656
+ sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
+ url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710_202006/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
+ ;;
+ "winvistax64" | "winvistax64-ultimate" )
+ size=3861460992
+ sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
+ url="en_windows_vista_sp2_x64_dvd_342267_202010/en_windows_vista_sp2_x64_dvd_342267.iso"
+ ;;
+ "winvistax64-enterprise" )
+ size=3205953536
+ sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
+ url="en_windows_vista_enterprise_sp2_x64_dvd_342332_202007/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso"
+ ;;
+ "winvistax86" | "winvistax86-ultimate" )
+ size=3243413504
+ sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
+ url="en_windows_vista_sp2_x86_dvd_342266/en_windows_vista_sp2_x86_dvd_342266.iso"
+ ;;
+ "winvistax86-enterprise" )
+ size=2420981760
+ sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5"
+ url="en_windows_vista_enterprise_sp2_x86_dvd_342329_202007/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso"
+ ;;
+ "win2003r2" )
+ size=652367872
+ sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32"
+ url="en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757.iso"
+ ;;
"winxpx86" )
size=617756672
sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
url="XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso"
;;
+ "winxpx64" )
+ size=614166528
+ sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6"
+ url="windows-xp-all-sp-msdn-iso-files-en-de-ru-tr-x86-x64/en_win_xp_sp1_pro_x64_vl.iso"
+ ;;
+ "win2kx86" )
+ size=386859008
+ sum="e3816f6e80b66ff686ead03eeafffe9daf020a5e4717b8bd4736b7c51733ba22"
+ url="MicrosoftWindows2000BuildCollection/5.00.2195.6717_x86fre_client-professional_retail_en-us-ZRMPFPP_EN.iso"
esac
case "${ret,,}" in
@@ -1933,6 +1311,8 @@ isMido() {
local lang="$2"
local sum
+ [[ "${MIDO:-}" == [Nn]* ]] && return 1
+
sum=$(getMido "$id" "en" "sum")
[ -n "$sum" ] && return 0
@@ -1944,6 +1324,8 @@ isESD() {
local id="$1"
local lang="$2"
+ [[ "${ESD:-}" == [Nn]* ]] && return 1
+
case "${id,,}" in
"win11${PLATFORM,,}" | "win10${PLATFORM,,}" )
return 0
@@ -1996,123 +1378,188 @@ addFolder() {
cp -Lr "$folder/." "$dest" || return 1
local file
- file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1)
+ file=$(find "$dest" -maxdepth 1 -type f -iname install.bat -print -quit)
[ -f "$file" ] && unix2dos -q "$file"
return 0
}
-migrateFiles() {
-
- local base="$1"
- local version="$2"
- local file=""
-
- [ -f "$base" ] && return 0
-
- [[ "${version,,}" == "tiny10" ]] && file="tiny10_x64_23h2.iso"
- [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_x64.iso"
- [[ "${version,,}" == "core11" ]] && file="tiny11_core_x64_beta_1.iso"
- [[ "${version,,}" == "winxpx86" ]] && file="en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso"
- [[ "${version,,}" == "winvistax64" ]] && file="en_windows_vista_sp2_x64_dvd_342267.iso"
- [[ "${version,,}" == "win7x64" ]] && file="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
-
- [ ! -f "$STORAGE/$file" ] && return 0
- mv -f "$STORAGE/$file" "$base" || return 1
-
- return 0
-}
-
prepareInstall() {
+ local pid=""
+ local file=""
local dir="$2"
local desc="$3"
- local arch="$4"
- local key="$5"
- local driver="$6"
+ local driver="$4"
local drivers="/tmp/drivers"
- rm -rf "$drivers"
- mkdir -p "$drivers"
-
ETFS="[BOOT]/Boot-NoEmul.img"
if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then
error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1
fi
- local msg="Adding drivers to image..."
- info "$msg" && html "$msg"
-
- if ! bsdtar -xf /drivers.txz -C "$drivers"; then
- error "Failed to extract drivers!" && return 1
- fi
-
- local target
+ local arch target
+ [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86"
[[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64"
- if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then
- error "Failed to locate required storage drivers!" && return 1
+ if [ ! -d "$target" ]; then
+ error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1
fi
- cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1
+ if [[ "${driver,,}" == "xp" || "${driver,,}" == "2k3" ]]; then
- mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
- cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
- cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
- cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
+ local msg="Adding drivers to image..."
+ info "$msg" && html "$msg"
+
+ rm -rf "$drivers"
+ mkdir -p "$drivers"
+
+ if ! bsdtar -xf /var/drivers.txz -C "$drivers"; then
+ error "Failed to extract drivers!" && return 1
+ fi
+
+ if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then
+ error "Failed to locate required storage drivers!" && return 1
+ fi
+
+ cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1
+
+ mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
+ cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
+ cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
+ cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
+
+ if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then
+ error "Failed to locate required network drivers!" && return 1
+ fi
+
+ mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
+ cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
+ cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
+ cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
+
+ file=$(find "$target" -maxdepth 1 -type f -iname TXTSETUP.SIF -print -quit)
+
+ if [ -z "$file" ]; then
+ error "The file TXTSETUP.SIF could not be found!" && return 1
+ fi
+
+ sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$file"
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$file"
+ sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$file"
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$file"
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$file"
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$file"
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$file"
+
+ if [ ! -d "$drivers/sata/xp/$arch" ]; then
+ error "Failed to locate required SATA drivers!" && return 1
+ fi
+
+ mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1
+ cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1
+ cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1
+
+ sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$file"
+ sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$file"
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$file"
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$file"
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$file"
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$file"
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$file"
+ sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$file"
+ sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$file"
+ sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$file"
+
+ rm -rf "$drivers"
- if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then
- error "Failed to locate required network drivers!" && return 1
fi
- mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
- cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
- cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
- cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
+ local key setup
+ setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit)
+
+ if [ -n "$setup" ] && [ -z "$KEY" ]; then
+
+ pid=$(<"$setup")
+ pid="${pid%$'\r'}"
+
+ if [[ "$driver" == "2k" ]]; then
+
+ echo "${pid:0:$((${#pid})) - 3}270" > "$setup"
+
+ else
+
+ if [[ "$pid" == *"270" ]]; then
+
+ warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation."
+
+ else
+
+ file=$(find "$target" -maxdepth 1 -type f -iname PID.INF -print -quit)
+
+ if [ -n "$file" ]; then
+
+ if [[ "$driver" == "2k3" ]]; then
+
+ key=$(grep -i -A 2 "StagingKey" "$file" | tail -n 2 | head -n 1)
+
+ else
+
+ key="${pid:$((${#pid})) - 8:5}"
+ if [[ "${pid^^}" == *"OEM" ]]; then
+ key=$(grep -i -A 2 "$key" "$file" | tail -n 2 | head -n 1)
+ else
+ key=$(grep -i -m 1 -A 2 "$key" "$file" | tail -n 2 | head -n 1)
+ fi
+ key="${key#*= }"
+
+ fi
+
+ key="${key%$'\r'}"
+ [[ "${#key}" == "29" ]] && KEY="$key"
+
+ fi
+
+ if [ -z "$KEY" ]; then
+
+ # These are NOT pirated keys, they come from official MS documentation.
+
+ case "${driver,,}" in
+ "xp" )
+
+ if [[ "${arch,,}" == "x86" ]]; then
+ # Windows XP Professional x86 generic trial key (no activation)
+ KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y"
+ else
+ # Windows XP Professional x64 generic trial key (no activation)
+ KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G"
+ fi ;;
+
+ "2k3" )
+
+ if [[ "${arch,,}" == "x86" ]]; then
+ # Windows Server 2003 Standard x86 generic trial key (no activation)
+ KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48"
+ else
+ # Windows Server 2003 Standard x64 generic trial key (no activation)
+ KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY"
+ fi ;;
+
+ esac
+
+ echo "${pid:0:$((${#pid})) - 3}000" > "$setup"
+
+ fi
+
+ fi
+ fi
- if [ ! -f "$target/TXTSETUP.SIF" ]; then
- error "The file TXTSETUP.SIF could not be found!" && return 1
fi
- sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF"
+ [ -n "$KEY" ] && KEY="ProductID=$KEY"
- if [ ! -d "$drivers/sata/xp/$arch" ]; then
- error "Failed to locate required SATA drivers!" && return 1
- fi
-
- mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1
- cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1
- cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1
-
- sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF"
- sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
- sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF"
-
- rm -rf "$drivers"
-
- local pid file setup
- setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1)
- pid=$(<"$setup")
- pid="${pid:(-4)}"
- pid="${pid:0:3}"
-
- if [[ "$pid" == "270" ]]; then
- warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation."
- fi
+ mkdir -p "$dir/\$OEM\$"
if ! addFolder "$dir"; then
error "Failed to add OEM folder to image!" && return 1
@@ -2122,17 +1569,20 @@ prepareInstall() {
local install="$dir/\$OEM\$/\$1/OEM/install.bat"
[ -f "$install" ] && oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\""
- [ -z "$YRES" ] && YRES="720"
- [ -z "$XRES" ] && XRES="1280"
+ [ -z "$WIDTH" ] && WIDTH="1280"
+ [ -z "$HEIGHT" ] && HEIGHT="720"
- XHEX=$(printf '%x\n' "$XRES")
- YHEX=$(printf '%x\n' "$YRES")
+ XHEX=$(printf '%x\n' "$WIDTH")
+ YHEX=$(printf '%x\n' "$HEIGHT")
- local username="Docker"
- local password="*"
+ local username=""
+ local password=""
- [ -n "$PASSWORD" ] && password="$PASSWORD"
[ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g')
+ [ -z "$username" ] && username="Docker"
+
+ [ -n "$PASSWORD" ] && password=$(echo "$PASSWORD" | sed 's/"//g')
+ [ -z "$password" ] && password="admin"
find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \;
@@ -2170,16 +1620,16 @@ prepareInstall() {
echo "[UserData]"
echo " FullName=\"$username\""
echo " ComputerName=\"*\""
- echo " OrgName=\"Windows for Docker\""
- echo " ProductKey=$key"
+ echo " OrgName=\"$APP for $ENGINE\""
+ echo " $KEY"
echo ""
echo "[Identification]"
echo " JoinWorkgroup = WORKGROUP"
echo ""
echo "[Display]"
echo " BitsPerPel=32"
- echo " XResolution=$XRES"
- echo " YResolution=$YRES"
+ echo " XResolution=$WIDTH"
+ echo " YResolution=$HEIGHT"
echo ""
echo "[Networking]"
echo " InstallDefaultComponents=Yes"
@@ -2221,21 +1671,24 @@ prepareInstall() {
echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List]"
echo "\"3389:TCP\"=\"3389:TCP:*:Enabled:@xpsp2res.dll,-22009\""
echo ""
- echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]"
- echo "\"LimitBlankPasswordUse\"=dword:00000000"
- echo ""
echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]"
echo "\"RunCount\"=dword:00000000"
echo ""
echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]"
echo "\"HideFileExt\"=dword:00000000"
echo ""
+ echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]"
+ echo "\"NoWelcomeScreen\"=\"1\""
+ echo ""
+ echo "[HKEY_CURRENT_USER\Software\Microsoft\Internet Connection Wizard]"
+ echo "\"Completed\"=\"1\""
+ echo "\"Desktopchanged\"=\"1\""
+ echo ""
echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"
- echo "\"DefaultUserName\"=\"$username\""
- echo "\"DefaultDomainName\"=\"Dockur\""
- echo "\"AltDefaultUserName\"=\"$username\""
- echo "\"AltDefaultDomainName\"=\"Dockur\""
echo "\"AutoAdminLogon\"=\"1\""
+ echo "\"DefaultUserName\"=\"$username\""
+ echo "\"DefaultPassword\"=\"$password\""
+ echo "\"DefaultDomainName\"=\"Dockur\""
echo ""
echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]"
echo "\"DefaultSettings.BitsPerPel\"=dword:00000020"
@@ -2254,11 +1707,18 @@ prepareInstall() {
echo ""
} | unix2dos > "$dir/\$OEM\$/install.reg"
+ if [[ "$driver" == "2k" ]]; then
+ { echo "[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Runonce]"
+ echo "\"^SetupICWDesktop\"=-"
+ echo ""
+ } | unix2dos >> "$dir/\$OEM\$/install.reg"
+ fi
+
if [[ "$driver" == "2k3" ]]; then
{ echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]"
echo "@=dword:00000000"
echo ""
- echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]"
+ echo "[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]"
echo "\"DontLaunchSecurityOOBE\"=dword:00000000"
echo ""
} | unix2dos >> "$dir/\$OEM\$/install.reg"
@@ -2306,67 +1766,24 @@ prepareInstall() {
echo ""
echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")"
echo ""
- } | unix2dos > "$dir/\$OEM\$/admin.vbs"
+ echo "Set oLink = WshShell.CreateShortcut(WshShell.ExpandEnvironmentStrings(\"%userprofile%\\Desktop\\Shared.lnk\"))"
+ echo "With oLink"
+ echo " .TargetPath = \"\\\\host.lan\\Data\""
+ echo " .Save"
+ echo "End With"
+ echo "Set oLink = Nothing"
+ echo ""
+ } | unix2dos > "$dir/\$OEM\$/install.vbs"
{ echo "[COMMANDS]"
echo "\"REGEDIT /s install.reg\""
- echo "\"Wscript admin.vbs\""
+ echo "\"Wscript install.vbs\""
echo ""
} | unix2dos > "$dir/\$OEM\$/cmdlines.txt"
return 0
}
-prepare2k3() {
-
- local iso="$1"
- local dir="$2"
- local desc="$3"
- local driver="2k3"
- local arch key
-
- [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86"
-
- if [[ "${arch,,}" == "x86" ]]; then
- # Windows Server 2003 Standard x86 generic key (no activation, trial-only)
- # This is not a pirated key, it comes from the official MS documentation.
- key="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48"
- else
- # Windows Server 2003 Standard x64 generic key (no activation, trial-only)
- # This is not a pirated key, it comes from the official MS documentation.
- key="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY"
- fi
-
- prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1
-
- return 0
-}
-
-prepareXP() {
-
- local iso="$1"
- local dir="$2"
- local desc="$3"
- local driver="xp"
- local arch key
-
- [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86"
-
- if [[ "${arch,,}" == "x86" ]]; then
- # Windows XP Professional x86 generic key (no activation, trial-only)
- # This is not a pirated key, it comes from the official MS documentation.
- key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y"
- else
- # Windows XP Professional x64 generic key (no activation, trial-only)
- # This is not a pirated key, it comes from the official MS documentation.
- key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G"
- fi
-
- prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1
-
- return 0
-}
-
prepareLegacy() {
local iso="$1"
@@ -2395,34 +1812,59 @@ prepareLegacy() {
detectLegacy() {
local dir="$1"
- local find find2
+ local find
- find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1)
+ find=$(find "$dir" -maxdepth 1 -type d -iname WIN95 -print -quit)
[ -n "$find" ] && DETECTED="win95" && return 0
- find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1)
+ find=$(find "$dir" -maxdepth 1 -type d -iname WIN98 -print -quit)
[ -n "$find" ] && DETECTED="win98" && return 0
- find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1)
+ find=$(find "$dir" -maxdepth 1 -type d -iname WIN9X -print -quit)
[ -n "$find" ] && DETECTED="win9x" && return 0
- find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 | head -n 1)
- [ -n "$find" ] && DETECTED="win2k" && return 0
+ find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_W.40 -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_S.40 -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_TS.40 -print -quit)
+ [ -n "$find" ] && DETECTED="winnt4" && return 0
- find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1)
- find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1)
+ find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_NT.5 -print -quit)
+
+ if [ -n "$find" ]; then
+
+ find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IA.5 -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_ID.5 -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IP.5 -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IS.5 -print -quit)
+ [ -n "$find" ] && DETECTED="win2k" && return 0
- if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then
- [ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0
- DETECTED="winxpx86" && return 0
fi
- if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then
- DETECTED="win2003r2" && return 0
- fi
+ find=$(find "$dir" -maxdepth 1 -iname WIN51 -print -quit)
+
+ if [ -n "$find" ]; then
+
+ find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AP -print -quit)
+ [ -n "$find" ] && DETECTED="winxpx64" && return 0
+
+ find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IC -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IP -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm -print -quit)
+ [ -n "$find" ] && DETECTED="winxpx86" && return 0
+
+ find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IS -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IA -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IB -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51ID -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IL -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IS -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AA -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AD -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AS -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51MA -print -quit)
+ [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51MD -print -quit)
+ [ -n "$find" ] && DETECTED="win2003r2" && return 0
- if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then
- DETECTED="win2003r2" && return 0
fi
return 1
@@ -2440,6 +1882,10 @@ skipVersion() {
return 1
}
+isCompatible() {
+ return 0
+}
+
setMachine() {
local id="$1"
@@ -2451,22 +1897,34 @@ setMachine() {
"win9"* )
ETFS="[BOOT]/Boot-1.44M.img" ;;
"win2k"* )
- ETFS="[BOOT]/Boot-NoEmul.img" ;;
+ if ! prepareInstall "$iso" "$dir" "$desc" "2k"; then
+ error "Failed to prepare $desc ISO!" && return 1
+ fi ;;
"winxp"* )
- if ! prepareXP "$iso" "$dir" "$desc"; then
+ if ! prepareInstall "$iso" "$dir" "$desc" "xp"; then
error "Failed to prepare $desc ISO!" && return 1
fi ;;
"win2003"* )
- if ! prepare2k3 "$iso" "$dir" "$desc"; then
+ if ! prepareInstall "$iso" "$dir" "$desc" "2k3"; then
error "Failed to prepare $desc ISO!" && return 1
fi ;;
esac
case "${id,,}" in
- "win9"* | "win2k"* )
+ "win9"* )
+ USB="no"
+ VGA="cirrus"
DISK_TYPE="auto"
+ ADAPTER="rtl8139"
MACHINE="pc-i440fx-2.4"
BOOT_MODE="windows_legacy" ;;
+ "win2k"* )
+ VGA="cirrus"
+ MACHINE="pc"
+ USB="pci-ohci"
+ DISK_TYPE="auto"
+ ADAPTER="rtl8139"
+ BOOT_MODE="windows_legacy" ;;
"winxp"* | "win2003"* )
DISK_TYPE="blk"
BOOT_MODE="windows_legacy" ;;
diff --git a/src/entry.sh b/src/entry.sh
index b037cdc..71e939e 100644
--- a/src/entry.sh
+++ b/src/entry.sh
@@ -1,16 +1,19 @@
#!/usr/bin/env bash
set -Eeuo pipefail
+: "${APP:="Windows"}"
+: "${PLATFORM:="x64"}"
: "${BOOT_MODE:="windows"}"
-
-APP="Windows"
-SUPPORT="https://github.com/dockur/windows"
+: "${SUPPORT:="https://github.com/dockur/windows"}"
cd /run
+. start.sh # Startup hook
+. utils.sh # Load functions
. reset.sh # Initialize system
+. server.sh # Start webserver
. define.sh # Define versions
-. mido.sh # Download code
+. mido.sh # Download Windows
. install.sh # Run installation
. disk.sh # Initialize disks
. display.sh # Initialize graphics
@@ -19,7 +22,9 @@ cd /run
. boot.sh # Configure boot
. proc.sh # Initialize processor
. power.sh # Configure shutdown
+. memory.sh # Check available memory
. config.sh # Configure arguments
+. finish.sh # Finish initialization
trap - ERR
@@ -31,9 +36,13 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..."
terminal
( sleep 30; boot ) &
-tail -fn +0 "$QEMU_LOG" 2>/dev/null &
-cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" &
-wait $! || :
+tail -fn +0 "$QEMU_LOG" --pid=$$ 2>/dev/null &
+cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \
+sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \
+-e 's/\x1B\x63//g' -e 's/\x1B\[[=?]7l//g' \
+-e '/^$/d' -e 's/\x44\x53\x73//g' \
+-e 's/failed to load Boot/skipped Boot/g' \
+-e 's/0): Not Found/0)/g' & wait $! || :
sleep 1 & wait $!
[ ! -f "$QEMU_END" ] && finish 0
diff --git a/src/install.sh b/src/install.sh
index b03f55a..7be2996 100644
--- a/src/install.sh
+++ b/src/install.sh
@@ -1,33 +1,107 @@
#!/usr/bin/env bash
set -Eeuo pipefail
-TMP="$STORAGE/tmp"
-DIR="$TMP/unpack"
-FB="falling back to manual installation!"
ETFS="boot/etfsboot.com"
+FB="falling back to manual installation!"
EFISYS="efi/microsoft/boot/efisys_noprompt.bin"
+backup () {
+
+ local count=1
+ local iso="$1"
+ local name="unknown"
+ local root="$STORAGE/backups"
+ local previous="$STORAGE/windows.base"
+
+ if [ -f "$previous" ]; then
+
+ previous=$(<"$previous")
+ previous="${previous//[![:print:]]/}"
+
+ [ -n "$previous" ] && name="${previous%.*}"
+
+ fi
+
+ if ! makeDir "$root"; then
+ error "Failed to create directory \"$root\" !"
+ return 1
+ fi
+
+ local folder="$name"
+ local dir="$root/$folder"
+
+ while [ -d "$dir" ]
+ do
+ count=$((count+1))
+ folder="${name}.${count}"
+ dir="$root/$folder"
+ done
+
+ rm -rf "$dir"
+
+ if ! makeDir "$dir"; then
+ error "Failed to create directory \"$dir\" !"
+ return 1
+ fi
+
+ [ -f "$iso" ] && mv -f "$iso" "$dir/"
+ find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \;
+ find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \;
+ find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \;
+
+ [ -z "$(ls -A "$dir")" ] && rm -rf "$dir"
+ [ -z "$(ls -A "$root")" ] && rm -rf "$root"
+
+ return 0
+}
+
skipInstall() {
local iso="$1"
+ local method=""
local magic byte
local boot="$STORAGE/windows.boot"
local previous="$STORAGE/windows.base"
if [ -f "$previous" ]; then
+
previous=$(<"$previous")
+ previous="${previous//[![:print:]]/}"
+
if [ -n "$previous" ]; then
- previous="$STORAGE/$previous"
- if [[ "${previous,,}" != "${iso,,}" ]]; then
- if [ -f "$boot" ] && hasDisk; then
- info "Detected that the version was changed, but ignoring this because Windows is already installed."
- info "Please start with an empty /storage folder, if you want to install a different version of Windows."
- return 0
+ if [[ "${STORAGE,,}/${previous,,}" != "${iso,,}" ]]; then
+
+ if ! hasDisk; then
+
+ rm -f "$STORAGE/$previous"
+ return 1
+
fi
- [ -f "$previous" ] && rm -f "$previous"
+
+ if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then
+ method="your custom .iso file was changed"
+ else
+ if [[ "${previous,,}" != "windows."* ]]; then
+ method="the VERSION variable was changed"
+ else
+ method="your custom .iso file was removed"
+
+ if [ -f "$boot" ]; then
+ info "Detected that $method, will be ignored."
+ return 0
+ fi
+
+ fi
+ fi
+
+ info "Detected that $method, a backup of your previous installation will be saved..."
+ ! backup "$STORAGE/$previous" && error "Backup failed!"
+
return 1
+
fi
fi
+
fi
[ -f "$boot" ] && hasDisk && return 0
@@ -41,8 +115,10 @@ skipInstall() {
byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17"
if [[ "$magic" != "$byte" ]]; then
+
info "The ISO will be processed again because the configuration was changed..."
return 1
+
fi
return 0
@@ -59,8 +135,8 @@ startInstall() {
if [[ "${VERSION,,}" == "http"* ]]; then
file=$(basename "${VERSION%%\?*}")
- : "${file//+/ }"; printf -v file '%b' "${_//%/\\x}"
- file=$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g')
+ printf -v file '%b' "${file//%/\\x}"
+ file="${file//[!A-Za-z0-9._-]/_}"
else
@@ -76,14 +152,20 @@ startInstall() {
BOOT="$STORAGE/$file"
- ! migrateFiles "$BOOT" "$VERSION" && error "Migration failed!" && exit 57
-
fi
+ TMP="$STORAGE/tmp"
+ rm -rf "$TMP"
+
skipInstall "$BOOT" && return 1
- rm -rf "$TMP"
- mkdir -p "$TMP"
+ if hasDisk; then
+ ! backup "" && error "Backup failed!"
+ fi
+
+ if ! makeDir "$TMP"; then
+ error "Failed to create directory \"$TMP\" !"
+ fi
if [ -z "$CUSTOM" ]; then
@@ -97,6 +179,25 @@ startInstall() {
fi
rm -f "$BOOT"
+
+ find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -delete
+ find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -delete
+ find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -delete
+
+ return 0
+}
+
+writeFile() {
+
+ local txt="$1"
+ local path="$2"
+
+ echo "$txt" >"$path"
+
+ if ! setOwner "$path"; then
+ error "Failed to set the owner for \"$path\" !"
+ fi
+
return 0
}
@@ -110,6 +211,10 @@ finishInstall() {
error "Failed to find ISO file: $iso" && return 1
fi
+ if [[ "$iso" == "$STORAGE/"* ]]; then
+ ! setOwner "$iso" && error "Failed to set the owner for \"$iso\" !"
+ fi
+
if [[ "$aborted" != [Yy1]* ]]; then
# Mark ISO as prepared via magic byte
byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17"
@@ -118,52 +223,68 @@ finishInstall() {
fi
fi
- rm -f "$STORAGE/windows.old"
- rm -f "$STORAGE/windows.vga"
- rm -f "$STORAGE/windows.args"
- rm -f "$STORAGE/windows.base"
- rm -f "$STORAGE/windows.boot"
- rm -f "$STORAGE/windows.mode"
- rm -f "$STORAGE/windows.type"
-
- cp -f /run/version "$STORAGE/windows.ver"
+ local file="$STORAGE/windows.ver"
+ cp -f /run/version "$file"
+ ! setOwner "$file" && error "Failed to set the owner for \"$file\" !"
if [[ "$iso" == "$STORAGE/"* ]]; then
if [[ "$aborted" != [Yy1]* ]] || [ -z "$CUSTOM" ]; then
base=$(basename "$iso")
- echo "$base" > "$STORAGE/windows.base"
+ file="$STORAGE/windows.base"
+ writeFile "$base" "$file"
fi
fi
if [[ "${PLATFORM,,}" == "x64" ]]; then
if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then
- echo "$BOOT_MODE" > "$STORAGE/windows.mode"
+ file="$STORAGE/windows.mode"
+ writeFile "$BOOT_MODE" "$file"
if [[ "${MACHINE,,}" != "q35" ]]; then
- echo "$MACHINE" > "$STORAGE/windows.old"
+ file="$STORAGE/windows.old"
+ writeFile "$MACHINE" "$file"
fi
else
# Enable secure boot + TPM on manual installs as Win11 requires
- if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then
+ if [[ "$MANUAL" == [Yy1]* || "$aborted" == [Yy1]* ]]; then
if [[ "${DETECTED,,}" == "win11"* ]]; then
BOOT_MODE="windows_secure"
- echo "$BOOT_MODE" > "$STORAGE/windows.mode"
+ file="$STORAGE/windows.mode"
+ writeFile "$BOOT_MODE" "$file"
fi
fi
# Enable secure boot on multi-socket systems to workaround freeze
if [ -n "$SOCKETS" ] && [[ "$SOCKETS" != "1" ]]; then
BOOT_MODE="windows_secure"
- echo "$BOOT_MODE" > "$STORAGE/windows.mode"
+ file="$STORAGE/windows.mode"
+ writeFile "$BOOT_MODE" "$file"
fi
fi
fi
if [ -n "${ARGS:-}" ]; then
ARGUMENTS="$ARGS ${ARGUMENTS:-}"
- echo "$ARGS" > "$STORAGE/windows.args"
+ file="$STORAGE/windows.args"
+ writeFile "$ARGS" "$file"
+ fi
+
+ if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then
+ file="$STORAGE/windows.vga"
+ writeFile "$VGA" "$file"
+ fi
+
+ if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then
+ file="$STORAGE/windows.usb"
+ writeFile "$USB" "$file"
fi
if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then
- echo "$DISK_TYPE" > "$STORAGE/windows.type"
+ file="$STORAGE/windows.type"
+ writeFile "$DISK_TYPE" "$file"
+ fi
+
+ if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then
+ file="$STORAGE/windows.net"
+ writeFile "$ADAPTER" "$file"
fi
rm -rf "$TMP"
@@ -177,8 +298,9 @@ abortInstall() {
local efi
[[ "${iso,,}" == *".esd" ]] && exit 60
+ [[ "${UNPACK:-}" == [Yy1]* ]] && exit 60
- efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1)
+ efi=$(find "$dir" -maxdepth 1 -type d -iname efi -print -quit)
if [ -z "$efi" ]; then
[[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy"
@@ -199,13 +321,23 @@ abortInstall() {
return 1
}
-detectCustom() {
+findFile() {
- local file base
- CUSTOM=""
+ local dir file base
+ local fname="$1"
+ local boot="$STORAGE/windows.boot"
- file=$(find / -maxdepth 1 -type f -iname custom.iso | head -n 1)
- [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso | head -n 1)
+ dir=$(find / -maxdepth 1 -type d -iname "$fname" -print -quit)
+ [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" -print -quit)
+
+ if [ -d "$dir" ]; then
+ if ! hasDisk || [ ! -f "$boot" ]; then
+ error "The bind $dir maps to a file that does not exist!" && return 1
+ fi
+ fi
+
+ file=$(find / -maxdepth 1 -type f -iname "$fname" -print -quit)
+ [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" -print -quit)
if [ ! -s "$file" ] && [[ "${VERSION,,}" != "http"* ]]; then
base=$(basename "$VERSION")
@@ -221,76 +353,128 @@ detectCustom() {
[ -z "$size" ] || [[ "$size" == "0" ]] && return 0
ISO="$file"
- CUSTOM="$ISO"
+ CUSTOM="$file"
BOOT="$STORAGE/windows.$size.iso"
return 0
}
+detectCustom() {
+
+ CUSTOM=""
+
+ ! findFile "custom.iso" && return 1
+ [ -n "$CUSTOM" ] && return 0
+
+ ! findFile "boot.iso" && return 1
+ [ -n "$CUSTOM" ] && return 0
+
+ return 0
+}
+
extractESD() {
local iso="$1"
local dir="$2"
local version="$3"
local desc="$4"
- local size size_gb space space_gb desc
+ local size size_gb sizes space space_gb
+ local desc total total1 total2 total3 total4
+ local imageIndex links links1 links2 links3 links4
- local msg="Extracting $desc bootdisk..."
- info "$msg" && html "$msg"
+ local msg="Extracting $desc bootdisk"
+ info "$msg..." && html "$msg..."
if [ "$(stat -c%s "$iso")" -lt 100000000 ]; then
error "Invalid ESD file: Size is smaller than 100 MB" && return 1
fi
rm -rf "$dir"
- mkdir -p "$dir"
- size=16106127360
- size_gb=$(( (size + 1073741823)/1073741824 ))
+ if ! makeDir "$dir"; then
+ error "Failed to create directory \"$dir\" !" && return 1
+ fi
+
+ size=9606127360
+ size_gb=$(formatBytes "$size")
space=$(df --output=avail -B 1 "$dir" | tail -n 1)
- space_gb=$(( (space + 1073741823)/1073741824 ))
+ space_gb=$(formatBytes "$space")
if (( size > space )); then
- error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1
+ error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1
fi
local esdImageCount
esdImageCount=$(wimlib-imagex info "$iso" | awk '/Image Count:/ {print $3}')
- wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || {
+ if [ -z "$esdImageCount" ]; then
+ error "Cannot read the image count in ESD file!" && return 1
+ fi
+
+ sizes=$(wimlib-imagex info "$iso" | grep "Total Bytes:")
+ links=$(wimlib-imagex info "$iso" | grep "Hard Link Bytes:")
+
+ total1=$(awk "NR==1{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//')
+ links1=$(awk "NR==1{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//')
+ total=$(( total1 - links1 ))
+
+ total3=$(awk "NR==3{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//')
+ links3=$(awk "NR==3{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//')
+ total3=$(( total3 - links3 ))
+ total3=$(( total3 + 60000000 ))
+
+ /run/progress.sh "$dir" "$total" "$msg ([P])..." &
+
+ imageIndex="1"
+ wimlib-imagex apply "$iso" "$imageIndex" "$dir" --quiet 2>/dev/null || {
retVal=$?
- error "Extracting $desc bootdisk failed" && return $retVal
+ fKill "progress.sh"
+ error "Extracting $desc bootdisk failed ($retVal)" && return 1
}
+ fKill "progress.sh"
+
local bootWimFile="$dir/sources/boot.wim"
local installWimFile="$dir/sources/install.wim"
- local msg="Extracting $desc environment..."
- info "$msg" && html "$msg"
+ local msg="Extracting $desc environment"
+ info "$msg..." && html "$msg..."
- wimlib-imagex export "$iso" 2 "$bootWimFile" --compress=none --quiet || {
+ imageIndex="2"
+ /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." &
+
+ wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --quiet || {
retVal=$?
- error "Adding WinPE failed" && return ${retVal}
+ fKill "progress.sh"
+ error "Adding WinPE failed ($retVal)" && return 1
}
- local msg="Extracting $desc setup..."
- info "$msg" && html "$msg"
+ fKill "progress.sh"
- wimlib-imagex export "$iso" 3 "$bootWimFile" --compress=none --boot --quiet || {
+ local msg="Extracting $desc setup"
+ info "$msg..."
+
+ imageIndex="3"
+ /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." &
+
+ wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --boot --quiet || {
retVal=$?
- error "Adding Windows Setup failed" && return ${retVal}
+ fKill "progress.sh"
+ error "Adding Windows Setup failed ($retVal)" && return 1
}
+ fKill "progress.sh"
+
if [[ "${PLATFORM,,}" == "x64" ]]; then
LABEL="CCCOMA_X64FRE_EN-US_DV9"
else
LABEL="CPBA_A64FRE_EN-US_DV9"
fi
- local msg="Extracting $desc image..."
- info "$msg" && html "$msg"
+ local msg="Extracting $desc image"
+ info "$msg..." && html "$msg..."
- local edition imageIndex imageEdition
+ local edition imageEdition
edition=$(getCatalog "$version" "name")
if [ -z "$edition" ]; then
@@ -298,15 +482,27 @@ extractESD() {
fi
for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do
- imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//')
+
+ imageEdition=$(wimlib-imagex info "$iso" "$imageIndex" | grep '^Description:' | sed 's/Description:[ \t]*//')
[[ "${imageEdition,,}" != "${edition,,}" ]] && continue
- wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || {
+
+ total4=$(du -sb "$iso" | cut -f1)
+ total4=$(( total4 + 3000000 ))
+
+ /run/progress.sh "$installWimFile" "$total4" "$msg ([P])..." &
+
+ wimlib-imagex export "$iso" "$imageIndex" "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || {
retVal=$?
- error "Addition of $imageIndex to the $desc image failed" && return $retVal
+ fKill "progress.sh"
+ error "Addition of $imageIndex to the $desc image failed ($retVal)" && return 1
}
+
+ fKill "progress.sh"
return 0
+
done
+ fKill "progress.sh"
error "Failed to find product '$edition' in install.wim!" && return 1
}
@@ -316,7 +512,7 @@ extractImage() {
local dir="$2"
local version="$3"
local desc="local ISO"
- local size size_gb space space_gb
+ local file size size_gb space space_gb
if [ -z "$CUSTOM" ]; then
desc="downloaded ISO"
@@ -330,32 +526,58 @@ extractImage() {
return 1
fi
- local msg="Extracting $desc image..."
- info "$msg" && html "$msg"
+ local msg="Extracting $desc image"
+ info "$msg..." && html "$msg..."
rm -rf "$dir"
- mkdir -p "$dir"
+
+ if ! makeDir "$dir"; then
+ error "Failed to create directory \"$dir\" !" && return 1
+ fi
size=$(stat -c%s "$iso")
- size_gb=$(( (size + 1073741823)/1073741824 ))
+ size_gb=$(formatBytes "$size")
space=$(df --output=avail -B 1 "$dir" | tail -n 1)
- space_gb=$(( (space + 1073741823)/1073741824 ))
+ space_gb=$(formatBytes "$space")
- if ((size<100000000)); then
+ if (( size < 100000000 )); then
error "Invalid ISO file: Size is smaller than 100 MB" && return 1
fi
if (( size > space )); then
- error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1
+ error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1
fi
rm -rf "$dir"
+ /run/progress.sh "$dir" "$size" "$msg ([P])..." &
if ! 7z x "$iso" -o"$dir" > /dev/null; then
+ fKill "progress.sh"
error "Failed to extract ISO file: $iso" && return 1
fi
- LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p')
+ fKill "progress.sh"
+
+ if [[ "${UNPACK:-}" != [Yy1]* ]]; then
+
+ LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p')
+
+ else
+
+ file=$(find "$dir" -maxdepth 1 -type f -iname "*.iso" -print -quit)
+
+ if [ -z "$file" ]; then
+ error "Failed to find any .iso file in archive!" && return 1
+ fi
+
+ if ! 7z x "$file" -o"$dir" > /dev/null; then
+ error "Failed to extract archive!" && return 1
+ fi
+
+ LABEL=$(isoinfo -d -i "$file" | sed -n 's/Volume id: //p')
+ rm -f "$file"
+
+ fi
return 0
}
@@ -489,6 +711,10 @@ setXML() {
local file="/custom.xml"
+ if [ -d "$file" ]; then
+ error "The bind $file maps to a file that does not exist!" && exit 67
+ fi
+
[ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml"
[ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml"
[ ! -f "$file" ] || [ ! -s "$file" ] && file="$1"
@@ -533,20 +759,19 @@ detectImage() {
fi
local src wim info
- src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)
+ src=$(find "$dir" -maxdepth 1 -type d -iname sources -print -quit)
if [ ! -d "$src" ]; then
warn "failed to locate 'sources' folder in ISO image, $FB" && return 1
fi
- wim=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1)
- [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1)
+ wim=$(find "$src" -maxdepth 1 -type f \( -iname install.wim -or -iname install.esd \) -print -quit)
if [ ! -f "$wim" ]; then
warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1
fi
- info=$(wimlib-imagex info -xml "$wim" | tr -d '\000')
+ info=$(wimlib-imagex info -xml "$wim" | iconv -f UTF-16LE -t UTF-8)
checkPlatform "$info" || exit 67
DETECTED=$(detectVersion "$info")
@@ -565,7 +790,7 @@ detectImage() {
desc=$(printEdition "$DETECTED" "$DETECTED")
detectLanguage "$info"
- if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then
+ if [[ "${LANGUAGE,,}" != "en" && "${LANGUAGE,,}" != "en-"* ]]; then
language=$(getLanguage "$LANGUAGE" "desc")
desc+=" ($language)"
fi
@@ -573,6 +798,10 @@ detectImage() {
info "Detected: $desc"
setXML "" && return 0
+ if [[ "$DETECTED" == "win81x86"* || "$DETECTED" == "win10x86"* ]]; then
+ error "The 32-bit version of $desc is not supported!" && return 1
+ fi
+
msg="the answer file for $desc was not found ($DETECTED.xml)"
local fallback="/run/assets/${DETECTED%%-*}.xml"
@@ -620,11 +849,12 @@ updateXML() {
local language="$2"
local culture region user admin pass keyboard
- [ -z "$YRES" ] && YRES="720"
- [ -z "$XRES" ] && XRES="1280"
+ [ -z "$HEIGHT" ] && HEIGHT="720"
+ [ -z "$WIDTH" ] && WIDTH="1280"
- sed -i "s/1080<\/VerticalResolution>/$YRES<\/VerticalResolution>/g" "$asset"
- sed -i "s/1920<\/HorizontalResolution>/$XRES<\/HorizontalResolution>/g" "$asset"
+ sed -i "s/>Windows for Docker>$APP for $ENGINE1080<\/VerticalResolution>/$HEIGHT<\/VerticalResolution>/g" "$asset"
+ sed -i "s/1920<\/HorizontalResolution>/$WIDTH<\/HorizontalResolution>/g" "$asset"
culture=$(getLanguage "$language" "culture")
@@ -651,21 +881,33 @@ updateXML() {
user=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g')
if [ -n "$user" ]; then
+ sed -i "s/-name \"Docker\"/-name \"$user\"/g" "$asset"
sed -i "s/Docker<\/Name>/$user<\/Name>/g" "$asset"
sed -i "s/where name=\"Docker\"/where name=\"$user\"/g" "$asset"
sed -i "s/Docker<\/FullName>/$user<\/FullName>/g" "$asset"
sed -i "s/Docker<\/Username>/$user<\/Username>/g" "$asset"
fi
- if [ -n "$PASSWORD" ]; then
- pass=$(printf '%s' "${PASSWORD}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0)
- admin=$(printf '%s' "${PASSWORD}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0)
- sed -i "s/password<\/Value>/$admin<\/Value>/g" "$asset"
- sed -i "s/true<\/PlainText>/false<\/PlainText>/g" "$asset"
- sed -z "s/.........../\n $pass<\/Value>/g" -i "$asset"
- sed -z "s/.............../\n $pass<\/Value>/g" -i "$asset"
- sed -z "s/.........../\n $admin<\/Value>/g" -i "$asset"
- sed -z "s/.............../\n $admin<\/Value>/g" -i "$asset"
+ [ -n "$PASSWORD" ] && pass="$PASSWORD" || pass="admin"
+
+ pw=$(printf '%s' "${pass}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0)
+ admin=$(printf '%s' "${pass}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0)
+
+ sed -i "s/password<\/Value>/$admin<\/Value>/g" "$asset"
+ sed -i "s/true<\/PlainText>/false<\/PlainText>/g" "$asset"
+ sed -z "s/.........../\n $pw<\/Value>/g" -i "$asset"
+ sed -z "s/.............../\n $pw<\/Value>/g" -i "$asset"
+ sed -z "s/.........../\n $admin<\/Value>/g" -i "$asset"
+ sed -z "s/.............../\n $admin<\/Value>/g" -i "$asset"
+
+ if [ -n "$EDITION" ]; then
+ [[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE"
+ sed -i "s/SERVERSTANDARD<\/Value>/SERVER${EDITION^^}<\/Value>/g" "$asset"
+ fi
+
+ if [ -n "$KEY" ]; then
+ sed -i '//,/<\/ProductKey>/d' "$asset"
+ sed -i "s/<\/UserData>/ \n ${KEY}<\/Key>\n OnError<\/WillShowUI>\n <\/ProductKey>\n <\/UserData>/g" "$asset"
fi
return 0
@@ -677,8 +919,13 @@ addDriver() {
local path="$2"
local target="$3"
local driver="$4"
+ local desc=""
local folder=""
+ if [ -z "$id" ]; then
+ warn "no Windows version specified for \"$driver\" driver!" && return 0
+ fi
+
case "${id,,}" in
"win7x86"* ) folder="w7/x86" ;;
"win7x64"* ) folder="w7/amd64" ;;
@@ -698,7 +945,12 @@ addDriver() {
esac
if [ -z "$folder" ]; then
- warn "no \"$driver\" driver found for \"$DETECTED\" !" && return 0
+ desc=$(printVersion "$id" "$id")
+ if [[ "${id,,}" != *"x86"* ]]; then
+ warn "no \"$driver\" driver available for \"$desc\" !" && return 0
+ else
+ warn "no \"$driver\" driver available for the 32-bit version of \"$desc\" !" && return 0
+ fi
fi
[ ! -d "$path/$driver/$folder" ] && return 0
@@ -731,7 +983,12 @@ addDrivers() {
local msg="Adding drivers to image..."
info "$msg" && html "$msg"
- if ! bsdtar -xf /drivers.txz -C "$drivers"; then
+ if [ -z "$version" ]; then
+ version="win11x64"
+ warn "Windows version unknown, falling back to Windows 11 drivers..."
+ fi
+
+ if ! bsdtar -xf /var/drivers.txz -C "$drivers"; then
error "Failed to extract drivers from archive!" && return 1
fi
@@ -800,21 +1057,20 @@ updateImage() {
rm -rf "$tmp"
mkdir -p "$tmp"
- src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)
+ src=$(find "$dir" -maxdepth 1 -type d -iname sources -print -quit)
if [ ! -d "$src" ]; then
error "failed to locate 'sources' folder in ISO image, $FB" && return 1
fi
- wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1)
- [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1)
+ wim=$(find "$src" -maxdepth 1 -type f \( -iname boot.wim -or -iname boot.esd \) -print -quit)
if [ ! -f "$wim" ]; then
error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1
fi
index="1"
- result=$(wimlib-imagex info -xml "$wim" | tr -d '\000')
+ result=$(wimlib-imagex info -xml "$wim" | iconv -f UTF-16LE -t UTF-8)
if [[ "${result^^}" == *""* ]]; then
index="2"
@@ -870,7 +1126,7 @@ updateImage() {
local find="$file"
[[ "$MANUAL" == [Yy1]* ]] && find="$org"
- path=$(find "$dir" -maxdepth 1 -type f -iname "$find" | head -n 1)
+ path=$(find "$dir" -maxdepth 1 -type f -iname "$find" -print -quit)
if [ -f "$path" ]; then
if [[ "$MANUAL" != [Yy1]* ]]; then
@@ -914,8 +1170,8 @@ buildImage() {
desc=$(printVersion "$DETECTED" "ISO")
- local msg="Building $desc image..."
- info "$msg" && html "$msg"
+ local msg="Building $desc image"
+ info "$msg..." && html "$msg..."
[ -z "$LABEL" ] && LABEL="Windows"
@@ -924,14 +1180,16 @@ buildImage() {
fi
size=$(du -h -b --max-depth=0 "$dir" | cut -f1)
- size_gb=$(( (size + 1073741823)/1073741824 ))
+ size_gb=$(formatBytes "$size")
space=$(df --output=avail -B 1 "$TMP" | tail -n 1)
- space_gb=$(( (space + 1073741823)/1073741824 ))
+ space_gb=$(formatBytes "$space")
if (( size > space )); then
- error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1
+ error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1
fi
+ /run/progress.sh "$out" "$size" "$msg ([P])..." &
+
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \
@@ -952,6 +1210,8 @@ buildImage() {
fi
+ fKill "progress.sh"
+
if [ -n "$failed" ]; then
[ -s "$log" ] && echo "$(<"$log")"
error "Failed to build image!" && return 1
@@ -964,61 +1224,56 @@ buildImage() {
[[ "$error" != "$hide" ]] && echo "$error"
mv -f "$out" "$BOOT" || return 1
+ ! setOwner "$BOOT" && error "Failed to set the owner for \"$BOOT\" !"
+
return 0
}
bootWindows() {
- rm -rf "$TMP"
-
if [ -f "$STORAGE/windows.args" ]; then
ARGS=$(<"$STORAGE/windows.args")
+ ARGS="${ARGS//[![:print:]]/}"
ARGUMENTS="$ARGS ${ARGUMENTS:-}"
fi
+ if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then
+ if [ -z "${VGA:-}" ]; then
+ VGA=$(<"$STORAGE/windows.vga")
+ VGA="${VGA//[![:print:]]/}"
+ fi
+ fi
+
+ if [ -s "$STORAGE/windows.usb" ] && [ -f "$STORAGE/windows.usb" ]; then
+ if [ -z "${USB:-}" ]; then
+ USB=$(<"$STORAGE/windows.usb")
+ USB="${USB//[![:print:]]/}"
+ fi
+ fi
+
+ if [ -s "$STORAGE/windows.net" ] && [ -f "$STORAGE/windows.net" ]; then
+ if [ -z "${ADAPTER:-}" ]; then
+ ADAPTER=$(<"$STORAGE/windows.net")
+ ADAPTER="${ADAPTER//[![:print:]]/}"
+ fi
+ fi
+
if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then
- [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type")
+ if [ -z "${DISK_TYPE:-}" ]; then
+ DISK_TYPE=$(<"$STORAGE/windows.type")
+ DISK_TYPE="${DISK_TYPE//[![:print:]]/}"
+ fi
fi
if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then
BOOT_MODE=$(<"$STORAGE/windows.mode")
- if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then
- [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old")
- fi
- return 0
+ BOOT_MODE="${BOOT_MODE//[![:print:]]/}"
fi
- # Migrations
-
- [[ "${PLATFORM,,}" != "x64" ]] && return 0
-
- if [ -f "$STORAGE/windows.old" ]; then
- MACHINE=$(<"$STORAGE/windows.old")
- [ -z "$MACHINE" ] && MACHINE="q35"
- BOOT_MODE="windows_legacy"
- echo "$BOOT_MODE" > "$STORAGE/windows.mode"
- return 0
- fi
-
- local creation="1.10"
- local minimal="2.14"
-
- if [ -f "$STORAGE/windows.ver" ]; then
- creation=$(<"$STORAGE/windows.ver")
- [[ "${creation}" != *"."* ]] && creation="$minimal"
- fi
-
- # Force secure boot on installs created prior to v2.14
- if (( $(echo "$creation < $minimal" | bc -l) )); then
- if [[ "${BOOT_MODE,,}" == "windows" ]]; then
- BOOT_MODE="windows_secure"
- echo "$BOOT_MODE" > "$STORAGE/windows.mode"
- if [ -f "$STORAGE/windows.rom" ] && [ ! -f "$STORAGE/$BOOT_MODE.rom" ]; then
- mv -f "$STORAGE/windows.rom" "$STORAGE/$BOOT_MODE.rom"
- fi
- if [ -f "$STORAGE/windows.vars" ] && [ ! -f "$STORAGE/$BOOT_MODE.vars" ]; then
- mv -f "$STORAGE/windows.vars" "$STORAGE/$BOOT_MODE.vars"
- fi
+ if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then
+ if [[ "${PLATFORM,,}" == "x64" ]]; then
+ MACHINE=$(<"$STORAGE/windows.old")
+ MACHINE="${MACHINE//[![:print:]]/}"
fi
fi
@@ -1043,6 +1298,8 @@ if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then
fi
fi
+DIR="$TMP/unpack"
+
if ! extractImage "$ISO" "$DIR" "$VERSION"; then
rm -f "$ISO" 2> /dev/null || true
exit 62
diff --git a/src/mido.sh b/src/mido.sh
index be7884f..369fc17 100644
--- a/src/mido.sh
+++ b/src/mido.sh
@@ -4,25 +4,26 @@ set -Eeuo pipefail
handle_curl_error() {
local error_code="$1"
+ local server_name="$2"
case "$error_code" in
1) error "Unsupported protocol!" ;;
2) error "Failed to initialize curl!" ;;
3) error "The URL format is malformed!" ;;
5) error "Failed to resolve address of proxy host!" ;;
- 6) error "Failed to resolve Microsoft servers! Is there an Internet connection?" ;;
- 7) error "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?" ;;
- 8) error "Microsoft servers returned a malformed HTTP response!" ;;
+ 6) error "Failed to resolve $server_name servers! Is there an Internet connection?" ;;
+ 7) error "Failed to contact $server_name servers! Is there an Internet connection or is the server down?" ;;
+ 8) error "$server_name servers returned a malformed HTTP response!" ;;
16) error "A problem was detected in the HTTP2 framing layer!" ;;
- 22) error "Microsoft servers returned a failing HTTP status code!" ;;
+ 22) error "$server_name servers returned a failing HTTP status code!" ;;
23) error "Failed at writing Windows media to disk! Out of disk space or permission error?" ;;
26) error "Failed to read Windows media from disk!" ;;
27) error "Ran out of memory during download!" ;;
- 28) error "Connection timed out to Microsoft server!" ;;
- 35) error "SSL connection error from Microsoft server!" ;;
+ 28) error "Connection timed out to $server_name server!" ;;
+ 35) error "SSL connection error from $server_name server!" ;;
36) error "Failed to continue earlier download!" ;;
- 52) error "Received no data from the Microsoft server!" ;;
- 63) error "Microsoft servers returned an unexpectedly large response!" ;;
+ 52) error "Received no data from the $server_name server!" ;;
+ 63) error "$server_name servers returned an unexpectedly large response!" ;;
# POSIX defines exit statuses 1-125 as usable by us
# https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02
$((error_code <= 125)))
@@ -63,77 +64,75 @@ download_windows() {
local lang="$2"
local desc="$3"
local sku_id=""
+ local sku_url=""
+ local iso_url=""
+ local iso_json=""
local language=""
local session_id=""
local user_agent=""
+ local download_type=""
local windows_version=""
local iso_download_link=""
+ local download_page_html=""
local product_edition_id=""
- local iso_download_link_html=""
- local iso_download_page_html=""
- local language_skuid_table_html=""
-
- case "${id,,}" in
- "win11x64" ) windows_version="11" ;;
- "win10x64" ) windows_version="10" ;;
- "win81x64" ) windows_version="8" ;;
- * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;;
- esac
+ local language_skuid_json=""
+ local profile="606624d44113"
user_agent=$(get_agent)
language=$(getLanguage "$lang" "name")
- local url="https://www.microsoft.com/en-us/software-download/windows$windows_version"
- case "$windows_version" in
- 8 | 10) url+="ISO";;
+ case "${id,,}" in
+ "win11x64" ) windows_version="11" && download_type="1" ;;
+ "win10x64" ) windows_version="10" && download_type="1" ;;
+ "win11arm64" ) windows_version="11arm64" && download_type="2" ;;
+ * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;;
esac
+ local url="https://www.microsoft.com/en-us/software-download/windows$windows_version"
+ [[ "${id,,}" == "win10"* ]] && url+="ISO"
+
# uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs
session_id=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random)
+ session_id="${session_id//[![:print:]]/}"
# Get product edition ID for latest release of given Windows version
# Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number
# This is the *only* request we make that Fido doesn't. Fido manually maintains a list of all the Windows release/edition product edition IDs in its script (see: $WindowsVersions array). This is helpful for downloading older releases (e.g. Windows 10 1909, 21H1, etc.) but we always want to get the newest release which is why we get this value dynamically
# Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden
# Remove "Accept" header that curl sends by default
- [[ "$DEBUG" == [Yy1]* ]] && echo " - Parsing download page: ${url}"
- iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || {
- handle_curl_error $?
+ [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}"
+ download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || {
+ handle_curl_error "$?" "Microsoft"
return $?
}
[[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting Product edition ID: "
- # tr: Filter for only numerics to prevent HTTP parameter injection
- # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407
- product_edition_id=$(echo "$iso_download_page_html" | grep -Eo '