diff --git a/.devcontainer.json b/.devcontainer.json
deleted file mode 100644
index 14d70b4..0000000
--- a/.devcontainer.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "windows",
- "service": "windows",
- "forwardPorts": [8006],
- "dockerComposeFile": "compose.yml"
-}
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/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/check.yml b/.github/workflows/check.yml
index 71c2d33..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@v5
- - 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.2.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 263e97c..0b2c17e 100644
--- a/.github/workflows/hub.yml
+++ b/.github/workflows/hub.yml
@@ -15,7 +15,7 @@ jobs:
- 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 149b0a3..bf6dab2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,7 +3,7 @@
ARG VERSION_ARG="latest"
FROM scratch AS build-amd64
-COPY --from=qemux/qemu:7.14 / /
+COPY --from=qemux/qemu:7.27 / /
ARG TARGETARCH
ARG DEBCONF_NOWARNINGS="yes"
@@ -19,7 +19,7 @@ RUN set -eu && \
cabextract \
libxml2-utils \
libarchive-tools && \
- wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \
+ 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 && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
@@ -27,7 +27,7 @@ RUN set -eu && \
COPY --chmod=755 ./src /run/
COPY --chmod=755 ./assets /run/assets
-ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.47-0/virtio-win-1.9.47.tar.xz /var/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:${VERSION_ARG} AS build-arm64
FROM build-${TARGETARCH}
diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml
index f91811f..ee75f27 100644
--- a/assets/win10x64-enterprise-eval.xml
+++ b/assets/win10x64-enterprise-eval.xml
@@ -355,66 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 dc0b0d7..5e5eb8c 100644
--- a/assets/win10x64-enterprise.xml
+++ b/assets/win10x64-enterprise.xml
@@ -358,66 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 08741af..00a049e 100644
--- a/assets/win10x64-iot.xml
+++ b/assets/win10x64-iot.xml
@@ -364,66 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 e3823a9..e77dd6a 100644
--- a/assets/win10x64-ltsc.xml
+++ b/assets/win10x64-ltsc.xml
@@ -361,66 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 969ffe3..7c21359 100644
--- a/assets/win10x64.xml
+++ b/assets/win10x64.xml
@@ -358,66 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 a354801..39c3f02 100644
--- a/assets/win11x64-enterprise-eval.xml
+++ b/assets/win11x64-enterprise-eval.xml
@@ -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
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 23
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 24
+ 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 99d86a5..bafed49 100644
--- a/assets/win11x64-enterprise.xml
+++ b/assets/win11x64-enterprise.xml
@@ -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
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 23
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 24
+ 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-iot.xml b/assets/win11x64-iot.xml
index 699d176..d6825d0 100644
--- a/assets/win11x64-iot.xml
+++ b/assets/win11x64-iot.xml
@@ -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
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 23
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 24
+ 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 20cbfd4..a9a6ce7 100644
--- a/assets/win11x64-ltsc.xml
+++ b/assets/win11x64-ltsc.xml
@@ -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
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 23
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 24
+ 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 4919df1..8082c7c 100644
--- a/assets/win11x64.xml
+++ b/assets/win11x64.xml
@@ -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
+ 24
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 23
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 25
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 24
+ 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 84467bd..09a23ce 100644
--- a/assets/win2008r2-eval.xml
+++ b/assets/win2008r2-eval.xml
@@ -266,30 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 20
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 20
+ 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 9ab119f..5dee0a5 100644
--- a/assets/win2008r2.xml
+++ b/assets/win2008r2.xml
@@ -269,30 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 20
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 20
+ 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 84bf8be..6351559 100644
--- a/assets/win2012r2-eval.xml
+++ b/assets/win2012r2-eval.xml
@@ -284,30 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 17
+ 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 5eef789..bb3dd70 100644
--- a/assets/win2012r2.xml
+++ b/assets/win2012r2.xml
@@ -287,30 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 17
+ 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 45c1d82..d788960 100644
--- a/assets/win2016-eval.xml
+++ b/assets/win2016-eval.xml
@@ -284,50 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 019cd1c..e055e00 100644
--- a/assets/win2016.xml
+++ b/assets/win2016.xml
@@ -287,50 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 e6db2d9..332d974 100644
--- a/assets/win2019-eval.xml
+++ b/assets/win2019-eval.xml
@@ -288,50 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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
index bb87975..2fb6e32 100644
--- a/assets/win2019-hv.xml
+++ b/assets/win2019-hv.xml
@@ -293,50 +293,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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 5051f9f..b5d8235 100644
--- a/assets/win2019.xml
+++ b/assets/win2019.xml
@@ -291,50 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 a4ed208..5748cb4 100644
--- a/assets/win2022-eval.xml
+++ b/assets/win2022-eval.xml
@@ -288,50 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 71c07c9..eac9414 100644
--- a/assets/win2022.xml
+++ b/assets/win2022.xml
@@ -291,50 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 22
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 21
+ 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 d781af7..5b92f00 100644
--- a/assets/win2025-eval.xml
+++ b/assets/win2025-eval.xml
@@ -277,76 +277,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 "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
+ 22
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 22
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 23
+ 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 f6974f6..2796db6 100644
--- a/assets/win2025.xml
+++ b/assets/win2025.xml
@@ -280,76 +280,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 "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
+ 22
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 22
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 23
+ 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
index 85b69e4..c3cc15b 100644
--- a/assets/win7x64-enterprise-eval.xml
+++ b/assets/win7x64-enterprise-eval.xml
@@ -269,9 +269,9 @@
17
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
-
+ 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"
diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml
index 84c873e..b362a9f 100644
--- a/assets/win7x64-enterprise.xml
+++ b/assets/win7x64-enterprise.xml
@@ -273,9 +273,9 @@
17
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
-
+ 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"
diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml
index f17fb0e..2ee085a 100644
--- a/assets/win7x64-ultimate.xml
+++ b/assets/win7x64-ultimate.xml
@@ -273,9 +273,9 @@
17
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
-
+ 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"
diff --git a/assets/win7x64.xml b/assets/win7x64.xml
index be1f3a8..3769dfd 100644
--- a/assets/win7x64.xml
+++ b/assets/win7x64.xml
@@ -273,9 +273,9 @@
17
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
-
+ 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"
diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml
index e96e5a7..7ac8ef0 100644
--- a/assets/win7x86-enterprise.xml
+++ b/assets/win7x86-enterprise.xml
@@ -273,9 +273,9 @@
17
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
-
+ 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"
diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml
index ce81d12..419a508 100644
--- a/assets/win7x86-ultimate.xml
+++ b/assets/win7x86-ultimate.xml
@@ -273,9 +273,9 @@
17
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
-
+ 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"
diff --git a/assets/win7x86.xml b/assets/win7x86.xml
index 314c2ee..bae5a8f 100644
--- a/assets/win7x86.xml
+++ b/assets/win7x86.xml
@@ -273,9 +273,9 @@
17
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
-
+ 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"
diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml
index f3a61e9..745fd9d 100644
--- a/assets/win81x64-enterprise-eval.xml
+++ b/assets/win81x64-enterprise-eval.xml
@@ -269,30 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 17
+ 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 bf927cc..a073c38 100644
--- a/assets/win81x64-enterprise.xml
+++ b/assets/win81x64-enterprise.xml
@@ -272,30 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 17
+ 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 290e923..6b45785 100644
--- a/assets/win81x64.xml
+++ b/assets/win81x64.xml
@@ -279,30 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 18
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 17
+ 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 1e3709c..a3dac19 100644
--- a/assets/winvistax64-enterprise.xml
+++ b/assets/winvistax64-enterprise.xml
@@ -233,25 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 23
+ 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 cb1d1c1..eb12e60 100644
--- a/assets/winvistax64-ultimate.xml
+++ b/assets/winvistax64-ultimate.xml
@@ -233,25 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 23
+ 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 729e568..ad2ac70 100644
--- a/assets/winvistax64.xml
+++ b/assets/winvistax64.xml
@@ -233,25 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 23
+ 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 66efdf3..5092331 100644
--- a/assets/winvistax86-enterprise.xml
+++ b/assets/winvistax86-enterprise.xml
@@ -233,25 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 23
+ 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 5231d50..97ad23e 100644
--- a/assets/winvistax86-ultimate.xml
+++ b/assets/winvistax86-ultimate.xml
@@ -233,25 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 23
+ 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 ef0ed47..ade1942 100644
--- a/assets/winvistax86.xml
+++ b/assets/winvistax86.xml
@@ -233,25 +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
- cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts
- Add entry in hosts file
+ 23
+ cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
+ Create desktop shortcut to shared folder
- 23
+ 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/readme.md b/readme.md
index 1c41efa..adbb6bf 100644
--- a/readme.md
+++ b/readme.md
@@ -53,7 +53,7 @@ services:
##### Via Docker CLI:
```bash
-docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --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:
@@ -66,6 +66,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
[](https://codespaces.new/dockur/windows)
+##### Via a graphical installer:
+
+[](https://winboat.app)
+
## FAQ 💬
### How do I use it?
@@ -93,9 +97,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
| **Value** | **Version** | **Size** |
|---|---|---|
- | `11` | Windows 11 Pro | 5.4 GB |
+ | `11` | Windows 11 Pro | 7.2 GB |
| `11l` | Windows 11 LTSC | 4.7 GB |
- | `11e` | Windows 11 Enterprise | 5.3 GB |
+ | `11e` | Windows 11 Enterprise | 6.6 GB |
||||
| `10` | Windows 10 Pro | 5.7 GB |
| `10l` | Windows 10 LTSC | 4.6 GB |
@@ -143,23 +147,20 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
### 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`.
+ After installation there will be a folder called `Shared` on your desktop, which can be used to exchange files with the host machine.
- 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:
+ To select a folder on the host for this purpose, include the following bind mount in your compose file:
```yaml
volumes:
- - ./example:/data
+ - ./example:/shared
```
- The example folder `./example` will be available as ` \\host.lan\Data`.
-
-> [!TIP]
-> You can map this path to a drive letter in Windows, for easier access.
+ 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:
@@ -171,9 +172,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
### How do I configure the username and password?
- By default, a user called `Docker` is created during installation and its password is `admin`.
+ By default, a user called `Docker` is created and its password is `admin`.
- If you want to use different credentials, you can configure them in your compose file (only before installation):
+ If you want to use different credentials during installation, you can configure them in your compose file:
```yaml
environment:
@@ -185,7 +186,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
By default, the English version of Windows will be downloaded.
- But before installation you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language:
+ But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language to be downloaded:
```yaml
environment:
@@ -196,7 +197,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
### 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 `KEYBOARD` and `REGION` variables like this (before installation):
+ 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:
@@ -204,15 +205,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
KEYBOARD: "en-US"
```
-### How do I select the edition?
-
- Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a `EDITION` variable like this (before installation):
-
- ```yaml
- environment:
- EDITION: "core"
- ```
-
### How do I install a custom image?
In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable:
diff --git a/src/define.sh b/src/define.sh
index 33d1d45..3db2069 100644
--- a/src/define.sh
+++ b/src/define.sh
@@ -436,7 +436,7 @@ printVersion() {
"tiny11"* ) desc="Tiny 11" ;;
"tiny10"* ) desc="Tiny 10" ;;
"core11"* ) desc="Core 11" ;;
- "nano11"* ) desc="Nano 11" ;;
+ "nano11"* ) desc="Nano 11" ;;
"win7"* ) desc="Windows 7" ;;
"win8"* ) desc="Windows 8" ;;
"win10"* ) desc="Windows 10" ;;
@@ -577,7 +577,7 @@ fromFile() {
;;
"nano11"* | "nano_11"* )
id="nano11"
- ;;
+ ;;
"tiny11core"* | "tiny11_core"* | "tiny_11_core"* )
id="core11"
;;
@@ -718,17 +718,18 @@ getMido() {
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=5387960320
- sum="755a90d43e826a74b9e1932a34788b898e028272439b777e5593dee8d53622ae"
- url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENTENTERPRISEEVAL_OEMRET_A64FRE_en-us.iso"
+ 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-iot-eval" | "win11x64-enterprise-ltsc-eval" )
size=5060020224
@@ -812,7 +813,7 @@ 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" )
@@ -956,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" )
@@ -1055,7 +1056,7 @@ getLink3() {
local size=""
local host="https://nixsys.com/drivers"
- [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
"win7x64" | "win7x64-ultimate" )
@@ -1098,7 +1099,7 @@ 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" )
@@ -1107,14 +1108,14 @@ getLink4() {
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
@@ -1122,9 +1123,9 @@ getLink4() {
url="tiny-10-23-h2/tiny10%20x64%2023h2.iso"
;;
"win11x64" )
- size=5819484160
- sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11"
- url="windows-11-24h2-x64/Windows%2011%2024H2%20x64.iso"
+ 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
@@ -1406,7 +1407,7 @@ prepareInstall() {
error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1
fi
- if [[ "${driver,,}" == "xp" ]] || [[ "${driver,,}" == "2k3" ]]; then
+ if [[ "${driver,,}" == "xp" || "${driver,,}" == "2k3" ]]; then
local msg="Adding drivers to image..."
info "$msg" && html "$msg"
@@ -1583,9 +1584,6 @@ prepareInstall() {
[ -n "$PASSWORD" ] && password=$(echo "$PASSWORD" | sed 's/"//g')
[ -z "$password" ] && password="admin"
- local ip="20.20.20.1"
- [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1"
-
find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \;
{ echo "[Data]"
@@ -1622,7 +1620,7 @@ prepareInstall() {
echo "[UserData]"
echo " FullName=\"$username\""
echo " ComputerName=\"*\""
- echo " OrgName=\"Windows for Docker\""
+ echo " OrgName=\"$APP for $ENGINE\""
echo " $KEY"
echo ""
echo "[Identification]"
@@ -1768,19 +1766,18 @@ prepareInstall() {
echo ""
echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")"
echo ""
- echo "With (CreateObject(\"Scripting.FileSystemObject\"))"
- echo " SysRoot = WshShell.ExpandEnvironmentStrings(\"%SystemRoot%\")"
- echo " Set oFile = .OpenTextFile(SysRoot & \"\system32\drivers\etc\hosts\", 8, true)"
- echo " oFile.Write(\"$ip host.lan\")"
- echo " oFile.Close()"
- echo " Set oFile = Nothing"
+ 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\$/admin.vbs"
+ } | 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"
@@ -1885,6 +1882,10 @@ skipVersion() {
return 1
}
+isCompatible() {
+ return 0
+}
+
setMachine() {
local id="$1"
diff --git a/src/entry.sh b/src/entry.sh
index 17b2147..71e939e 100644
--- a/src/entry.sh
+++ b/src/entry.sh
@@ -8,8 +8,10 @@ set -Eeuo pipefail
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 Windows
. install.sh # Run installation
@@ -20,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
@@ -32,9 +36,11 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..."
terminal
( sleep 30; boot ) &
-tail -fn +0 "$QEMU_LOG" 2>/dev/null &
+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 $! || :
diff --git a/src/install.sh b/src/install.sh
index 46bc3fd..7be2996 100644
--- a/src/install.sh
+++ b/src/install.sh
@@ -22,7 +22,11 @@ backup () {
fi
- mkdir -p "$root"
+ if ! makeDir "$root"; then
+ error "Failed to create directory \"$root\" !"
+ return 1
+ fi
+
local folder="$name"
local dir="$root/$folder"
@@ -34,7 +38,11 @@ backup () {
done
rm -rf "$dir"
- mkdir -p "$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/" \;
@@ -127,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
@@ -155,7 +163,9 @@ startInstall() {
! backup "" && error "Backup failed!"
fi
- mkdir -p "$TMP"
+ if ! makeDir "$TMP"; then
+ error "Failed to create directory \"$TMP\" !"
+ fi
if [ -z "$CUSTOM" ]; then
@@ -177,6 +187,20 @@ startInstall() {
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
+}
+
finishInstall() {
local iso="$1"
@@ -187,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"
@@ -195,56 +223,68 @@ finishInstall() {
fi
fi
- 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
- echo "$VGA" > "$STORAGE/windows.vga"
+ file="$STORAGE/windows.vga"
+ writeFile "$VGA" "$file"
fi
if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then
- echo "$USB" > "$STORAGE/windows.usb"
+ 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
- echo "$ADAPTER" > "$STORAGE/windows.net"
+ file="$STORAGE/windows.net"
+ writeFile "$ADAPTER" "$file"
fi
rm -rf "$TMP"
@@ -338,19 +378,24 @@ extractESD() {
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
+ 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=$(formatBytes "$space")
@@ -366,40 +411,70 @@ extractESD() {
error "Cannot read the image count in ESD file!" && return 1
fi
- wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || {
+ 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
@@ -407,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
}
@@ -439,18 +526,21 @@ 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=$(formatBytes "$size")
space=$(df --output=avail -B 1 "$dir" | tail -n 1)
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
@@ -459,11 +549,15 @@ extractImage() {
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
+ fKill "progress.sh"
+
if [[ "${UNPACK:-}" != [Yy1]* ]]; then
LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p')
@@ -696,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
@@ -704,7 +798,7 @@ detectImage() {
info "Detected: $desc"
setXML "" && return 0
- if [[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then
+ if [[ "$DETECTED" == "win81x86"* || "$DETECTED" == "win10x86"* ]]; then
error "The 32-bit version of $desc is not supported!" && return 1
fi
@@ -755,13 +849,10 @@ updateXML() {
local language="$2"
local culture region user admin pass keyboard
- if [ -n "${VM_NET_IP:-}" ]; then
- sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset"
- fi
-
[ -z "$HEIGHT" ] && HEIGHT="720"
[ -z "$WIDTH" ] && WIDTH="1280"
+ sed -i "s/>Windows for Docker>$APP for $ENGINE1080<\/VerticalResolution>/$HEIGHT<\/VerticalResolution>/g" "$asset"
sed -i "s/1920<\/HorizontalResolution>/$WIDTH<\/HorizontalResolution>/g" "$asset"
@@ -1079,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"
@@ -1097,6 +1188,8 @@ buildImage() {
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}" \
@@ -1117,6 +1210,8 @@ buildImage() {
fi
+ fKill "progress.sh"
+
if [ -n "$failed" ]; then
[ -s "$log" ] && echo "$(<"$log")"
error "Failed to build image!" && return 1
@@ -1129,6 +1224,8 @@ buildImage() {
[[ "$error" != "$hide" ]] && echo "$error"
mv -f "$out" "$BOOT" || return 1
+ ! setOwner "$BOOT" && error "Failed to set the owner for \"$BOOT\" !"
+
return 0
}
diff --git a/src/mido.sh b/src/mido.sh
index be21509..369fc17 100644
--- a/src/mido.sh
+++ b/src/mido.sh
@@ -182,6 +182,7 @@ download_windows_eval() {
local desc="$3"
local filter=""
local culture=""
+ local compare=""
local language=""
local user_agent=""
local enterprise_type=""
@@ -254,7 +255,7 @@ download_windows_eval() {
iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || {
# This should only happen if there's been some change to the download endpoint web address
- if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then
+ if [[ "${lang,,}" == "en" || "${lang,,}" == "en-"* ]]; then
error "Windows server download page gave us no download link!"
else
language=$(getLanguage "$lang" "desc")
@@ -274,8 +275,6 @@ download_windows_eval() {
fi ;;
"arm64" )
iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;;
- * )
- error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;;
esac ;;
"enterprise" )
case "${PLATFORM,,}" in
@@ -287,16 +286,16 @@ download_windows_eval() {
fi ;;
"arm64" )
iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;;
- * )
- error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;;
esac ;;
"server" )
- iso_download_link=$(echo "$iso_download_links" | head -n 1) ;;
+ case "${PLATFORM,,}" in
+ "x64" )
+ iso_download_link=$(echo "$iso_download_links" | head -n 1) ;;
+ esac ;;
* )
error "Invalid type specified, value \"$enterprise_type\" is not recognized!" && return 1 ;;
esac
- [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link"
[ -z "$iso_download_link" ] && error "Could not parse download link from page!" && return 1
# Follow redirect so proceeding log message is useful
@@ -308,6 +307,30 @@ download_windows_eval() {
return $?
}
+ case "${PLATFORM,,}" in
+ "x64" )
+ if [[ "${iso_download_link,,}" != *"x64"* ]]; then
+ echo "Found download link: $iso_download_link"
+ error "Download link is for the wrong platform? Please report this at $SUPPORT/issues"
+ return 1
+ fi ;;
+ "arm64" )
+ if [[ "${iso_download_link,,}" != *"a64"* && "${iso_download_link,,}" != *"arm64"* ]]; then
+ if [[ "$DEBUG" == [Yy1]* ]]; then
+ echo "Found download link: $iso_download_link"
+ echo "Link for ARM platform currently not available!"
+ fi
+ return 1
+ fi ;;
+ esac
+
+ if [[ "$DEBUG" == [Yy1]* && "$VERIFY" == [Yy1]* && "${lang,,}" == "en"* ]]; then
+ compare=$(getMido "$id" "$lang" "")
+ if [[ "${iso_download_link,,}" != "${compare,,}" ]]; then
+ echo "Retrieved link does not match the fixed link: $compare"
+ fi
+ fi
+
MIDO_URL="$iso_download_link"
return 0
}
@@ -327,7 +350,7 @@ getWindows() {
case "${version,,}" in
"win2008r2" | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* )
- if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then
+ if [[ "${lang,,}" != "en" && "${lang,,}" != "en-"* ]]; then
error "No download in the $language language available for $edition!"
MIDO_URL="" && return 1
fi ;;
@@ -364,6 +387,36 @@ getWindows() {
return 0
}
+getBuild() {
+
+ local id="$1"
+ local ret="$2"
+ local url=""
+ local name=""
+ local build="$3"
+ local edition=""
+ local file="catalog.xml"
+
+ case "${id,,}" in
+ "win11${PLATFORM,,}" )
+ name="Windows 11 Pro"
+ url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Professional" ;;
+ "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval")
+ name="Windows 11 Enterprise"
+ url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Enterprise" ;;
+ esac
+
+ case "${ret,,}" in
+ "url" ) echo "$url" ;;
+ "file" ) echo "$file" ;;
+ "name" ) echo "$name" ;;
+ "edition" ) echo "$edition" ;;
+ *) echo "";;
+ esac
+
+ return 0
+}
+
getCatalog() {
local id="$1"
@@ -371,6 +424,12 @@ getCatalog() {
local url=""
local name=""
local edition=""
+ local file="catalog.cab"
+
+ if [[ "${id,,}" == "win11"* ]] && ! isCompatible; then
+ # ARMv8.0 cannot run Windows 11 builds 24H2 and up.
+ getBuild "$1" "$2" "22631.2861" && return 0
+ fi
case "${id,,}" in
"win11${PLATFORM,,}" )
@@ -393,8 +452,9 @@ getCatalog() {
case "${ret,,}" in
"url" ) echo "$url" ;;
+ "file" ) echo "$file" ;;
"name" ) echo "$name" ;;
- "edition" ) echo "$edition" ;;
+ "edition" ) echo '[Edition="'"${edition}"'"]' ;;
*) echo "";;
esac
@@ -407,62 +467,74 @@ getESD() {
local version="$2"
local lang="$3"
local desc="$4"
+ local file
local result
local culture
local language
- local editionName
- local winCatalog
+ local edition
+ local catalog
+ file=$(getCatalog "$version" "file")
+ catalog=$(getCatalog "$version" "url")
culture=$(getLanguage "$lang" "culture")
- winCatalog=$(getCatalog "$version" "url")
- editionName=$(getCatalog "$version" "edition")
+ edition=$(getCatalog "$version" "edition")
- if [ -z "$winCatalog" ] || [ -z "$editionName" ]; then
+ if [ -z "$file" ] || [ -z "$catalog" ]; then
error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1
fi
- local msg="Downloading product information from Microsoft server..."
+ local msg="Downloading catalog..."
info "$msg" && html "$msg"
rm -rf "$dir"
- mkdir -p "$dir"
- local wFile="catalog.cab"
+ if ! makeDir "$dir"; then
+ error "Failed to create directory \"$dir\" !" && return 1
+ fi
+
local xFile="products.xml"
local eFile="esd_edition.xml"
local fFile="products_filter.xml"
- { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30 --no-http-keep-alive; rc=$?; } || :
+ { wget "$catalog" -O "$dir/$file" -q --timeout=30 --no-http-keep-alive; rc=$?; } || :
- msg="Failed to download $winCatalog"
+ msg="Failed to download $catalog"
(( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1
(( rc == 4 )) && error "$msg , network failure!" && return 1
(( rc == 8 )) && error "$msg , server issued an error response!" && return 1
(( rc != 0 )) && error "$msg , reason: $rc" && return 1
- cd "$dir"
+ if [[ "$file" == *".xml" ]]; then
+
+ mv -f "$dir/$file" "$dir/$xFile"
+
+ else
+
+ cd "$dir"
+
+ if ! cabextract "$file" > /dev/null; then
+ cd /run
+ error "Failed to extract $file!" && return 1
+ fi
- if ! cabextract "$wFile" > /dev/null; then
cd /run
- error "Failed to extract $wFile!" && return 1
- fi
- cd /run
+ fi
if [ ! -s "$dir/$xFile" ]; then
- error "Failed to find $xFile in $wFile!" && return 1
+ error "Failed to find $xFile in $file!" && return 1
fi
- local edQuery='//File[Architecture="'${PLATFORM,,}'"][Edition="'${editionName}'"]'
+ local edQuery='//File[Architecture="'${PLATFORM,,}'"]'"${edition}"''
result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null)
if [ -z "$result" ]; then
- edQuery='//File[Architecture="'${PLATFORM^^}'"][Edition="'${editionName}'"]'
+ edQuery='//File[Architecture="'${PLATFORM^^}'"]'"${edition}"''
+
result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null)
if [ -z "$result" ]; then
-
desc=$(printEdition "$version" "$desc")
language=$(getLanguage "$lang" "desc")
error "No download link available for $desc!" && return 1
@@ -528,8 +600,8 @@ verifyFile() {
local total="$3"
local check="$4"
- if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then
- if [[ "$VERIFY" == [Yy1]* ]] || [[ "$DEBUG" == [Yy1]* ]]; then
+ if [ -n "$size" ] && [[ "$total" != "$size" && "$size" != "0" ]]; then
+ if [[ "$VERIFY" == [Yy1]* || "$DEBUG" == [Yy1]* ]]; then
warn "The downloaded file has a different size ( $total bytes) than expected ( $size bytes). Please report this at $SUPPORT/issues"
fi
fi
@@ -569,7 +641,6 @@ downloadFile() {
local msg="Downloading $desc"
local rc total total_gb progress domain dots agent space folder
- rm -f "$iso"
agent=$(get_agent)
if [ -n "$size" ] && [[ "$size" != "0" ]]; then
@@ -600,7 +671,7 @@ downloadFile() {
info "$msg..."
[[ "$DEBUG" == [Yy1]* ]] && echo "Downloading: $url"
- { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || :
+ { wget "$url" -O "$iso" --continue -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || :
fKill "progress.sh"
@@ -624,23 +695,40 @@ downloadFile() {
return 1
}
+delay() {
+
+ local i
+ local delay="$1"
+ local msg="Will retry in X seconds..."
+
+ info "${msg/X/$delay}"
+
+ for i in $(seq "$delay" -1 1); do
+ html "${msg/X/$i}"
+ sleep 1
+ done
+
+ return 0
+}
+
downloadImage() {
local iso="$1"
local version="$2"
local lang="$3"
- local delay=5
local tried="n"
local success="n"
+ local seconds="5"
local url sum size base desc language
- local msg="Will retry after $delay seconds..."
if [[ "${version,,}" == "http"* ]]; then
base=$(basename "$iso")
desc=$(fromFile "$base")
+
+ rm -f "$iso"
downloadFile "$iso" "$version" "" "" "" "$desc" && return 0
- info "$msg" && html "$msg" && sleep "$delay"
+ delay "$seconds"
downloadFile "$iso" "$version" "" "" "" "$desc" && return 0
rm -f "$iso"
@@ -653,7 +741,7 @@ downloadImage() {
desc=$(printVersion "$version" "")
- if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then
+ if [[ "${lang,,}" != "en" && "${lang,,}" != "en-"* ]]; then
language=$(getLanguage "$lang" "desc")
if ! validVersion "$version" "$lang"; then
desc=$(printEdition "$version" "$desc")
@@ -670,15 +758,17 @@ downloadImage() {
if getWindows "$version" "$lang" "$desc"; then
success="y"
else
- info "$msg" && html "$msg" && sleep "$delay"
+ delay "$seconds"
getWindows "$version" "$lang" "$desc" && success="y"
fi
if [[ "$success" == "y" ]]; then
size=$(getMido "$version" "$lang" "size" )
sum=$(getMido "$version" "$lang" "sum")
+
+ rm -f "$iso"
downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0
- info "$msg" && html "$msg" && sleep "$delay"
+ delay "$seconds"
downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0
rm -f "$iso"
fi
@@ -698,14 +788,16 @@ downloadImage() {
if getESD "$TMP/esd" "$version" "$lang" "$desc"; then
success="y"
else
- info "$msg" && html "$msg" && sleep "$delay"
+ delay "$seconds"
getESD "$TMP/esd" "$version" "$lang" "$desc" && success="y"
fi
if [[ "$success" == "y" ]]; then
ISO="${ISO%.*}.esd"
+
+ rm -f "$ISO"
downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0
- info "$msg" && html "$msg" && sleep "$delay"
+ delay "$seconds"
downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0
rm -f "$ISO"
ISO="$iso"
@@ -718,14 +810,18 @@ downloadImage() {
url=$(getLink "$i" "$version" "$lang")
if [ -n "$url" ]; then
+
if [[ "$tried" != "n" ]]; then
info "Failed to download $desc, will try another mirror now..."
fi
+
tried="y"
size=$(getSize "$i" "$version" "$lang")
sum=$(getHash "$i" "$version" "$lang")
+
+ rm -f "$iso"
downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0
- info "$msg" && html "$msg" && sleep "$delay"
+ delay "$seconds"
downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0
rm -f "$iso"
fi
diff --git a/src/power.sh b/src/power.sh
index 9ca5583..98a6f73 100644
--- a/src/power.sh
+++ b/src/power.sh
@@ -1,11 +1,11 @@
#!/usr/bin/env bash
set -Eeuo pipefail
+: "${QEMU_TIMEOUT:="110"}" # QEMU Termination timeout
+
# Configure QEMU for graceful shutdown
QEMU_TERM=""
-QEMU_PORT=7100
-QEMU_TIMEOUT=110
QEMU_DIR="/run/shm"
QEMU_PID="$QEMU_DIR/qemu.pid"
QEMU_PTY="$QEMU_DIR/qemu.pty"
@@ -74,6 +74,7 @@ ready() {
finish() {
local pid
+ local cnt=0
local reason=$1
touch "$QEMU_END"
@@ -81,20 +82,32 @@ finish() {
if [ -s "$QEMU_PID" ]; then
pid=$(<"$QEMU_PID")
- error "Forcefully terminating Windows, reason: $reason..."
+ echo && error "Forcefully terminating Windows, reason: $reason..."
{ kill -15 "$pid" || true; } 2>/dev/null
while isAlive "$pid"; do
+
sleep 1
+ cnt=$((cnt+1))
+
# Workaround for zombie pid
[ ! -s "$QEMU_PID" ] && break
+
+ if [ "$cnt" == "5" ]; then
+ echo && error "QEMU did not terminate itself, forcefully killing process..."
+ { kill -9 "$pid" || true; } 2>/dev/null
+ fi
+
done
+
fi
if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then
# Remove CD-ROM ISO after install
if ready; then
- touch "$STORAGE/windows.boot"
+ local file="$STORAGE/windows.boot"
+ touch "$file"
+ ! setOwner "$file" && error "Failed to set the owner for \"$file\" !"
if [[ "$REMOVE" != [Nn]* ]]; then
rm -f "$BOOT" 2>/dev/null || true
fi
@@ -103,11 +116,19 @@ finish() {
pid="/var/run/tpm.pid"
[ -s "$pid" ] && pKill "$(<"$pid")"
+ rm -f "$pid"
pid="/var/run/wsdd.pid"
[ -s "$pid" ] && pKill "$(<"$pid")"
+ rm -f "$pid"
- fKill "smbd"
+ pid="/var/run/samba/nmbd.pid"
+ [ -s "$pid" ] && pKill "$(<"$pid")"
+ rm -f "$pid"
+
+ pid="/var/run/samba/smbd.pid"
+ [ -s "$pid" ] && pKill "$(<"$pid")"
+ rm -f "$pid"
closeNetwork
@@ -139,7 +160,7 @@ terminal() {
fi
if [ ! -c "$dev" ]; then
- dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$QEMU_PORT" | tr -d '\000')
+ dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$MON_PORT" | tr -d '\000')
dev="${dev#*serial0}"
dev="${dev#*pty:}"
dev="${dev%%$'\n'*}"
@@ -188,7 +209,7 @@ _graceful_shutdown() {
fi
# Send ACPI shutdown signal
- echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null
+ echo 'system_powerdown' | nc -q 1 -w 1 localhost "$MON_PORT" > /dev/null
local cnt=0
while [ "$cnt" -lt "$QEMU_TIMEOUT" ]; do
@@ -203,7 +224,7 @@ _graceful_shutdown() {
info "Waiting for Windows to shutdown... ($cnt/$QEMU_TIMEOUT)"
# Send ACPI shutdown signal
- echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null
+ echo 'system_powerdown' | nc -q 1 -w 1 localhost "$MON_PORT" > /dev/null
done
@@ -215,7 +236,7 @@ _graceful_shutdown() {
}
SERIAL="pty"
-MONITOR="telnet:localhost:$QEMU_PORT,server,nowait,nodelay"
+MONITOR="telnet:localhost:$MON_PORT,server,nowait,nodelay"
MONITOR+=" -daemonize -D $QEMU_LOG -pidfile $QEMU_PID"
_trap _graceful_shutdown SIGTERM SIGHUP SIGINT SIGABRT SIGQUIT
diff --git a/src/samba.sh b/src/samba.sh
index e5b4442..7cd3210 100644
--- a/src/samba.sh
+++ b/src/samba.sh
@@ -1,77 +1,123 @@
#!/usr/bin/env bash
set -Eeuo pipefail
-: "${SAMBA:="Y"}"
+: "${SAMBA:="Y"}" # Enable Samba
+: "${SAMBA_LEVEL:="1"}" # Logging level
+: "${SAMBA_DEBUG:="N"}" # Disable debug
+
+tmp="/tmp/smb"
+rm -rf "$tmp"
+
+rm -f /var/run/wsdd.pid
+rm -f /var/run/samba/nmbd.pid
+rm -f /var/run/samba/smbd.pid
[[ "$SAMBA" == [Nn]* ]] && return 0
[[ "$NETWORK" == [Nn]* ]] && return 0
-hostname="host.lan"
-interface="dockerbridge"
-
if [[ "$DHCP" == [Yy1]* ]]; then
+ socket="$IP"
hostname="$IP"
- interface="$VM_NET_DEV"
+ interfaces="$VM_NET_DEV"
+else
+ hostname="host.lan"
+ case "${NETWORK,,}" in
+ "passt" | "slirp" )
+ interfaces="lo"
+ socket="127.0.0.1" ;;
+ *)
+ socket="$VM_NET_IP"
+ interfaces="$VM_NET_BRIDGE" ;;
+ esac
+ if [ -n "${SAMBA_INTERFACE:-}" ]; then
+ interfaces+=",$SAMBA_INTERFACE"
+ fi
fi
-if [[ "${NETWORK,,}" == "user"* ]]; then
- interface="127.0.0.1"
-fi
+html "Initializing shared folder..."
+SAMBA_CONFIG="/etc/samba/smb.conf"
+[[ "$DEBUG" == [Yy1]* ]] && echo "Starting Samba daemon..."
addShare() {
local dir="$1"
- local name="$2"
- local comment="$3"
+ local ref="$2"
+ local name="$3"
+ local comment="$4"
+ local cfg="$5"
+ local owner=""
- mkdir -p "$dir" || return 1
- ls -A "$dir" >/dev/null 2>&1 || return 1
+ if [ ! -d "$dir" ]; then
+ if ! mkdir -p "$dir"; then
+ error "Failed to create shared folder ($dir)." && return 1
+ fi
+ fi
+
+ if ! ls -A "$dir" >/dev/null 2>&1; then
+ msg="No permission to access shared folder ($dir)."
+ msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount."
+ error "$msg" && return 1
+ fi
+
+ if [ ! -w "$dir" ]; then
+ msg="shared folder ($dir) is not writeable!"
+ warn "$msg"
+ fi
if [ -z "$(ls -A "$dir")" ]; then
+ if ! chmod 2777 "$dir"; then
+ error "Failed to set permissions for directory $dir" && return 1
+ fi
+ owner=$(stat -c %u "$dir")
+ if [[ "$owner" == "0" ]]; then
+ if ! chown "1000:1000" "$dir"; then
+ error "Failed to set ownership for directory $dir" && return 1
+ fi
+ fi
+ fi
- chmod 777 "$dir" || return 1
+ if [[ "$dir" == "$tmp" ]]; then
- { echo "--------------------------------------------------------"
- echo " $APP for Docker v$( "$dir/readme.txt"
fi
- { echo ""
- echo "[$name]"
- echo " path = $dir"
- echo " comment = $comment"
- echo " writable = yes"
- echo " guest ok = yes"
- echo " guest only = yes"
- echo " force user = root"
- echo " force group = root"
- } >> "/etc/samba/smb.conf"
+ { echo ""
+ echo "[$name]"
+ echo " path = $dir"
+ echo " comment = $comment"
+ echo " writable = yes"
+ echo " guest ok = yes"
+ echo " guest only = yes"
+ } >> "$cfg"
return 0
}
-{ echo "[global]"
+{ echo "[global]"
echo " server string = Dockur"
echo " netbios name = $hostname"
echo " workgroup = WORKGROUP"
- echo " interfaces = $interface"
+ echo " interfaces = $interfaces"
echo " bind interfaces only = yes"
+ echo " socket address = $socket"
echo " security = user"
echo " guest account = nobody"
echo " map to guest = Bad User"
@@ -79,57 +125,104 @@ addShare() {
echo " follow symlinks = yes"
echo " wide links = yes"
echo " unix extensions = no"
+ echo " inherit owner = yes"
+ echo " create mask = 0666"
+ echo " directory mask = 02777"
+ echo " force user = root"
+ echo " force group = root"
+ echo " force create mode = 0666"
+ echo " force directory mode = 02777"
echo ""
- echo " # disable printing services"
+ echo " # Disable printing services"
echo " load printers = no"
echo " printing = bsd"
echo " printcap name = /dev/null"
echo " disable spoolss = yes"
-} > "/etc/samba/smb.conf"
+} > "$SAMBA_CONFIG"
-share="/data"
-[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data"
-[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared"
+# Add shared folders
+share="/shared"
[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared"
+[ ! -d "$share" ] && [ -d "/data" ] && share="/data"
+[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data"
+[ ! -d "$share" ] && share="$tmp"
-if ! addShare "$share" "Data" "Shared"; then
- error "Failed to add shared folder '$share'. Please check its permissions." && return 0
+! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG" && return 0
+
+if [ -d "/shared2" ]; then
+ addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || :
+else
+ if [ -d "/data2" ]; then
+ addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || :
+ fi
fi
-if [ -d "/data2" ]; then
- addShare "/data2" "Data2" "Shared" || error "Failed to add shared folder '/data2'. Please check its permissions."
+if [ -d "/shared3" ]; then
+ addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || :
+else
+ if [ -d "/data3" ]; then
+ addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || :
+ fi
fi
-if [ -d "/data3" ]; then
- addShare "/data3" "Data3" "Shared" || error "Failed to add shared folder '/data3'. Please check its permissions."
+# Create directories if missing
+mkdir -p /var/lib/samba/sysvol
+mkdir -p /var/lib/samba/private
+mkdir -p /var/lib/samba/bind-dns
+
+# Try to repair Samba permissions
+[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || :
+[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || :
+[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock 2>/dev/null || :
+
+rm -f /var/log/samba/log.smbd
+
+if ! smbd -l /var/log/samba; then
+ SAMBA_DEBUG="Y"
+ error "Failed to start Samba daemon!"
fi
-IFS=',' read -r -a dirs <<< "${SHARES:-}"
-for dir in "${dirs[@]}"; do
- [ ! -d "$dir" ] && continue
- dir_name=$(basename "$dir")
- addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!"
-done
-
-# Fix Samba permissions
-[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock
-[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores
-[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock
-
-if ! smbd; then
- error "Samba daemon failed to start!"
- smbd -i --debug-stdout || true
+if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then
+ tail -fn +0 /var/log/samba/log.smbd --pid=$$ &
fi
+case "${NETWORK,,}" in
+ "passt" | "slirp" )
+ return 0 ;;
+esac
+
if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then
+
# Enable NetBIOS on Windows 7 and lower
- if ! nmbd; then
- error "NetBIOS daemon failed to start!"
- nmbd -i --debug-stdout || true
+ [[ "$DEBUG" == [Yy1]* ]] && echo "Starting NetBIOS daemon..."
+
+ rm -f /var/log/samba/log.nmbd
+
+ if ! nmbd -l /var/log/samba; then
+ SAMBA_DEBUG="Y"
+ error "Failed to start NetBIOS daemon!"
fi
+
+ if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then
+ tail -fn +0 /var/log/samba/log.nmbd --pid=$$ &
+ fi
+
else
+
# Enable Web Service Discovery on Vista and up
- wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid >/dev/null &
+ [[ "$DEBUG" == [Yy1]* ]] && echo "Starting wsddn daemon..."
+
+ rm -f /var/log/wsddn.log
+
+ if ! wsddn -i "${interfaces%%,*}" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file=/var/run/wsdd.pid; then
+ SAMBA_DEBUG="Y"
+ error "Failed to start wsddn daemon!"
+ fi
+
+ if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then
+ tail -fn +0 /var/log/wsddn.log --pid=$$ &
+ fi
+
fi
return 0