Compare commits

..

29 Commits

Author SHA1 Message Date
396a9a0890 Merge remote-tracking branch 'upstream/master' into vagrant+packer 2023-09-25 14:31:52 -04:00
1ad836b288 Merge remote-tracking branch 'upstream/master' into vagrant+packer 2023-08-11 09:31:13 -04:00
320f928830 Merge remote-tracking branch 'upstream/master' into vagrant+packer 2023-07-04 13:46:04 -04:00
e0915777c0 windows 11 fixes 2023-07-02 16:08:46 -04:00
23d3add2d1 Merge remote-tracking branch 'upstream/master' into vagrant+packer 2023-07-02 16:07:03 -04:00
1c399c470f cleanup 2023-04-22 09:05:42 -04:00
65d6ecb9f1 add README.md 2023-04-22 09:05:08 -04:00
5cb8705f65 add pinto10 2023-04-21 16:28:43 -04:00
aa56c778cb cleanup 2023-04-21 16:01:49 -04:00
eae0a22782 Merge remote-tracking branch 'origin/vagrant+packer' into vagrant+packer 2023-04-21 15:40:02 -04:00
2a62a045d9 fixes 2023-04-21 15:35:52 -04:00
b4ed3bac6d lower memory requirements 2023-04-08 10:28:03 -04:00
739dcb1f8c lower memory requirements 2023-04-08 10:27:02 -04:00
ce69566201 update packignore 2023-03-23 22:54:51 -04:00
ffda6f70f7 fixes 2023-03-23 22:49:02 -04:00
95c833204f x 2023-03-23 21:34:30 -04:00
5d270b477c install posh-git 2023-03-23 18:24:45 -07:00
91939db852 x 2023-03-23 20:18:01 -04:00
e8d5528e5e x 2023-03-21 18:49:37 -04:00
0aad7daca3 fixes 2023-03-21 09:58:54 -04:00
80888644cc fixes 2023-03-21 09:20:06 -04:00
600552f061 add packer stuff 2023-03-17 09:30:14 -04:00
bc0db6a7b6 cleanup 2023-03-16 20:40:29 -04:00
eb2444d04a more vagrant stuff 2023-03-16 14:32:46 -07:00
f318bcc1b5 cleanup 2023-03-15 08:49:58 -04:00
c56559873c fixes 2023-03-15 08:46:55 -04:00
e33713a93f more vagrant stuff 2023-03-15 08:45:01 -04:00
324aaf74f2 more vagrant stuff 2023-03-15 08:17:18 -04:00
d73f9592d8 start to add vagrant bits 2023-03-15 04:39:02 -07:00
69 changed files with 2558 additions and 215 deletions

View File

@ -19,7 +19,7 @@ jobs:
# Steps represent a sequence of tasks that will be executed as part of the job # Steps represent a sequence of tasks that will be executed as part of the job
steps: steps:
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it # Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
- uses: actions/checkout@v5 - uses: actions/checkout@v4
with: with:
fetch-depth: 0 # fetch all history for all branches and tags fetch-depth: 0 # fetch all history for all branches and tags

View File

@ -11,7 +11,7 @@ on:
tags: tags:
- "v*" - "v*"
pull_request: pull_request:
branches: [ "master", "development" ] branches: [ "master" ]
#---------------------------------# #---------------------------------#
# environment configuration # # environment configuration #
@ -35,12 +35,12 @@ jobs:
discussions: write discussions: write
steps: steps:
- name: Check out repository code (Action from GitHub) - name: Check out repository code (Action from GitHub)
uses: actions/checkout@v5 uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Add MSBuild to PATH - name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2 uses: microsoft/setup-msbuild@v1
- name: Build Cmder Launcher - name: Build Cmder Launcher
shell: pwsh shell: pwsh
@ -53,32 +53,32 @@ jobs:
run: .\pack.ps1 -verbose run: .\pack.ps1 -verbose
- name: Upload artifact (cmder.zip) - name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
path: build/cmder.zip path: build/cmder.zip
name: cmder.zip name: cmder.zip
if-no-files-found: error if-no-files-found: error
- name: Upload artifact (cmder.7z) - name: Upload artifact (cmder.7z)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
path: build/cmder.7z path: build/cmder.7z
name: cmder.7z name: cmder.7z
- name: Upload artifact (cmder_mini.zip) - name: Upload artifact (cmder_mini.zip)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
path: build/cmder_mini.zip path: build/cmder_mini.zip
name: cmder_mini.zip name: cmder_mini.zip
- name: Upload artifact (hashes.txt) - name: Upload artifact (hashes.txt)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v3
with: with:
path: build/hashes.txt path: build/hashes.txt
name: hashes.txt name: hashes.txt
- name: Create Release - name: Create Release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v1
with: with:
files: | files: |
build/cmder.zip build/cmder.zip

View File

@ -8,7 +8,7 @@ name: "CodeQL"
on: on:
push: push:
branches: [ "master", "development" ] branches: [ "master" ]
paths-ignore: paths-ignore:
- '**/*.md' - '**/*.md'
- '**/*.txt' - '**/*.txt'
@ -16,7 +16,7 @@ on:
- '**/.gitignore' - '**/.gitignore'
pull_request: pull_request:
# The branches below must be a subset of the branches above # The branches below must be a subset of the branches above
branches: [ "master", "development" ] branches: [ "master" ]
paths-ignore: paths-ignore:
- '**/*.md' - '**/*.md'
- '**/*.txt' - '**/*.txt'
@ -45,11 +45,11 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v5 uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v3 uses: github/codeql-action/init@v2
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@ -60,7 +60,7 @@ jobs:
# queries: security-extended,security-and-quality # queries: security-extended,security-and-quality
- name: Add MSBuild to PATH - name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2 uses: microsoft/setup-msbuild@v1
- name: Build Cmder Launcher - name: Build Cmder Launcher
shell: pwsh shell: pwsh
@ -68,6 +68,6 @@ jobs:
run: .\build.ps1 -Compile -verbose run: .\build.ps1 -Compile -verbose
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3 uses: github/codeql-action/analyze@v2
with: with:
category: "/language:${{matrix.language}}" category: "/language:${{matrix.language}}"

View File

@ -4,7 +4,6 @@ on:
push: push:
branches: branches:
- master - master
- development
paths-ignore: paths-ignore:
- '**/*.md' - '**/*.md'
- '**/*.txt' - '**/*.txt'
@ -13,7 +12,6 @@ on:
pull_request: pull_request:
branches: branches:
- master - master
- development
paths-ignore: paths-ignore:
- '**/*.md' - '**/*.md'
- '**/*.txt' - '**/*.txt'
@ -38,7 +36,7 @@ jobs:
continue-on-error: false continue-on-error: false
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Initialize vendors - name: Initialize vendors
shell: pwsh shell: pwsh
working-directory: scripts working-directory: scripts

View File

@ -24,7 +24,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
@ -51,7 +51,7 @@ jobs:
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ') Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- uses: peter-evans/create-pull-request@v7 - uses: peter-evans/create-pull-request@v5
if: env.COUNT_UPDATED > 0 if: env.COUNT_UPDATED > 0
with: with:
title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies' title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'

7
.gitignore vendored
View File

@ -31,3 +31,10 @@ launcher/src/version.rc2
.vs/* .vs/*
.vscode .vscode
.idea .idea
.vagrant/
scripts/packer/iso/*.iso
!scripts/packer/floppy/*.exe
scripts/packer/packer_cache
scripts/packer/output-*
*.box

66
Vagrantfile vendored Normal file
View File

@ -0,0 +1,66 @@
required_plugins = %w( vagrant-vbguest )
required_plugins.each do |plugin|
unless Vagrant.has_plugin? plugin
system "vagrant plugin install #{plugin}"
p "Run 'vagrant up' again to continue."
exit 0
end
end
Vagrant.configure("2") do |config|
# config.vbguest.iso_path = "../../../../usr/share/virtualbox/VBoxGuestAdditions.iso"
config.vbguest.allow_downgrade = true
config.vm.define "cmderdev-10" do |b|
b.vm.hostname = "cmderdev-10"
b.vm.box = "dgames/cmderdev-10"
b.vm.box_version = "1.0.0"
b.vm.provider :virtualbox do |v|
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--name", "cmderdev-10"]
v.customize ["modifyvm", :id, "--ostype", "Windows10_64"]
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxsvga"]
v.customize ["modifyvm", :id, "--memory", 2048]
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
end
end
config.vm.define "cmderdev-10s" do |b|
b.vm.hostname = 'cmderdev-10'
b.vm.box = "dgames/cmderdev-10"
b.vm.box_version = "1.0.0"
b.vm.provider :virtualbox do |v|
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--name", "cmderdev-10s"]
v.customize ["modifyvm", :id, "--ostype", "Windows10_64"]
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxsvga"]
v.customize ["modifyvm", :id, "--memory", 2048]
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
v.customize ["setextradata", :id, "GUI/ScaleFactor", "1.75"]
end
end
config.vm.define "cmderdev-11" do |b|
b.vm.box = "dgames/cmderdev-11"
b.vm.box_version = "1.0.0"
b.vm.provider :virtualbox do |v|
# v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--name", "cmderdev-11"]
v.customize ["modifyvm", :id, "--ostype", "Windows11_64"]
v.customize ["modifyvm", :id, "--graphicscontroller", "vboxvga"]
v.customize ["modifyvm", :id, "--memory", 4096]
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
end
end
config.vm.provision "file", source: "./scripts/vagrant/windows_terminal_settings.json.default", destination: "windows_terminal_settings.json.default"
config.vm.provision "file", source: "./scripts/vagrant/windows_terminal_state.json.default", destination: "windows_terminal_state.json.default"
config.vm.provision "file", source: "./vendor/bin/set-shortcut.ps1", destination: "c:\\windows\\set-shortcut.ps1"
config.vm.provision "shell", path: './scripts/vagrant/add-cmder.ps1'
config.vm.provision "shell", path: './vendor/bin/add-vscodeprofile.ps1'
config.vm.provision "shell", path: './vendor/bin/add-windowsterminalprofiles.ps1'
config.vm.provision "shell", path: './vendor/bin/add-cmdertodesktop.ps1'
end

View File

@ -469,6 +469,9 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK); MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
return; return;
} }
LRESULT lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL);
lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL); // For Windows >= 8
} }
bool IsUserOnly(std::wstring opt) bool IsUserOnly(std::wstring opt)

View File

@ -1,8 +1,9 @@
/** /**
* WARNING: This file should NOT be manually modified! * WARNING: do NOT modify this file! the content of this file should be
* The contents will be automatically generated using the `.ps1` PowerShell scripts, * automatically genereted before AppVeyor builds using the
* during builds by the CI. * respective .ps1 Powershell scripts.
*
*/ */
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@ -25,3 +25,5 @@ vendor\git-prompt.sh
config\user-* config\user-*
clink_history* clink_history*
*.log *.log
Vagrantfile
*.box

View File

@ -21,7 +21,7 @@
Skip all downloads and only build launcher. Skip all downloads and only build launcher.
.EXAMPLE .EXAMPLE
.\build.ps1 -verbose .\build -verbose
Execute the build and see what's going on. Execute the build and see what's going on.
.EXAMPLE .EXAMPLE
@ -33,7 +33,7 @@
Samuel Vasko, Jack Bennett Samuel Vasko, Jack Bennett
Part of the Cmder project. Part of the Cmder project.
.LINK .LINK
https://github.com/cmderdev/cmder - Project Home http://cmder.app/ - Project Home
#> #>
[CmdletBinding(SupportsShouldProcess = $true)] [CmdletBinding(SupportsShouldProcess = $true)]
Param( Param(
@ -79,7 +79,7 @@ if ($Compile) {
Write-Verbose "Building the launcher..." Write-Verbose "Building the launcher..."
# Reference: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference # Referene: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m
if ($LastExitCode -ne 0) { if ($LastExitCode -ne 0) {

View File

@ -35,7 +35,7 @@ Param(
[string]$saveTo = "$PSScriptRoot\..\build" [string]$saveTo = "$PSScriptRoot\..\build"
) )
$cmder_root = Resolve-Path $cmderRoot $cmderRoot = Resolve-Path $cmderRoot
. "$PSScriptRoot\utils.ps1" . "$PSScriptRoot\utils.ps1"
$ErrorActionPreference = "Stop" $ErrorActionPreference = "Stop"
@ -47,10 +47,10 @@ $targets = @{
"cmder_mini.zip" = "-xr!`"vendor\git-for-windows`""; "cmder_mini.zip" = "-xr!`"vendor\git-for-windows`"";
} }
Push-Location -Path $cmder_root Push-Location -Path $cmderRoot
Delete-Existing "$cmder_root\Version*" Delete-Existing "$cmderRoot\Version*"
Delete-Existing "$cmder_root\build\*" Delete-Existing "$cmderRoot\build\*"
if (-not (Test-Path -PathType container $saveTo)) { if (-not (Test-Path -PathType container $saveTo)) {
(New-Item -ItemType Directory -Path $saveTo) | Out-Null (New-Item -ItemType Directory -Path $saveTo) | Out-Null
@ -59,16 +59,16 @@ if (-not (Test-Path -PathType container $saveTo)) {
$saveTo = Resolve-Path $saveTo $saveTo = Resolve-Path $saveTo
$version = Get-VersionStr $version = Get-VersionStr
(New-Item -ItemType file "$cmder_root\Version $version") | Out-Null (New-Item -ItemType file "$cmderRoot\Version $version") | Out-Null
if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) { if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) {
Write-Verbose "Packing Cmder $version in $saveTo..." Write-Verbose "Packing Cmder $version in $saveTo..."
$excluded = (Get-Content -Path "$cmder_root\packignore") -Split [System.Environment]::NewLine | Where-Object { $_ } $excluded = (Get-Content -Path "$cmderRoot\packignore") -Split [System.Environment]::NewLine | Where-Object { $_ }
Get-ChildItem $cmder_root -Force -Exclude $excluded Get-ChildItem $cmderRoot -Force -Exclude $excluded
} }
foreach ($t in $targets.GetEnumerator()) { foreach ($t in $targets.GetEnumerator()) {
Create-Archive "$cmder_root" "$saveTo\$($t.Name)" $t.Value Create-Archive "$cmderRoot" "$saveTo\$($t.Name)" $t.Value
$hash = (Digest-Hash "$saveTo\$($t.Name)") $hash = (Digest-Hash "$saveTo\$($t.Name)")
Add-Content -path "$saveTo\hashes.txt" -value ($t.Name + ' ' + $hash) Add-Content -path "$saveTo\hashes.txt" -value ($t.Name + ' ' + $hash)
} }

8
scripts/packer/README.md Normal file
View File

@ -0,0 +1,8 @@
# Packer Support - Release Notes
Most of the Packer support for Cmder is shamelessly being borrowed from the following repositories.
- [StefanScherer/packer-windows](https://github.com/StefanScherer/packer-windows)
- [Baune8D/packer-windows-desktop](https://github.com/Baune8D/packer-windows-desktop)
Thank you both for the good work!

View File

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<servicing/>
<settings pass="windowsPE">
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<DiskConfiguration>
<Disk wcm:action="add">
<CreatePartitions>
<CreatePartition wcm:action="add">
<Order>1</Order>
<Size>500</Size>
<Type>EFI</Type>
</CreatePartition>
<CreatePartition wcm:action="add">
<Order>2</Order>
<Size>128</Size>
<Type>MSR</Type>
</CreatePartition>
<CreatePartition wcm:action="add">
<Order>3</Order>
<Extend>true</Extend>
<Type>Primary</Type>
</CreatePartition>
</CreatePartitions>
<DiskID>0</DiskID>
<WillWipeDisk>true</WillWipeDisk>
</Disk>
</DiskConfiguration>
<UserData>
<AcceptEula>true</AcceptEula>
<FullName>Vagrant</FullName>
<Organization>Vagrant</Organization>
<ProductKey>
<Key>W269N-WFGWX-YVC9B-4J6C9-T83GX</Key>
<WillShowUI>Never</WillShowUI>
</ProductKey>
</UserData>
<ImageInstall>
<OSImage>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>3</PartitionID>
</InstallTo>
<WillShowUI>OnError</WillShowUI>
<InstallToAvailablePartition>false</InstallToAvailablePartition>
</OSImage>
</ImageInstall>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
</SetupUILanguage>
<InputLocale>en-US</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UILanguageFallback>en-US</UILanguageFallback>
<UserLocale>en-US</UserLocale>
</component>
</settings>
<settings pass="offlineServicing">
<component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<EnableLUA>false</EnableLUA>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>en-US</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UserLocale>en-US</UserLocale>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<UserAccounts>
<AdministratorPassword>
<Value>vagrant</Value>
<PlainText>true</PlainText>
</AdministratorPassword>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>
<Value>vagrant</Value>
<PlainText>true</PlainText>
</Password>
<Description>Vagrant User</Description>
<DisplayName>vagrant</DisplayName>
<Group>administrators</Group>
<Name>vagrant</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<NetworkLocation>Home</NetworkLocation>
<ProtectYourPC>1</ProtectYourPC>
</OOBE>
<AutoLogon>
<Password>
<Value>vagrant</Value>
<PlainText>true</PlainText>
</Password>
<Username>vagrant</Username>
<Enabled>true</Enabled>
</AutoLogon>
<FirstLogonCommands>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"</CommandLine>
<Description>Set Execution Policy 64 Bit</Description>
<Order>1</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>C:\Windows\SysWOW64\cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"</CommandLine>
<Description>Set Execution Policy 32 Bit</Description>
<Order>2</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c reg add "HKLM\System\CurrentControlSet\Control\Network\NewNetworkWindowOff"</CommandLine>
<Description>Network prompt</Description>
<Order>3</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\fixnetwork.ps1</CommandLine>
<Description>Fix public network</Description>
<Order>4</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\disable-winrm.ps1</CommandLine>
<Description>Disable WinRM</Description>
<Order>5</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v HideFileExt /t REG_DWORD /d 0 /f</CommandLine>
<Order>6</Order>
<Description>Show file extensions in Explorer</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f</CommandLine>
<Order>7</Order>
<Description>Enable QuickEdit mode</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v Start_ShowRun /t REG_DWORD /d 1 /f</CommandLine>
<Order>8</Order>
<Description>Show Run command in Start Menu</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v StartMenuAdminTools /t REG_DWORD /d 1 /f</CommandLine>
<Order>9</Order>
<Description>Show Administrative Tools in Start Menu</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateFileSizePercent /t REG_DWORD /d 0 /f</CommandLine>
<Order>10</Order>
<Description>Zero Hibernation File</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateEnabled /t REG_DWORD /d 0 /f</CommandLine>
<Order>11</Order>
<Description>Disable Hibernation Mode</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c wmic useraccount where "name='vagrant'" set PasswordExpires=FALSE</CommandLine>
<Order>12</Order>
<Description>Disable password expiration for vagrant user</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "vagrant" /f</CommandLine>
<Order>13</Order>
<Description>Enable AutoLogon</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f</CommandLine>
<Order>14</Order>
<Description>Enable AutoLogon</Description>
</SynchronousCommand>
<!-- WITHOUT WINDOWS UPDATES -->
<!--
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\enable-winrm.ps1</CommandLine>
<Description>Enable WinRM</Description>
<Order>99</Order>
</SynchronousCommand>
-->
<!-- END WITHOUT WINDOWS UPDATES -->
<!-- WITH WINDOWS UPDATES -->
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c e:\microsoft-updates.bat</CommandLine>
<Order>98</Order>
<Description>Enable Microsoft Updates</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\disable-screensaver.ps1</CommandLine>
<Description>Disable Screensaver</Description>
<Order>99</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File e:\win-updates.ps1</CommandLine>
<Description>Install Windows Updates</Description>
<Order>100</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<!-- END WITH WINDOWS UPDATES -->
</FirstLogonCommands>
<ShowWindowsLive>false</ShowWindowsLive>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<OEMInformation>
<HelpCustomized>false</HelpCustomized>
</OEMInformation>
<!-- Rename computer here. -->
<ComputerName>vagrant-win10</ComputerName>
<TimeZone>Pacific Standard Time</TimeZone>
<RegisteredOwner/>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<SkipAutoActivation>true</SkipAutoActivation>
</component>
</settings>
<cpi:offlineImage xmlns:cpi="urn:schemas-microsoft-com:cpi" cpi:source="catalog:d:/sources/install_windows 7 ENTERPRISE.clg"/>
</unattend>

View File

@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<servicing/>
<settings pass="windowsPE">
<component name="Microsoft-Windows-PnpCustomizationsWinPE"
publicKeyToken="31bf3856ad364e35" language="neutral"
versionScope="nonSxS" processorArchitecture="amd64"
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<!--
This makes the VirtIO drivers available to Windows, assuming that
the VirtIO driver disk at https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
(see https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html#virtio-win-direct-downloads)
is available as drive E:
-->
<DriverPaths>
<PathAndCredentials wcm:action="add" wcm:keyValue="2">
<Path>E:\viostor\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="3">
<Path>E:\NetKVM\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="4">
<Path>E:\Balloon\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="5">
<Path>E:\pvpanic\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="6">
<Path>E:\qemupciserial\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="7">
<Path>E:\qxldod\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="8">
<Path>E:\vioinput\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="9">
<Path>E:\viorng\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="10">
<Path>E:\vioscsi\w10\amd64</Path>
</PathAndCredentials>
<PathAndCredentials wcm:action="add" wcm:keyValue="11">
<Path>E:\vioserial\w10\amd64</Path>
</PathAndCredentials>
</DriverPaths>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<DiskConfiguration>
<Disk wcm:action="add">
<CreatePartitions>
<CreatePartition wcm:action="add">
<Order>1</Order>
<Type>Primary</Type>
<Extend>true</Extend>
</CreatePartition>
</CreatePartitions>
<ModifyPartitions>
<ModifyPartition wcm:action="add">
<Extend>false</Extend>
<Format>NTFS</Format>
<Letter>C</Letter>
<Order>1</Order>
<PartitionID>1</PartitionID>
<Label>Windows 11</Label>
</ModifyPartition>
</ModifyPartitions>
<DiskID>0</DiskID>
<WillWipeDisk>true</WillWipeDisk>
</Disk>
<WillShowUI>OnError</WillShowUI>
</DiskConfiguration>
<UserData>
<AcceptEula>true</AcceptEula>
<FullName>Vagrant</FullName>
<Organization>Vagrant</Organization>
<!--
NOTE: If you are re-configuring this for use of a retail key
and using a retail ISO, you need to adjust the <ProductKey> block
below to look like this:
<ProductKey>
<Key>W269N-WFGWX-YVC9B-4J6C9-T83GX</Key>
<WillShowUI>Never</WillShowUI>
</ProductKey>
Notice the addition of the `<Key>` element.
-->
</UserData>
<ImageInstall>
<OSImage>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
<WillShowUI>OnError</WillShowUI>
<InstallToAvailablePartition>false</InstallToAvailablePartition>
<InstallFrom>
<MetaData wcm:action="add">
<Key>/IMAGE/NAME</Key>
<Value>Windows 11 Enterprise Evaluation</Value>
</MetaData>
</InstallFrom>
</OSImage>
</ImageInstall>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
</SetupUILanguage>
<InputLocale>en-US</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UILanguageFallback>en-US</UILanguageFallback>
<UserLocale>en-US</UserLocale>
</component>
</settings>
<settings pass="offlineServicing">
<component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<EnableLUA>false</EnableLUA>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>en-US</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UserLocale>en-US</UserLocale>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<UserAccounts>
<AdministratorPassword>
<Value>vagrant</Value>
<PlainText>true</PlainText>
</AdministratorPassword>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>
<Value>vagrant</Value>
<PlainText>true</PlainText>
</Password>
<Description>Vagrant User</Description>
<DisplayName>vagrant</DisplayName>
<Group>administrators</Group>
<Name>vagrant</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<NetworkLocation>Home</NetworkLocation>
<ProtectYourPC>1</ProtectYourPC>
</OOBE>
<AutoLogon>
<Password>
<Value>vagrant</Value>
<PlainText>true</PlainText>
</Password>
<Username>vagrant</Username>
<Enabled>true</Enabled>
</AutoLogon>
<FirstLogonCommands>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"</CommandLine>
<Description>Set Execution Policy 64 Bit</Description>
<Order>1</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>C:\Windows\SysWOW64\cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"</CommandLine>
<Description>Set Execution Policy 32 Bit</Description>
<Order>2</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c reg add "HKLM\System\CurrentControlSet\Control\Network\NewNetworkWindowOff"</CommandLine>
<Description>Network prompt</Description>
<Order>3</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\fixnetwork.ps1</CommandLine>
<Description>Fix public network</Description>
<Order>4</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\disable-winrm.ps1</CommandLine>
<Description>Disable WinRM</Description>
<Order>5</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v HideFileExt /t REG_DWORD /d 0 /f</CommandLine>
<Order>6</Order>
<Description>Show file extensions in Explorer</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f</CommandLine>
<Order>7</Order>
<Description>Enable QuickEdit mode</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v Start_ShowRun /t REG_DWORD /d 1 /f</CommandLine>
<Order>8</Order>
<Description>Show Run command in Start Menu</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v StartMenuAdminTools /t REG_DWORD /d 1 /f</CommandLine>
<Order>9</Order>
<Description>Show Administrative Tools in Start Menu</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateFileSizePercent /t REG_DWORD /d 0 /f</CommandLine>
<Order>10</Order>
<Description>Zero Hibernation File</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateEnabled /t REG_DWORD /d 0 /f</CommandLine>
<Order>11</Order>
<Description>Disable Hibernation Mode</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c wmic useraccount where "name='vagrant'" set PasswordExpires=FALSE</CommandLine>
<Order>12</Order>
<Description>Disable password expiration for vagrant user</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "vagrant" /f</CommandLine>
<Order>13</Order>
<Description>Enable AutoLogon</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f</CommandLine>
<Order>14</Order>
<Description>Enable AutoLogon</Description>
</SynchronousCommand>
<!-- WITHOUT WINDOWS UPDATES -->
<!--
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\enable-winrm.ps1</CommandLine>
<Description>Enable WinRM</Description>
<Order>99</Order>
</SynchronousCommand>
-->
<!-- END WITHOUT WINDOWS UPDATES -->
<!-- WITH WINDOWS UPDATES -->
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c a:\microsoft-updates.bat</CommandLine>
<Order>98</Order>
<Description>Enable Microsoft Updates</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\disable-screensaver.ps1</CommandLine>
<Description>Disable Screensaver</Description>
<Order>99</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\win-updates.ps1</CommandLine>
<Description>Install Windows Updates</Description>
<Order>100</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
<!-- END WITH WINDOWS UPDATES -->
</FirstLogonCommands>
<ShowWindowsLive>false</ShowWindowsLive>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<OEMInformation>
<HelpCustomized>false</HelpCustomized>
</OEMInformation>
<!-- Rename computer here. -->
<ComputerName>vagrant-11</ComputerName>
<TimeZone>Pacific Standard Time</TimeZone>
<RegisteredOwner/>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<SkipAutoActivation>true</SkipAutoActivation>
</component>
</settings>
<cpi:offlineImage xmlns:cpi="urn:schemas-microsoft-com:cpi" cpi:source="catalog:d:/sources/install_windows 7 ENTERPRISE.clg"/>
</unattend>

View File

@ -0,0 +1,3 @@
@echo off
packer build --force --only=%~1-iso windows_10.json

View File

@ -0,0 +1,3 @@
#!/bin/bash
packer build --force --only=$1-iso windows_10.json

View File

@ -0,0 +1,4 @@
@echo off
packer build --only=%1-iso windows_11.json

View File

@ -0,0 +1,4 @@
#!/bin/bash
packer build --only=$1-iso windows_11.json

Binary file not shown.

View File

@ -0,0 +1,38 @@
: Release v1.2 - Stuart Pearson 16th Nov 2015
:
: Command line tool to pin and unpin exe / lnk files to the Windows 10 taskbar and start menu.
:
: PinTo10 is a command line tool to pin and unpin .exe or .lnk files to or from the Windows 10 taskbar and start menu.
: With it you can pin or unpin up to 10 different shortcuts to either the taskbar or start menu in one run of the command.
: It replaces functionality that Microsoft have removed from their Windows 10 scripting interface.
:
: The exe needs to be run with at least one pair of switches specified for each function to Pin / Unpin to Taskbar / Start Menu...
:
: To pin an application or shortcut to the taskbar (replace XX with 01-10)...
: /PTFOLXX: Followed by the folder containing the file you want to pin.
: /PTFILEXX: Followed by the name of the file you want to pin.
:
: To unpin an application or shortcut to the taskbar (replace XX with 01-10)...
: /UTFOLXX: Followed by the folder containing the file you want to unpin.
: /UTFILEXX: Followed by the name of the file you want to unpin.
: To pin an application or shortcut to the start menu (replace XX with 01-10)...
: /PSFOLXX: Followed by the folder containing the file you want to pin.
: /PSFILEXX: Followed by the name of the file you want to pin.
: To unpin an application or shortcut to the start menu (replace XX with 01-10)...
: /USFOLXX: Followed by the folder containing the file you want to unpin.
: /USFILEXX: Followed by the name of the file you want to unpin.
: Example for pinning two shortcuts to the taskbar...
PinTo10.exe /PTFOL01:'%USERPROFILE:%\Desktop' /PTFILE01:'Word 2016.lnk' /PTFOL02:'%USERPROFILE:%\Desktop' /PTFILE02:'Excel 2016.lnk'
: Example for unpinning a file to the taskbar...
PinTo10.exe /UTFOL01:'C\Windows' /UTFILE01:'notepad.exe'
: Example for pinning a file to the start menu...
PinTo10.exe /PSFOL01:'C\Windows' /PSFILE01:'notepad.exe'
: Example for unpinning a file from the start menu...
PinTo10.exe /USFOL01:'%USERPROFILE:%\Desktop' /USFILE01:'Word 2016.lnk'

Binary file not shown.

View File

@ -0,0 +1,26 @@
### What Is This Directory For?
You should download your Windows Server ISO images from TechNet/MSDN and place them in this folder. We need to do this because MSDN / TechNet are protected by Microsoft (Live) ID, which does not support HTTP basic authentication or the OAuth2 username / password flow.
For example, you might want to start with one of the following:
* Windows Server 2008 R2 + SP1:
* File Name: en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso
* SHA1 Hash: D3FD7BF85EE1D5BDD72DE5B2C69A7B470733CD0A
* Direct Download: http://msdn.microsoft.com/subscriptions/json/GetDownloadRequest?brand=MSDN&locale=en-us&fileId=44782&activexDisabled=true&akamaiDL=false
* Windows Server 2008 R2 + SP1 (Volume License):
* File Name: en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso
* SHA1 Hash: 7E7E9425041B3328CCF723A0855C2BC4F462EC57
* Direct Download: http://msdn.microsoft.com/subscriptions/json/GetDownloadRequest?brand=MSDN&locale=en-us&fileId=44783&activexDisabled=true&akamaiDL=false
* Windows Server 2012:
* File Name: en_windows_server_2012_x64_dvd_915478.iso
* SHA1 Hash: D09E752B1EE480BC7E93DFA7D5C3A9B8AAC477BA
* Direct Download: http://msdn.microsoft.com/subscriptions/json/GetDownloadRequest?brand=MSDN&locale=en-us&fileId=50539&activexDisabled=true&akamaiDL=false
* Windows Server 2012 (Volume License):
* File Name: en_windows_server_2012_vl_x64_dvd_917758.iso
* SHA1 Hash: 063BC26ED45C50D3745CCAD52DD7B3F3CE13F36D
* Direct Download: http://msdn.microsoft.com/subscriptions/json/GetDownloadRequest?brand=MSDN&locale=en-us&fileId=50573&activexDisabled=true&akamaiDL=false
Or Build one using the Windows Installation Media Creation Tools:
https://support.microsoft.com/en-us/windows/create-installation-media-for-windows-99a58364-8c02-206f-aa6f-40c3b507420d

View File

@ -0,0 +1 @@
powershell -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))"

View File

@ -0,0 +1,26 @@
choco install -y boxstarter.winconfig
# Editors
choco install -y notepadplusplus
# Terminals
choco install -y microsoft-windows-terminal
choco install -y fluent-terminal
choco install -y hyper
choco install -y tabby
choco install -y conemu
# other
choco install -y poshgit
# IDE/Software development
choco install -y vscode
choco install -y visualstudio2022community --execution-timeout 9000 --package-parameters "--add Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended"
md C:\users\vagrant\bin
if (test-path "a:/set-shortcut.ps1") {
copy "a:/set-shortcut.ps1" C:\users\vagrant\bin
} elseif (test-path "e:/set-shortcut.ps1") {
copy "e:/set-shortcut.ps1" C:\users\vagrant\bin
}

View File

@ -0,0 +1,39 @@
if "%PACKER_BUILDER_TYPE:~0,6%"=="hyperv" (
echo "Skip compact steps in Hyper-V build."
goto :eof
)
if not exist "C:\Windows\Temp\7z1900-x64.msi" (
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://www.7-zip.org/a/7z1900-x64.msi', 'C:\Windows\Temp\7z1900-x64.msi')" <NUL
)
msiexec /qb /i C:\Windows\Temp\7z1900-x64.msi
if not exist "C:\Windows\Temp\ultradefrag.zip" (
powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://downloads.sourceforge.net/project/ultradefrag/stable-release/6.1.0/ultradefrag-portable-6.1.0.bin.amd64.zip', 'C:\Windows\Temp\ultradefrag.zip')" <NUL
)
if not exist "C:\Windows\Temp\ultradefrag-portable-6.1.0.amd64\udefrag.exe" (
cmd /c ""C:\Program Files\7-Zip\7z.exe" x C:\Windows\Temp\ultradefrag.zip -oC:\Windows\Temp"
)
if not exist "C:\Windows\Temp\SDelete.zip" (
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://download.sysinternals.com/files/SDelete.zip', 'C:\Windows\Temp\SDelete.zip')" <NUL
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://vagrantboxes.blob.core.windows.net/box/sdelete/v1.6.1/sdelete.exe', 'C:\Windows\Temp\sdelete.exe')" <NUL
)
if not exist "C:\Windows\Temp\sdelete.exe" (
cmd /c ""C:\Program Files\7-Zip\7z.exe" x C:\Windows\Temp\SDelete.zip -oC:\Windows\Temp"
)
msiexec /qb /x C:\Windows\Temp\7z1900-x64.msi
net stop wuauserv
rmdir /S /Q C:\Windows\SoftwareDistribution\Download
mkdir C:\Windows\SoftwareDistribution\Download
net start wuauserv
if "%PACKER_BUILDER_TYPE%" neq "hyperv-iso" (
cmd /c C:\Windows\Temp\ultradefrag-portable-6.1.0.amd64\udefrag.exe --optimize --repeat C:
cmd /c %SystemRoot%\System32\reg.exe ADD HKCU\Software\Sysinternals\SDelete /v EulaAccepted /t REG_DWORD /d 1 /f
cmd /c C:\Windows\Temp\sdelete.exe -q -z C:
)

View File

@ -0,0 +1,17 @@
::http://support.microsoft.com/kb/2570538
::http://robrelyea.wordpress.com/2007/07/13/may-be-helpful-ngen-exe-executequeueditems/
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto 64BIT
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe update /force /queue > NUL
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe executequeueditems > NUL
exit 0
:64BIT
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe update /force /queue > NUL
%windir%\microsoft.net\framework64\v4.0.30319\ngen.exe update /force /queue > NUL
%windir%\microsoft.net\framework\v4.0.30319\ngen.exe executequeueditems > NUL
%windir%\microsoft.net\framework64\v4.0.30319\ngen.exe executequeueditems > NUL
exit 0

View File

@ -0,0 +1,33 @@
if ($env:PACKER_BUILDER_TYPE -And $($env:PACKER_BUILDER_TYPE).startsWith("hyperv")) {
Write-Output Skip debloat steps in Hyper-V build.
}
else {
Write-Output Downloading debloat zip
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$url = "https://github.com/StefanScherer/Debloat-Windows-10/archive/master.zip"
(New-Object System.Net.WebClient).DownloadFile($url, "$env:TEMP\debloat.zip")
Expand-Archive -Path $env:TEMP\debloat.zip -DestinationPath $env:TEMP -Force
#Write-Output Disable scheduled tasks
#. $env:TEMP\Debloat-Windows-10-master\utils\disable-scheduled-tasks.ps1
#Write-Output Block telemetry
#. $env:TEMP\Debloat-Windows-10-master\scripts\block-telemetry.ps1
#Write-Output Disable services
#. $env:TEMP\Debloat-Windows-10-master\scripts\disable-services.ps1
Write-Output Disable Windows Defender
if ($(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName.StartsWith("Windows 10")) {
. $env:TEMP\Debloat-Windows-10-master\scripts\disable-windows-defender.ps1
}
else {
Uninstall-WindowsFeature Windows-Defender
}
Write-Output Optimize Windows Update
. $env:TEMP\Debloat-Windows-10-master\scripts\optimize-windows-update.ps1
#Write-Output Disable Windows Update
#Set-Service wuauserv -StartupType Disabled
#Write-Output Remove OneDrive
#. $env:TEMP\Debloat-Windows-10-master\scripts\remove-onedrive.ps1
Remove-Item $env:TEMP\debloat.zip
Remove-Item -recurse $env:TEMP\Debloat-Windows-10-master
}

View File

@ -0,0 +1,20 @@
rem http://www.windows-commandline.com/disable-automatic-updates-command-line/
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v AUOptions /t REG_DWORD /d 1 /f
rem remove optional WSUS server settings
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /f
rem even harder, disable windows update service
rem sc config wuauserv start= disabled
rem net stop wuauserv
set logfile=C:\Windows\Temp\win-updates.log
if exist %logfile% (
echo Show Windows Updates log file %logfile%
dir %logfile%
type %logfile%
rem output of type command is not fully shown in packer/ssh session, so try PowerShell
rem but it will hang if log file is about 22 KByte
rem powershell -command "Get-Content %logfile%"
echo End of Windows Updates log file %logfile%
)

View File

@ -0,0 +1,4 @@
Write-Output "Disabling Screensaver"
Set-ItemProperty "HKCU:\Control Panel\Desktop" -Name ScreenSaveActive -Value 0 -Type DWord
& powercfg -x -monitor-timeout-ac 0
& powercfg -x -monitor-timeout-dc 0

View File

@ -0,0 +1,8 @@
netsh advfirewall firewall set rule name="Windows Remote Management (HTTP-In)" new enable=yes action=block
netsh advfirewall firewall set rule group="Windows Remote Management" new enable=yes
$winrmService = Get-Service -Name WinRM
if ($winrmService.Status -eq "Running") {
Disable-PSRemoting -Force
}
Stop-Service winrm
Set-Service -Name winrm -StartupType Disabled

View File

@ -0,0 +1,4 @@
$DefenderInstalled = Get-Command -Module Defender
if($null -ne $DefenderInstalled) {
Set-MpPreference -DisableRealtimeMonitoring $true
}

View File

@ -0,0 +1,2 @@
netsh advfirewall firewall add rule name="Open Port 3389" dir=in action=allow protocol=TCP localport=3389
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

View File

@ -0,0 +1,27 @@
write-host "==> 'enable-winrm.ps1' - START..."
write-host "====> Getting Connections..."
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private
write-host "====> Enable PSRemoting..."
Enable-PSRemoting -Force
write-host "====> WINRM Quick Config..."
winrm quickconfig -q
winrm quickconfig -transport:http
write-host "====> WINRM Set Config..."
winrm set winrm/config '@{MaxTimeoutms="1800000"}'
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="800"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
winrm set winrm/config/client/auth '@{Basic="true"}'
winrm set winrm/config/listener?Address=*+Transport=HTTP '@{Port="5985"}'
write-host "====> Configure Firewall..."
netsh advfirewall firewall set rule group="Windows Remote Administration" new enable=yes
netsh advfirewall firewall set rule name="Windows Remote Management (HTTP-In)" new enable=yes action=allow remoteip=any
write-host "====> Set WINRM Service Statup..."
Set-Service winrm -startuptype "auto"
write-host "====> Restart WINRM Service..."
Restart-Service winrm
write-host "==> 'enable-winrm.ps1' - END..."

View File

@ -0,0 +1,30 @@
# You cannot enable Windows PowerShell Remoting on network connections that are set to Public
# Spin through all the network locations and if they are set to Public, set them to Private
# using the INetwork interface:
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa370750(v=vs.85).aspx
# For more info, see:
# http://blogs.msdn.com/b/powershell/archive/2009/04/03/setting-network-location-to-private.aspx
function Set-NetworkTypeToPrivate {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPositionalParameters', '')]
param()
# Network location feature was only introduced in Windows Vista - no need to bother with this
# if the operating system is older than Vista
if ([environment]::OSVersion.version.Major -lt 6) { return }
# You cannot change the network location if you are joined to a domain, so abort
if (1, 3, 4, 5 -contains (Get-CimInstance win32_computersystem).DomainRole) { return }
# Get network connections
$networkListManager = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"))
$connections = $networkListManager.GetNetworkConnections()
$connections | ForEach-Object {
Write-Output $_.GetNetwork().GetName() "category was previously set to" $_.GetNetwork().GetCategory()
#$_.GetNetwork().SetCategory(1)
Write-Output $_.GetNetwork().GetName() "changed to category" $_.GetNetwork().GetCategory()
}
}
Set-NetworkTypeToPrivate

View File

@ -0,0 +1,12 @@
net stop wuauserv
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v EnableFeaturedSoftware /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v IncludeRecommendedUpdates /t REG_DWORD /d 1 /f
echo Set ServiceManager = CreateObject("Microsoft.Update.ServiceManager") > "%temp%\temp.vbs"
echo Set NewUpdateService = ServiceManager.AddService2("7971f918-a847-4430-9279-4a52d1efe18d",7,"") >> "%temp%\temp.vbs"
cscript "%temp%\temp.vbs"
net start wuauserv

View File

@ -0,0 +1,12 @@
Stop-Service -Name 'wuauserv'
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update' -Name 'EnableFeaturedSoftware' -Value 1 -Type DWord
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update' -Name 'IncludeRecommendedUpdates' -Value 1 -Type DWord
"Set ServiceManager = CreateObject(""Microsoft.Update.ServiceManager"")" | Out-File -FilePath 'C:\temp.vbs'
"Set NewUpdateService = ServiceManager.AddService2(""7971f918-a847-4430-9279-4a52d1efe18d"",7,"""")" | Out-File -FilePath 'C:\temp.vbs' -Append
cscript C:\temp.vbs
Remove-Item -Path 'C:\temp.vbs' -Force
Start-Service -Name 'wuauserv'

View File

@ -0,0 +1,16 @@
rem https://connect.microsoft.com/PowerShell/feedback/details/1609288/pin-to-taskbar-no-longer-working-in-windows-10
set ps_link=A:\WindowsPowerShell.lnk
if exist e:\WindowsPowerShell.lnk (
set ps_link=e:\WindowsPowerShell.lnk
)
set pin_to_10=A:\PinTo10.exe
if exist e:\PinTo10.exe (
set pin_to_10=e:\PinTo10.exe
)
copy "%ps_link%" "%TEMP%\Windows PowerShell.lnk"
%pin_to_10% /PTFOL01:'%TEMP%' /PTFILE01:'Windows PowerShell.lnk'
exit /b 0

View File

@ -0,0 +1,19 @@
Try {
Write-Output "Set power plan to high performance"
$HighPerf = powercfg -l | ForEach-Object { if ($_.contains("High performance")) { $_.split()[3] } }
# $HighPerf cannot be $null, we try activate this power profile with powercfg
if ($null -eq $HighPerf) {
throw "Error: HighPerf is null"
}
$CurrPlan = $(powercfg -getactivescheme).split()[3]
if ($CurrPlan -ne $HighPerf) { powercfg -setactive $HighPerf }
}
Catch {
Write-Warning -Message "Unable to set power plan to high performance"
Write-Warning $Error[0]
}

View File

@ -0,0 +1,21 @@
[CmdletBinding()]
param(
[Parameter()]
[string]$SourceExe,
[string]$Arguments,
[string]$DestinationPath,
[string]$WorkingDirectory,
[String]$IconLocation
)
if ($IconLocation -eq '') {
$IconLocation = $SourceExe
}
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($destinationPath)
$Shortcut.TargetPath = $SourceExe
$Shortcut.Arguments = $Arguments
$shortcut.WorkingDirectory = $WorkingDirectory
$shortcut.IconLocation = $IconLocation
$Shortcut.Save()

View File

@ -0,0 +1,2 @@
echo Set WinRM start type to auto
sc config winrm start= auto

View File

@ -0,0 +1 @@
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /f /v EnableLUA /t REG_DWORD /d 1

View File

@ -0,0 +1,96 @@
if (!( Test-Path "C:\Windows\Temp\7z1900-x64.msi")) {
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://www.7-zip.org/a/7z1900-x64.msi', 'C:\Windows\Temp\7z1900-x64.msi')
}
if (!(Test-Path "C:\Windows\Temp\7z1900-x64.msi")) {
Start-Sleep 5; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://www.7-zip.org/a/7z1900-x64.msi', 'C:\Windows\Temp\7z1900-x64.msi')
}
cmd /c msiexec /qb /i C:\Windows\Temp\7z1900-x64.msi
if ("$env:PACKER_BUILDER_TYPE" -eq "vmware-iso") {
Write-Output "Using VMware"
if (Test-Path "C:\Users\vagrant\windows.iso") {
Move-Item -force C:\Users\vagrant\windows.iso C:\Windows\Temp
}
if (!(Test-Path "C:\Windows\Temp\windows.iso")) {
Try {
# Disabling the progress bar speeds up IWR https://github.com/PowerShell/PowerShell/issues/2138
$ProgressPreference = 'SilentlyContinue'
$pageContentLinks = (Invoke-WebRequest('https://softwareupdate.vmware.com/cds/vmw-desktop/ws') -UseBasicParsing).Links | where-object { $_.href -Match "[0-9]" } | Select-Object href | ForEach-Object { $_.href.Trim('/') }
$versionObject = $pageContentLinks | ForEach-Object { new-object System.Version ($_) } | sort-object -Descending | select-object -First 1 -Property:Major, Minor, Build
$newestVersion = $versionObject.Major.ToString() + "." + $versionObject.Minor.ToString() + "." + $versionObject.Build.ToString() | out-string
$newestVersion = $newestVersion.TrimEnd("`r?`n")
$nextURISubdirectoryObject = (Invoke-WebRequest("https://softwareupdate.vmware.com/cds/vmw-desktop/ws/$newestVersion/") -UseBasicParsing).Links | where-object { $_.href -Match "[0-9]" } | Select-Object href | where-object { $_.href -Match "[0-9]" }
$nextUriSubdirectory = $nextURISubdirectoryObject.href | Out-String
$nextUriSubdirectory = $nextUriSubdirectory.TrimEnd("`r?`n")
$newestVMwareToolsURL = "https://softwareupdate.vmware.com/cds/vmw-desktop/ws/$newestVersion/$nextURISubdirectory/windows/packages/tools-windows.tar"
Write-Output "The latest version of VMware tools has been determined to be downloadable from $newestVMwareToolsURL"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile("$newestVMwareToolsURL", 'C:\Windows\Temp\vmware-tools.tar')
}
Catch {
Write-Output "Unable to determine the latest version of VMware tools. Falling back to hardcoded URL."
(New-Object System.Net.WebClient).DownloadFile('https://softwareupdate.vmware.com/cds/vmw-desktop/ws/15.5.5/16285975/windows/packages/tools-windows.tar', 'C:\Windows\Temp\vmware-tools.tar')
}
cmd /c "C:\PROGRA~1\7-Zip\7z.exe" x C:\Windows\Temp\vmware-tools.tar -oC:\Windows\Temp
Move-Item c:\windows\temp\VMware-tools-windows-*.iso c:\windows\temp\windows.iso
Try { Remove-Item "C:\Program Files (x86)\VMWare" -Recurse -Force -ErrorAction Stop } Catch { Write-Output "Directory didn't exist to be removed." }
}
cmd /c "C:\PROGRA~1\7-Zip\7z.exe" x "C:\Windows\Temp\windows.iso" -oC:\Windows\Temp\VMWare
cmd /c C:\Windows\Temp\VMWare\setup.exe /S /v"/qn REBOOT=R\"
Remove-Item -Force "C:\Windows\Temp\vmware-tools.tar"
Remove-Item -Force "C:\Windows\Temp\windows.iso"
Remove-Item -Force -Recurse "C:\Windows\Temp\VMware"
}
if ("$env:PACKER_BUILDER_TYPE" -eq "virtualbox-iso") {
Write-Output "Using Virtualbox"
if (Test-Path "C:\Users\vagrant\VBoxGuestAdditions.iso") {
Move-Item -Force C:\Users\vagrant\VBoxGuestAdditions.iso C:\Windows\Temp
}
if (!(Test-Path "C:\Windows\Temp\VBoxGuestAdditions.iso")) {
Try {
$pageContentLinks = (Invoke-WebRequest('https://download.virtualbox.org/virtualbox') -UseBasicParsing).Links | where-object { $_.href -Match "[0-9]" } | Select-Object href | where-object { $_.href -NotMatch "BETA" } | where-object { $_.href -NotMatch "RC" } | where-object { $_.href -Match "[0-9]\.[0-9]" } | ForEach-Object { $_.href.Trim('/') }
$versionObject = $pageContentLinks | ForEach-Object { new-object System.Version ($_) } | sort-object -Descending | select-object -First 1 -Property:Major, Minor, Build
$newestVersion = $versionObject.Major.ToString() + "." + $versionObject.Minor.ToString() + "." + $versionObject.Build.ToString() | out-string
$newestVersion = $newestVersion.TrimEnd("`r?`n")
$nextURISubdirectoryObject = (Invoke-WebRequest("https://download.virtualbox.org/virtualbox/$newestVersion/") -UseBasicParsing).Links | Select-Object href | where-object { $_.href -Match "GuestAdditions" }
$nextUriSubdirectory = $nextURISubdirectoryObject.href | Out-String
$nextUriSubdirectory = $nextUriSubdirectory.TrimEnd("`r?`n")
$newestVboxToolsURL = "https://download.virtualbox.org/virtualbox/$newestVersion/$nextUriSubdirectory"
Write-Output "The latest version of VirtualBox tools has been determined to be downloadable from $newestVboxToolsURL"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile("$newestVboxToolsURL", 'C:\Windows\Temp\VBoxGuestAdditions.iso')
}
Catch {
Write-Output "Unable to determine the latest version of VBox tools. Falling back to hardcoded URL."
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; (New-Object System.Net.WebClient).DownloadFile('https://download.virtualbox.org/virtualbox/6.1.8/VBoxGuestAdditions_6.1.8.iso', 'C:\Windows\Temp\VBoxGuestAdditions.iso')
}
}
cmd /c ""C:\PROGRA~1\7-Zip\7z.exe" x C:\Windows\Temp\VBoxGuestAdditions.iso -oC:\Windows\Temp\virtualbox"
Get-ChildItem "C:\Windows\Temp\virtualbox\cert\" -Filter vbox*.cer | Foreach-Object { C:\Windows\Temp\virtualbox\cert\VBoxCertUtil add-trusted-publisher $_.FullName --root $_.FullName }
cmd /c C:\Windows\Temp\virtualbox\VBoxWindowsAdditions.exe /S
cmd /c rd /S /Q "C:\Windows\Temp\virtualbox"
}
if ("$env:PACKER_BUILDER_TYPE" -eq "parallels-iso") {
Write-Output "Using Parallels Desktop"
# This is required when using Parallels Desktop
# Currently the installation of Parallels Tools is broken if you're installing in Windows Server & Windows Server Core
# You will encounter an error in printui.dll module not found message.
# This feature will add the required libraries for printing services.
# Parallels Tools is required for sync_folder to work.
# Vagrantfile config: v.update_guest_tools = true will be installed with no issues
if ($(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName.StartsWith("Windows Server")) {
Write-Output "Installing Print Server service"
Install-WindowsFeature -Name Print-Server
}
}
cmd /c msiexec /qb /x C:\Windows\Temp\7z1900-x64.msi

View File

@ -0,0 +1,260 @@
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '')]
param($global:RestartRequired = 0,
$global:MoreUpdates = 0,
$global:MaxCycles = 5,
$MaxUpdatesPerCycle = 500,
$BeginWithRestart = 0)
$Logfile = "C:\Windows\Temp\win-updates.log"
$enable_winrm_script = 'a:\enable-winrm.ps1'
if (test-path 'e:\enable-winrm.ps1') {
$enable_winrm_script = 'e:\enable-winrm.ps1'
}
function LogWrite {
Param ([string]$logstring)
$now = Get-Date -format s
Add-Content $Logfile -value "$now $logstring"
Write-Output $logstring
}
function Check-ContinueRestartOrEnd() {
$RegistryKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
$RegistryEntry = "InstallWindowsUpdates"
switch ($global:RestartRequired) {
0 {
$prop = (Get-ItemProperty $RegistryKey).$RegistryEntry
if ($prop) {
LogWrite "Restart Registry Entry Exists - Removing It"
Remove-ItemProperty -Path $RegistryKey -Name $RegistryEntry -ErrorAction SilentlyContinue
}
LogWrite "No Restart Required"
Check-WindowsUpdates
if (($global:MoreUpdates -eq 1) -and ($script:Cycles -le $global:MaxCycles)) {
Install-WindowsUpdates
}
elseif ($script:Cycles -gt $global:MaxCycles) {
LogWrite "Exceeded Cycle Count - Stopping"
LogWrite "==> Running '$enable_winrm_script'..."
& $enable_winrm_script
}
else {
LogWrite "Done Installing Windows Updates"
LogWrite "==> Running '$enable_winrm_script'..."
& $enable_winrm_script
}
}
1 {
$prop = (Get-ItemProperty $RegistryKey).$RegistryEntry
if (-not $prop) {
LogWrite "Restart Registry Entry Does Not Exist - Creating It"
Set-ItemProperty -Path $RegistryKey -Name $RegistryEntry -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File $($script:ScriptPath) -MaxUpdatesPerCycle $($MaxUpdatesPerCycle)"
}
else {
LogWrite "Restart Registry Entry Exists Already"
}
LogWrite "Restart Required - Restarting..."
Restart-Computer
}
default {
LogWrite "Unsure If A Restart Is Required"
break
}
}
}
function Install-WindowsUpdates()
{
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '')]
param()
$script:Cycles++
LogWrite "Evaluating Available Updates with limit of $($MaxUpdatesPerCycle):"
$UpdatesToDownload = New-Object -ComObject 'Microsoft.Update.UpdateColl'
$script:i = 0;
$CurrentUpdates = $SearchResult.Updates
while ($script:i -lt $CurrentUpdates.Count -and $script:CycleUpdateCount -lt $MaxUpdatesPerCycle) {
$Update = $CurrentUpdates.Item($script:i)
if ($null -ne $Update) {
[bool]$addThisUpdate = $false
if ($Update.InstallationBehavior.CanRequestUserInput) {
LogWrite "> Skipping: $($Update.Title) because it requires user input"
}
else {
if (!($Update.EulaAccepted)) {
LogWrite "> Note: $($Update.Title) has a license agreement that must be accepted. Accepting the license."
$Update.AcceptEula()
[bool]$addThisUpdate = $true
$script:CycleUpdateCount++
}
else {
[bool]$addThisUpdate = $true
$script:CycleUpdateCount++
}
}
if ([bool]$addThisUpdate) {
LogWrite "Adding: $($Update.Title)"
$UpdatesToDownload.Add($Update) | Out-Null
}
}
$script:i++
}
if ($UpdatesToDownload.Count -eq 0) {
LogWrite "No Updates To Download..."
}
else {
LogWrite 'Downloading Updates...'
$ok = 0;
while (! $ok) {
try {
$Downloader = $UpdateSession.CreateUpdateDownloader()
$Downloader.Updates = $UpdatesToDownload
$Downloader.Download()
$ok = 1;
}
catch {
LogWrite $_.Exception | Format-List -force
LogWrite "Error downloading updates. Retrying in 30s."
$script:attempts = $script:attempts + 1
Start-Sleep -s 30
}
}
}
$UpdatesToInstall = New-Object -ComObject 'Microsoft.Update.UpdateColl'
[bool]$rebootMayBeRequired = $false
LogWrite 'The following updates are downloaded and ready to be installed:'
foreach ($Update in $SearchResult.Updates) {
if (($Update.IsDownloaded)) {
LogWrite "> $($Update.Title)"
$UpdatesToInstall.Add($Update) | Out-Null
if ($Update.InstallationBehavior.RebootBehavior -gt 0) {
[bool]$rebootMayBeRequired = $true
}
}
}
if ($UpdatesToInstall.Count -eq 0) {
LogWrite 'No updates available to install...'
$global:MoreUpdates = 0
$global:RestartRequired = 0
LogWrite "==> Running '$enable_winrm_script'..."
& $enable_winrm_script
break
}
if ($rebootMayBeRequired) {
LogWrite 'These updates may require a reboot'
$global:RestartRequired = 1
}
LogWrite 'Installing updates...'
$Installer = $script:UpdateSession.CreateUpdateInstaller()
$Installer.Updates = $UpdatesToInstall
$InstallationResult = $Installer.Install()
LogWrite "Installation Result: $($InstallationResult.ResultCode)"
LogWrite "Reboot Required: $($InstallationResult.RebootRequired)"
LogWrite 'Listing of updates installed and individual installation results:'
if ($InstallationResult.RebootRequired) {
$global:RestartRequired = 1
}
else {
$global:RestartRequired = 0
}
for ($i = 0; $i -lt $UpdatesToInstall.Count; $i++) {
New-Object -TypeName PSObject -Property @{
Title = $UpdatesToInstall.Item($i).Title
Result = $InstallationResult.GetUpdateResult($i).ResultCode
}
LogWrite "Item: $($UpdatesToInstall.Item($i).Title)"
LogWrite "Result: $($InstallationResult.GetUpdateResult($i).ResultCode)"
}
Check-ContinueRestartOrEnd
}
function Check-WindowsUpdates() {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '')]
param()
LogWrite "Checking For Windows Updates"
$Username = $env:USERDOMAIN + "\" + $env:USERNAME
LogWrite "Script: $script:ScriptPath `nScript User: $Username `nStarted: $(Get-Date)"
$script:UpdateSearcher = $script:UpdateSession.CreateUpdateSearcher()
$script:successful = $FALSE
$script:attempts = 0
$script:maxAttempts = 12
while (-not $script:successful -and $script:attempts -lt $script:maxAttempts) {
try {
$script:SearchResult = $script:UpdateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")
$script:successful = $TRUE
}
catch {
LogWrite $_.Exception | Format-List -force
LogWrite "Search call to UpdateSearcher was unsuccessful. Retrying in 10s."
$script:attempts = $script:attempts + 1
Start-Sleep -s 10
}
}
if ($SearchResult.Updates.Count -ne 0) {
$Message = "There are " + $SearchResult.Updates.Count + " more updates."
LogWrite $Message
try {
for ($i = 0; $i -lt $script:SearchResult.Updates.Count; $i++) {
LogWrite $script:SearchResult.Updates.Item($i).Title
LogWrite $script:SearchResult.Updates.Item($i).Description
LogWrite $script:SearchResult.Updates.Item($i).RebootRequired
LogWrite $script:SearchResult.Updates.Item($i).EulaAccepted
}
$global:MoreUpdates = 1
}
catch {
LogWrite $_.Exception | Format-List -force
LogWrite "Showing SearchResult was unsuccessful. Rebooting."
$global:RestartRequired = 1
$global:MoreUpdates = 0
Check-ContinueRestartOrEnd
LogWrite "Show never happen to see this text!"
Restart-Computer
}
}
else {
LogWrite 'There are no applicable updates'
$global:RestartRequired = 0
$global:MoreUpdates = 0
}
}
$script:ScriptName = $MyInvocation.MyCommand.ToString()
$script:ScriptPath = $MyInvocation.MyCommand.Path
$script:UpdateSession = New-Object -ComObject 'Microsoft.Update.Session'
$script:UpdateSession.ClientApplicationID = 'Packer Windows Update Installer'
$script:UpdateSearcher = $script:UpdateSession.CreateUpdateSearcher()
$script:SearchResult = New-Object -ComObject 'Microsoft.Update.UpdateColl'
$script:Cycles = 0
$script:CycleUpdateCount = 0
if ($BeginWithRestart) {
$global:RestartRequired = 1
Check-ContinueRestartOrEnd
}
Check-WindowsUpdates
if ($global:MoreUpdates -eq 1) {
Install-WindowsUpdates
}
else {
Check-ContinueRestartOrEnd
}

View File

@ -0,0 +1,91 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.6.2"
Vagrant.configure("2") do |config|
config.vm.define "vagrant-windows-10-preview"
config.vm.box = "windows_10_preview"
config.vm.communicator = "winrm"
# Admin user name and password
config.winrm.username = "vagrant"
config.winrm.password = "vagrant"
config.vm.guest = :windows
config.windows.halt_timeout = 15
config.vm.network :forwarded_port, guest: 3389, host: 3389, id: "rdp", auto_correct: true
config.vm.provider :virtualbox do |v, override|
#v.gui = true
v.customize ["modifyvm", :id, "--memory", 2048]
v.customize ["modifyvm", :id, "--cpus", 2]
v.customize ["modifyvm", :id, "--vram", 128]
v.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
v.customize ["setextradata", "global", "GUI/SuppressMessages", "all" ]
end
config.vm.provider :vmware_fusion do |v, override|
v.gui = true
v.vmx["memsize"] = "2048"
v.vmx["numvcpus"] = "2"
v.vmx["ethernet0.virtualDev"] = "vmxnet3"
v.vmx["RemoteDisplay.vnc.enabled"] = "false"
v.vmx["RemoteDisplay.vnc.port"] = "5900"
v.vmx["scsi0.virtualDev"] = "lsisas1068"
v.vmx["gui.fitguestusingnativedisplayresolution"] = "TRUE"
v.vmx["mks.enable3d"] = "TRUE"
v.vmx["mks.forceDiscreteGPU"] = "TRUE"
v.vmx["gui.fullscreenatpoweron"] = "TRUE"
v.vmx["gui.viewmodeatpoweron"] = "fullscreen"
v.vmx["gui.lastPoweredViewMode"] = "fullscreen"
v.vmx["sound.startconnected"] = "FALSE"
v.vmx["sound.present"] = "FALSE"
v.vmx["sound.autodetect"] = "TRUE"
v.enable_vmrun_ip_lookup = false
v.whitelist_verified = true
v.vmx["hgfs.linkRootShare"] = "FALSE"
end
config.vm.provider :vmware_workstation do |v, override|
v.gui = true
v.vmx["memsize"] = "2048"
v.vmx["numvcpus"] = "2"
v.vmx["ethernet0.virtualDev"] = "vmxnet3"
v.vmx["RemoteDisplay.vnc.enabled"] = "false"
v.vmx["RemoteDisplay.vnc.port"] = "5900"
v.vmx["scsi0.virtualDev"] = "lsisas1068"
v.enable_vmrun_ip_lookup = false
v.whitelist_verified = true
v.vmx["hgfs.linkRootShare"] = "FALSE"
end
config.vm.provider "hyperv" do |v|
v.cpus = 2
v.maxmemory = 2048
v.linked_clone = true
end
config.vm.provider :libvirt do |libvirt, override|
libvirt.memory = 2048
libvirt.cpus = 2
# Use WinRM for the default synced folder; or disable it if
# WinRM is not available. Linux hosts don't support SMB,
# and Windows guests don't support NFS/9P/rsync
# See https://github.com/Cimpress-MCP/vagrant-winrm-syncedfolders
if Vagrant.has_plugin?("vagrant-winrm-syncedfolders")
override.vm.synced_folder ".", "/vagrant", type: "winrm"
else
override.vm.synced_folder ".", "/vagrant", disabled: true
end
# Enable Hyper-V enlightments, see
# https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightenments-with-kvm.html
libvirt.hyperv_feature :name => 'stimer', :state => 'on'
libvirt.hyperv_feature :name => 'relaxed', :state => 'on'
libvirt.hyperv_feature :name => 'vapic', :state => 'on'
libvirt.hyperv_feature :name => 'synic', :state => 'on'
end
end

View File

@ -0,0 +1,230 @@
{
"builders": [
{
"boot_command": ["a<wait>a<wait>a"],
"boot_wait": "-1s",
"cd_files": [
"{{user `autounattend`}}",
"./floppy/WindowsPowershell.lnk",
"./floppy/PinTo10.exe",
"./scripts/fixnetwork.ps1",
"./scripts/disable-screensaver.ps1",
"./scripts/disable-winrm.ps1",
"./scripts/enable-winrm.ps1",
"./scripts/microsoft-updates.ps1",
"./scripts/win-updates.ps1",
"./scripts/set-shortcut.ps1"
],
"communicator": "winrm",
"configuration_version": "10.0",
"cpus": "{{user `cpus`}}",
"disk_size": "{{user `disk_size`}}",
"enable_dynamic_memory": false,
"enable_mac_spoofing": true,
"enable_secure_boot": true,
"enable_virtualization_extensions": true,
"generation": "2",
"guest_additions_mode": "disable",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `iso_url`}}",
"memory": "{{user `memory`}}",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"switch_name": "Default Switch",
"type": "hyperv-iso",
"vm_name": "{{user `vm_name`}}",
"winrm_password": "vagrant",
"winrm_timeout": "{{ user `winrm_timeout` }}",
"winrm_username": "vagrant"
},
{
"boot_command": ["a<wait>a<wait>a"],
"boot_wait": "-1s",
"cd_files": [
"{{user `autounattend`}}",
"./floppy/WindowsPowershell.lnk",
"./floppy/PinTo10.exe",
"./scripts/fixnetwork.ps1",
"./scripts/disable-screensaver.ps1",
"./scripts/disable-winrm.ps1",
"./scripts/enable-winrm.ps1",
"./scripts/microsoft-updates.ps1",
"./scripts/win-updates.ps1",
"./scripts/set-shortcut.ps1"
],
"communicator": "winrm",
"cpus": "{{user `cpus`}}",
"disk_adapter_type": "lsisas1068",
"disk_size": "{{user `disk_size`}}",
"disk_type_id": "1",
"guest_os_type": "windows9-64",
"headless": "{{user `headless`}}",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `iso_url`}}",
"memory": "{{user `memory`}}",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"type": "vmware-iso",
"version": "19",
"vm_name": "{{user `vm_name`}}",
"vmx_data": {
"firmware": "efi",
"RemoteDisplay.vnc.enabled": "false",
"RemoteDisplay.vnc.port": "5900"
},
"vmx_remove_ethernet_interfaces": true,
"vnc_port_max": 5980,
"vnc_port_min": 5900,
"winrm_password": "vagrant",
"winrm_timeout": "{{ user `winrm_timeout` }}",
"winrm_username": "vagrant"
},
{
"boot_command": ["a<wait>a<wait>a"],
"boot_wait": "-1s",
"cd_files": [
"{{user `autounattend`}}",
"./floppy/WindowsPowershell.lnk",
"./floppy/PinTo10.exe",
"./scripts/fixnetwork.ps1",
"./scripts/disable-screensaver.ps1",
"./scripts/disable-winrm.ps1",
"./scripts/enable-winrm.ps1",
"./scripts/microsoft-updates.ps1",
"./scripts/win-updates.ps1",
"./scripts/set-shortcut.ps1"
],
"communicator": "winrm",
"cpus": "{{user `cpus`}}",
"disk_size": "{{user `disk_size`}}",
"firmware": "efi",
"guest_additions_mode": "disable",
"guest_os_type": "Windows10_64",
"headless": "{{user `headless`}}",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `iso_url`}}",
"memory": "{{user `memory`}}",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"type": "virtualbox-iso",
"vm_name": "{{user `vm_name`}}",
"winrm_password": "vagrant",
"winrm_timeout": "{{ user `winrm_timeout` }}",
"winrm_username": "vagrant"
},
{
"boot_command": "",
"boot_wait": "6m",
"communicator": "winrm",
"cpus": "{{user `cpus`}}",
"disk_size": "{{user `disk_size`}}",
"floppy_files": [
"{{user `autounattend`}}",
"./floppy/WindowsPowershell.lnk",
"./floppy/PinTo10.exe",
"./scripts/fixnetwork.ps1",
"./scripts/disable-screensaver.ps1",
"./scripts/disable-winrm.ps1",
"./scripts/enable-winrm.ps1",
"./scripts/microsoft-updates.ps1",
"./scripts/win-updates.ps1",
"./scripts/set-shortcut.ps1"
],
"guest_os_type": "win-10",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `iso_url`}}",
"memory": "{{user `memory`}}",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"type": "parallels-iso",
"parallels_tools_flavor": "win",
"prlctl": [
[
"set",
"{{.Name}}",
"--efi-boot",
"off"
]
],
"vm_name": "{{user `vm_name`}}",
"winrm_password": "vagrant",
"winrm_timeout": "{{ user `winrm_timeout` }}",
"winrm_username": "vagrant"
}
],
"post-processors": [
{
"keep_input_artifact": false,
"output": "cmderdev-10_{{.Provider}}.box",
"type": "vagrant",
"vagrantfile_template": "vagrantfile-windows_10.template"
}
],
"provisioners": [
{
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
"remote_path": "/tmp/script.bat",
"scripts": [
"./scripts/enable-rdp.bat"
],
"type": "windows-shell"
},
{
"scripts": [
"./scripts/vm-guest-tools.ps1",
"./scripts/debloat-windows.ps1"
],
"type": "powershell"
},
{
"restart_timeout": "{{user `restart_timeout`}}",
"type": "windows-restart"
},
{
"scripts": [
"./scripts/set-powerplan.ps1",
"./scripts/docker/disable-windows-defender.ps1"
],
"type": "powershell"
},
{
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
"remote_path": "/tmp/script.bat",
"scripts": [
"./scripts/chocolatey.bat"
],
"type": "windows-shell"
},
{
"scripts": [
"./scripts/chocopacks.ps1"
],
"type": "powershell"
},
{
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
"remote_path": "/tmp/script.bat",
"scripts": [
"./scripts/pin-powershell.bat",
"./scripts/compile-dotnet-assemblies.bat",
"./scripts/set-winrm-automatic.bat",
"./scripts/uac-enable.bat",
"./scripts/dis-updates.bat",
"./scripts/compact.bat"
],
"type": "windows-shell"
}
],
"variables": {
"autounattend": "./answer_files/10_efi/Autounattend.xml",
"cpus": "2",
"disk_size": "262144",
"disk_type_id": "1",
"memory": "2048",
"headless": "false",
"iso_url": "./iso/Windows_10.iso",
"iso_checksum": "none",
"restart_timeout": "5m",
"vhv_enable": "false",
"virtio_win_iso": "~/virtio-win.iso",
"vm_name": "cmderdev10",
"winrm_timeout": "6h",
"vmx_version": "14"
}
}

View File

@ -0,0 +1,249 @@
{
"builders": [
{
"boot_command": [
"<leftShiftOn><f10><leftShiftOff><wait>",
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassTPMCheck /d 1<return>",
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassSecureBootCheck /d 1<return><wait>",
"exit<return>",
"<wait><return>"
],
"boot_wait": "2m",
"communicator": "winrm",
"configuration_version": "8.0",
"cpus": "2",
"disk_size": "{{user `disk_size`}}",
"floppy_files": [
"{{user `autounattend`}}",
"./floppy/WindowsPowershell.lnk",
"./floppy/PinTo10.exe",
"./scripts/fixnetwork.ps1",
"./scripts/disable-screensaver.ps1",
"./scripts/disable-winrm.ps1",
"./scripts/enable-winrm.ps1",
"./scripts/microsoft-updates.bat",
"./scripts/win-updates.ps1"
],
"guest_additions_mode": "none",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `iso_url`}}",
"memory": "{{user `memory`}}",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"switch_name": "{{user `switch_name`}}",
"type": "hyperv-iso",
"vm_name": "{{user `vm_name`}}",
"winrm_password": "vagrant",
"winrm_timeout": "{{user `winrm_timeout`}}",
"winrm_username": "vagrant"
},
{
"boot_command": [
"<leftShiftOn><f10><leftShiftOff><wait>",
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassTPMCheck /d 1<return>",
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassSecureBootCheck /d 1<return><wait>",
"exit<return>",
"<wait><return>"
],
"boot_wait": "2m",
"communicator": "winrm",
"cpus": 2,
"disk_adapter_type": "lsisas1068",
"disk_size": "{{user `disk_size`}}",
"disk_type_id": "{{user `disk_type_id`}}",
"floppy_files": [
"{{user `autounattend`}}",
"./floppy/WindowsPowershell.lnk",
"./floppy/PinTo10.exe",
"./scripts/fixnetwork.ps1",
"./scripts/disable-screensaver.ps1",
"./scripts/disable-winrm.ps1",
"./scripts/enable-winrm.ps1",
"./scripts/microsoft-updates.bat",
"./scripts/win-updates.ps1"
],
"guest_os_type": "windows9-64",
"headless": "{{user `headless`}}",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `iso_url`}}",
"memory": "{{user `memory`}}",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"type": "vmware-iso",
"version": "{{user `vmx_version`}}",
"vm_name": "{{user `vm_name`}}",
"vmx_data": {
"RemoteDisplay.vnc.enabled": "false",
"RemoteDisplay.vnc.port": "5900"
},
"vmx_remove_ethernet_interfaces": true,
"vnc_port_max": 5980,
"vnc_port_min": 5900,
"winrm_password": "vagrant",
"winrm_timeout": "{{user `winrm_timeout`}}",
"winrm_username": "vagrant"
},
{
"boot_command": [
"<leftShiftOn><f10><leftShiftOff><wait>",
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassTPMCheck /d 1<return>",
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassSecureBootCheck /d 1<return><wait>",
"exit<return>",
"<wait><return>"
],
"boot_wait": "2m",
"communicator": "winrm",
"cpus": 2,
"disk_size": "{{user `disk_size`}}",
"floppy_files": [
"{{user `autounattend`}}",
"./floppy/WindowsPowershell.lnk",
"./floppy/PinTo10.exe",
"./scripts/fixnetwork.ps1",
"./scripts/disable-screensaver.ps1",
"./scripts/disable-winrm.ps1",
"./scripts/enable-winrm.ps1",
"./scripts/microsoft-updates.bat",
"./scripts/win-updates.ps1"
],
"guest_additions_mode": "disable",
"guest_os_type": "Windows10_64",
"headless": "{{user `headless`}}",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `iso_url`}}",
"memory": "{{user `memory`}}",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"type": "virtualbox-iso",
"vm_name": "{{user `vm_name`}}",
"winrm_password": "vagrant",
"winrm_timeout": "{{user `winrm_timeout`}}",
"winrm_username": "vagrant"
},
{
"boot_command": [
"<leftShiftOn><f10><leftShiftOff><wait>",
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassTPMCheck /d 1<return>",
"reg add HKLM\\SYSTEM\\Setup\\LabConfig /t REG_DWORD /v BypassSecureBootCheck /d 1<return><wait>",
"exit<return>",
"<wait><return>"
],
"boot_wait": "2m",
"communicator": "winrm",
"cpus": 2,
"disk_size": "{{user `disk_size`}}",
"floppy_files": [
"{{user `autounattend`}}",
"./floppy/WindowsPowershell.lnk",
"./floppy/PinTo10.exe",
"./scripts/fixnetwork.ps1",
"./scripts/disable-screensaver.ps1",
"./scripts/disable-winrm.ps1",
"./scripts/enable-winrm.ps1",
"./scripts/microsoft-updates.bat",
"./scripts/win-updates.ps1"
],
"guest_os_type": "win-10",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `iso_url`}}",
"memory": "{{user `memory`}}",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"type": "parallels-iso",
"parallels_tools_flavor": "win",
"parallels_tools_mode": "disable",
"prlctl": [
[
"set",
"{{.Name}}",
"--adaptive-hypervisor",
"on"
],
[
"set",
"{{.Name}}",
"--efi-boot",
"off"
]
],
"vm_name": "{{user `vm_name`}}",
"winrm_password": "vagrant",
"winrm_timeout": "{{user `winrm_timeout`}}",
"winrm_username": "vagrant"
}
],
"post-processors": [
{
"keep_input_artifact": false,
"output": "windows_11_{{.Provider}}.box",
"type": "vagrant",
"vagrantfile_template": "vagrantfile-windows_10.template"
}
],
"provisioners": [
{
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
"remote_path": "/tmp/script.bat",
"scripts": [
"./scripts/enable-rdp.bat"
],
"type": "windows-shell"
},
{
"scripts": [
"./scripts/vm-guest-tools.ps1",
"./scripts/debloat-windows.ps1"
],
"type": "powershell"
},
{
"restart_timeout": "{{user `restart_timeout`}}",
"type": "windows-restart"
},
{
"scripts": [
"./scripts/set-powerplan.ps1",
"./scripts/docker/disable-windows-defender.ps1"
],
"type": "powershell"
},
{
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
"remote_path": "/tmp/script.bat",
"scripts": [
"./scripts/chocolatey.bat"
],
"type": "windows-shell"
},
{
"scripts": [
"./scripts/chocopacks.ps1"
],
"type": "powershell"
},
{
"execute_command": "{{ .Vars }} cmd /c \"{{ .Path }}\"",
"remote_path": "/tmp/script.bat",
"scripts": [
"./scripts/pin-powershell.bat",
"./scripts/compile-dotnet-assemblies.bat",
"./scripts/set-winrm-automatic.bat",
"./scripts/uac-enable.bat",
"./scripts/dis-updates.bat",
"./scripts/compact.bat"
],
"type": "windows-shell"
}
],
"variables": {
"autounattend": "./answer_files/11/Autounattend.xml",
"disk_size": "61440",
"disk_type_id": "1",
"memory": "4096",
"headless": "false",
"iso_checksum": "sha256:e8b1d2a1a85a09b4bf6154084a8be8e3c814894a15a7bcf3e8e63fcfa9a528cb",
"iso_url": "https://software-download.microsoft.com/download/sg/22000.194.210913-1444.co_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso",
"restart_timeout": "5m",
"vhv_enable": "false",
"virtio_win_iso": "~/virtio-win.iso",
"vm_name": "windows_11",
"winrm_timeout": "6h",
"vmx_version": "14"
}
}

View File

@ -5,17 +5,17 @@
This script updates dependencies to the latest version in vendor/sources.json file. This script updates dependencies to the latest version in vendor/sources.json file.
You will need to make this script executable by setting your Powershell Execution Policy to Remote signed You will need to make this script executable by setting your Powershell Execution Policy to Remote signed
Then unblock the script for execution with UnblockFile .\update.ps1 Then unblock the script for execution with UnblockFile .\build.ps1
.EXAMPLE .EXAMPLE
.\update.ps1 .\build.ps1
Updates the dependency sources in the default location, the vendor/sources.json file. Updates the dependency sources in the default location, the vendor/sources.json file.
.EXAMPLE .EXAMPLE
.\update.ps1 -verbose .\build -verbose
Updates the dependency sources and see what's going on. Updates the dependency sources and see what's going on.
.EXAMPLE .EXAMPLE
.\update.ps1 -SourcesPath '~/custom/vendors.json' .\build.ps1 -SourcesPath '~/custom/vendors.json'
Specify the path to update dependency sources file at. Specify the path to update dependency sources file at.
.NOTES .NOTES
@ -23,7 +23,7 @@
David Refoua <David@Refoua.me> David Refoua <David@Refoua.me>
Part of the Cmder project. Part of the Cmder project.
.LINK .LINK
https://github.com/cmderdev/cmder - Project Home http://cmder.app/ - Project Home
#> #>
[CmdletBinding(SupportsShouldProcess = $true)] [CmdletBinding(SupportsShouldProcess = $true)]
Param( Param(

View File

@ -1,6 +1,7 @@
function Ensure-Exists($path) { function Ensure-Exists($path) {
if (-not (Test-Path $path)) { if (-not (Test-Path $path)) {
throw "Missing required $path! Ensure it is installed" Write-Error "Missing required $path! Ensure it is installed"
exit 1
} }
return $true > $null return $true > $null
} }
@ -15,7 +16,8 @@ function Ensure-Executable($command) {
Set-Alias -Name "7z" -Value "$env:programw6432\7-zip\7z.exe" -Scope script Set-Alias -Name "7z" -Value "$env:programw6432\7-zip\7z.exe" -Scope script
} }
else { else {
throw "Missing $command! Ensure it is installed and on in the PATH" Write-Error "Missing $command! Ensure it is installed and on in the PATH"
exit 1
} }
} }
} }

View File

@ -0,0 +1,44 @@
choco install -y --force 7zip 7zip.install
choco install -y --force cmder
$env:path = "$env:path;c:\tools\cmder\vendor\git-for-windows\cmd;c:\tools\cmder\vendor\git-for-windows\usr\bin;c:\tools\cmder\vendor\git-for-windows\mingw64\bin"
c:
cd $env:userprofile
git clone https://github.com/cmderdev/cmder cmderdev 2>&1
if ("$env:USERNAME" -eq "vagrant" -and -not (test-path "$env:userprofile\cmderdev\vendor\git-for-windows")) {
invoke-expression -command "TAKEOWN /F `"$env:userprofile\cmderdev`" /R /D y /s localhost /u vagrant /p vagrant"
}
cd $env:userprofile/cmderdev
git remote add upstream https://github.com/cmderdev/cmder
Install-PackageProvider -Name NuGet -Force
install-module posh-git -force
cmd.exe /c "call `"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat`" && set > %temp%\vcvars.txt"
Get-Content "$env:temp\vcvars.txt" | Foreach-Object {
if ($_ -match "^(.*?)=(.*)$") {
Set-Content "env:\$($matches[1])" $matches[2]
}
}
copy-item -erroraction silentlycontinue "C:\Tools\Cmder\Cmder.exe" "$env:userprofile\cmderdev"
remove-item -erroraction silentlycontinue "$env:userprofile\cmderdev\launcher\x64\release\cmder.exe" -force
start-process -erroraction silentlycontinue -nonewwindow -workingdirectory "$env:userprofile\cmderdev\scripts" -filepath "powershell.exe" -argumentlist ".\build.ps1 -verbose -compile"
copy-item -erroraction silentlycontinue "$env:userprofile\cmderdev\launcher\x64\release\cmder.exe" "$env:userprofile\cmderdev" -force
# tabby
setx cmder_root "${env:userprofile}\cmderdev"
# C:\Users\vagrant\AppData\Roaming\Hyper
# // shell: '',
# shell: 'cmd.exe',
# // for setting shell arguments (i.e. for using interactive shellArgs: `['-i']`)
# // by default `['--login']` will be used
# // shellArgs: ['--login'],
# shellArgs: ['/k', 'C:\\users\\vagrant\\cmderdev\\vendor\\init.bat'],

View File

@ -0,0 +1,283 @@
{
"$help": "https://aka.ms/terminal-documentation",
"$schema": "https://aka.ms/terminal-profiles-schema",
"actions":
[
{
"command":
{
"action": "copy",
"singleLine": false
},
"keys": "ctrl+c"
},
{
"command": "paste",
"keys": "ctrl+v"
},
{
"command": "find",
"keys": "ctrl+shift+f"
},
{
"command":
{
"action": "splitPane",
"split": "auto",
"splitMode": "duplicate"
},
"keys": "alt+shift+d"
}
],
"copyFormatting": "none",
"copyOnSelect": false,
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"profiles":
{
"defaults": {},
"list":
[
{
"commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"hidden": false,
"name": "Windows PowerShell"
},
{
"commandline": "%SystemRoot%\\System32\\cmd.exe",
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"hidden": false,
"name": "Command Prompt"
},
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": false,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure"
},
{
"guid": "{3b26d644-1d3b-5a0c-ab09-39d4dd9ae00e}",
"hidden": false,
"name": "Developer Command Prompt for VS 2022",
"source": "Windows.Terminal.VisualStudio"
},
{
"guid": "{589cd367-e65f-5e6a-a1c7-2b8d6f250da8}",
"hidden": false,
"name": "Developer PowerShell for VS 2022",
"source": "Windows.Terminal.VisualStudio"
}
]
},
"schemes":
[
{
"background": "#0C0C0C",
"black": "#0C0C0C",
"blue": "#0037DA",
"brightBlack": "#767676",
"brightBlue": "#3B78FF",
"brightCyan": "#61D6D6",
"brightGreen": "#16C60C",
"brightPurple": "#B4009E",
"brightRed": "#E74856",
"brightWhite": "#F2F2F2",
"brightYellow": "#F9F1A5",
"cursorColor": "#FFFFFF",
"cyan": "#3A96DD",
"foreground": "#CCCCCC",
"green": "#13A10E",
"name": "Campbell",
"purple": "#881798",
"red": "#C50F1F",
"selectionBackground": "#FFFFFF",
"white": "#CCCCCC",
"yellow": "#C19C00"
},
{
"background": "#012456",
"black": "#0C0C0C",
"blue": "#0037DA",
"brightBlack": "#767676",
"brightBlue": "#3B78FF",
"brightCyan": "#61D6D6",
"brightGreen": "#16C60C",
"brightPurple": "#B4009E",
"brightRed": "#E74856",
"brightWhite": "#F2F2F2",
"brightYellow": "#F9F1A5",
"cursorColor": "#FFFFFF",
"cyan": "#3A96DD",
"foreground": "#CCCCCC",
"green": "#13A10E",
"name": "Campbell Powershell",
"purple": "#881798",
"red": "#C50F1F",
"selectionBackground": "#FFFFFF",
"white": "#CCCCCC",
"yellow": "#C19C00"
},
{
"background": "#282C34",
"black": "#282C34",
"blue": "#61AFEF",
"brightBlack": "#5A6374",
"brightBlue": "#61AFEF",
"brightCyan": "#56B6C2",
"brightGreen": "#98C379",
"brightPurple": "#C678DD",
"brightRed": "#E06C75",
"brightWhite": "#DCDFE4",
"brightYellow": "#E5C07B",
"cursorColor": "#FFFFFF",
"cyan": "#56B6C2",
"foreground": "#DCDFE4",
"green": "#98C379",
"name": "One Half Dark",
"purple": "#C678DD",
"red": "#E06C75",
"selectionBackground": "#FFFFFF",
"white": "#DCDFE4",
"yellow": "#E5C07B"
},
{
"background": "#FAFAFA",
"black": "#383A42",
"blue": "#0184BC",
"brightBlack": "#4F525D",
"brightBlue": "#61AFEF",
"brightCyan": "#56B5C1",
"brightGreen": "#98C379",
"brightPurple": "#C577DD",
"brightRed": "#DF6C75",
"brightWhite": "#FFFFFF",
"brightYellow": "#E4C07A",
"cursorColor": "#4F525D",
"cyan": "#0997B3",
"foreground": "#383A42",
"green": "#50A14F",
"name": "One Half Light",
"purple": "#A626A4",
"red": "#E45649",
"selectionBackground": "#FFFFFF",
"white": "#FAFAFA",
"yellow": "#C18301"
},
{
"background": "#002B36",
"black": "#002B36",
"blue": "#268BD2",
"brightBlack": "#073642",
"brightBlue": "#839496",
"brightCyan": "#93A1A1",
"brightGreen": "#586E75",
"brightPurple": "#6C71C4",
"brightRed": "#CB4B16",
"brightWhite": "#FDF6E3",
"brightYellow": "#657B83",
"cursorColor": "#FFFFFF",
"cyan": "#2AA198",
"foreground": "#839496",
"green": "#859900",
"name": "Solarized Dark",
"purple": "#D33682",
"red": "#DC322F",
"selectionBackground": "#FFFFFF",
"white": "#EEE8D5",
"yellow": "#B58900"
},
{
"background": "#FDF6E3",
"black": "#002B36",
"blue": "#268BD2",
"brightBlack": "#073642",
"brightBlue": "#839496",
"brightCyan": "#93A1A1",
"brightGreen": "#586E75",
"brightPurple": "#6C71C4",
"brightRed": "#CB4B16",
"brightWhite": "#FDF6E3",
"brightYellow": "#657B83",
"cursorColor": "#002B36",
"cyan": "#2AA198",
"foreground": "#657B83",
"green": "#859900",
"name": "Solarized Light",
"purple": "#D33682",
"red": "#DC322F",
"selectionBackground": "#FFFFFF",
"white": "#EEE8D5",
"yellow": "#B58900"
},
{
"background": "#000000",
"black": "#000000",
"blue": "#3465A4",
"brightBlack": "#555753",
"brightBlue": "#729FCF",
"brightCyan": "#34E2E2",
"brightGreen": "#8AE234",
"brightPurple": "#AD7FA8",
"brightRed": "#EF2929",
"brightWhite": "#EEEEEC",
"brightYellow": "#FCE94F",
"cursorColor": "#FFFFFF",
"cyan": "#06989A",
"foreground": "#D3D7CF",
"green": "#4E9A06",
"name": "Tango Dark",
"purple": "#75507B",
"red": "#CC0000",
"selectionBackground": "#FFFFFF",
"white": "#D3D7CF",
"yellow": "#C4A000"
},
{
"background": "#FFFFFF",
"black": "#000000",
"blue": "#3465A4",
"brightBlack": "#555753",
"brightBlue": "#729FCF",
"brightCyan": "#34E2E2",
"brightGreen": "#8AE234",
"brightPurple": "#AD7FA8",
"brightRed": "#EF2929",
"brightWhite": "#EEEEEC",
"brightYellow": "#FCE94F",
"cursorColor": "#000000",
"cyan": "#06989A",
"foreground": "#555753",
"green": "#4E9A06",
"name": "Tango Light",
"purple": "#75507B",
"red": "#CC0000",
"selectionBackground": "#FFFFFF",
"white": "#D3D7CF",
"yellow": "#C4A000"
},
{
"background": "#000000",
"black": "#000000",
"blue": "#000080",
"brightBlack": "#808080",
"brightBlue": "#0000FF",
"brightCyan": "#00FFFF",
"brightGreen": "#00FF00",
"brightPurple": "#FF00FF",
"brightRed": "#FF0000",
"brightWhite": "#FFFFFF",
"brightYellow": "#FFFF00",
"cursorColor": "#FFFFFF",
"cyan": "#008080",
"foreground": "#C0C0C0",
"green": "#008000",
"name": "Vintage",
"purple": "#800080",
"red": "#800000",
"selectionBackground": "#FFFFFF",
"white": "#C0C0C0",
"yellow": "#808000"
}
],
"themes": []
}

View File

@ -0,0 +1,9 @@
{
"generatedProfiles" :
[
"{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"{589cd367-e65f-5e6a-a1c7-2b8d6f250da8}",
"{3b26d644-1d3b-5a0c-ab09-39d4dd9ae00e}"
],
"settingsHash" : "6e0f2330b78337f3-01d95614596b3f65"
}

1
vendor/bin/add-cmderrootenvar.ps1 vendored Normal file
View File

@ -0,0 +1 @@
setx cmder_root "${env:cmder_root}"

36
vendor/bin/add-cmdertodesktop.ps1 vendored Normal file
View File

@ -0,0 +1,36 @@
if (test-path "c:\windows\set-shortcut.ps1") {
$setShortcut = "c:\windows\set-shortcut.ps1"
}
if (test-path "${env:USERPROFILE}\cmderdev") {
$env:cmder_root = "${env:USERPROFILE}\cmderdev"
write-host "Creating '${env:USERPROFILE}\Desktop\Cmderdev.lnk'..."
if (test-path "${env:USERPROFILE}\cmderdev\vendor\bin\set-shortcut.ps1") {
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
}
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"${env:cmder_root}\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmderdev.lnk`" -WorkingDirectory `"${env:cmder_root}`""
}
if (test-path "${env:USERPROFILE}\cmder") {
$env:cmder_root = "${env:USERPROFILE}\cmder"
if (test-path "${cmder_root}\vendor\bin\set-shortcut.ps1") {
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
}
write-host "Creating '${env:USERPROFILE}\Desktop\Cmder.lnk'..."
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"$env:cmder_root\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmder.lnk`" -WorkingDirectory `"${env:USERPROFILE}`""
} elseif (test-path "C:\tools\cmder") {
$env:cmder_root = "C:\tools\cmder"
if (test-path "${cmder_root}\vendor\bin\set-shortcut.ps1") {
$setShortcut = "$env:cmder_root\vendor\bin\set-shortcut.ps1"
}
write-host "Creating '${env:USERPROFILE}\Desktop\Cmder.lnk'..."
start-process -NoNewWindow -filePath "powershell.exe" -ArgumentList "-file `"${setShortcut}`" -sourceexe `"$env:cmder_root\Cmder.exe`" -DestinationPath `"${env:USERPROFILE}\Desktop\Cmder.lnk`" -WorkingDirectory `"${env:USERPROFILE}`""
}

39
vendor/bin/add-vscodeprofile.ps1 vendored Normal file
View File

@ -0,0 +1,39 @@
# VSCode
$VSCodeUserSettings = "$env:APPDATA/Code/User"
$VSCodeSettings = "$VSCodeUserSettings/settings.json";
$VSCodeSettingsNew = $VSCodeSettings.replace('.json', '-new.json')
if (test-path $VSCodeSettings) {
$data = get-content -path $VSCodeSettings -ErrorAction silentlycontinue | out-string | ConvertFrom-Json
}
else {
New-Item -ItemType directory $VSCodeUserSettings -force
$data = @{}
}
write-host $data
$data | Add-Member -force -Name 'terminal.integrated.defaultProfile.windows' -MemberType NoteProperty -Value "Cmder"
if ($null -eq $data.'terminal.integrated.profiles.windows') {
write-host "Adding 'terminal.integrated.profiles.windows'..."
$data | Add-Member -force -Name 'terminal.integrated.profiles.windows' -MemberType NoteProperty -Value @{}
}
write-host "Adding 'terminal.integrated.profiles.windows.Cmder' profile..."
$data.'terminal.integrated.profiles.windows'.'Cmder' = @{
"name" = "Cmder";
"path" = @(
"`${env:windir}/Sysnative/cmd.exe";
"`${env:windir}/System32/cmd.exe";
);
"args" = @(
"/k";
"`${env:USERPROFILE}/cmderdev/vendor/bin/vscode_init.cmd");
"icon" = "terminal-cmd";
"color" = "terminal.ansiGreen";
};
$data | ConvertTo-Json -depth 100 | set-content $VSCodeSettings

View File

@ -0,0 +1,74 @@
# Windows Terminal
$windowsTerminalFolder = (dir "$env:userprofile/AppData/Local/Packages/Microsoft.WindowsTerminal_*").name
$windowsTerminalPath = "$env:userprofile/AppData/Local/Packages/$windowsTerminalFolder"
$windowsTerminalSettings = $windowsTerminalPath + '/localState/settings.json'
$windowsTerminalSettingsNew = $windowsTerminalPath + '/localState/settings-new.json'
if (test-path "$env:userprofile/Documents/windows_terminal_settings.json.default") {
if (test-path "$windowsTerminalPath/LocalState/settings.json") {
del "$env:userprofile/Documents/windows_terminal_settings.json.default"
} else {
move-item -path $env:userprofile/Documents/windows_terminal_settings.json.default -destination $windowsTerminalPath/LocalState/settings.json
}
}
if (test-path "$env:userprofile/Documents/windows_terminal_state.json.default") {
if (test-path "$windowsTerminalPath/LocalState/state.json") {
del "$env:userprofile/Documents/windows_terminal_state.json.default"
} else {
move-item -path $env:userprofile/Documents/windows_terminal_state.json.default -destination $windowsTerminalPath/LocalState/state.json
}
}
if (test-path "$windowsTerminalPath/LocalState/state.json") {
$json = get-content $windowsTerminalSettings | ConvertFrom-Json
$json.defaultProfile="{00000000-0000-0000-ba54-000000000132}"
$cmderFound = $false
$cmderAsAdminFound = $false
foreach ($profile in $json.profiles.list) {
if ($profile.Name -eq "Cmder") {
$cmderFound = $true
}
elseIf ($profile.Name -eq "Cmder as Admin") {
$cmderAsAdminFound = $true
}
}
if (-not $cmderFound) {
write-host "Adding 'Cmder' to Windows Terminal..."
$json.profiles.list += @{
commandline="cmd.exe /k `"%USERPROFILE%/cmderdev/vendor/init.bat`"";
startingDirectory="%USERPROFILE%/cmderdev";
icon="%USERPROFILE%/cmderdev/icons/cmder.ico";
closeOnExit="graceful";
guid="{00000000-0000-0000-ba54-000000000132}";
hidden=$false;
name="Cmder"
}
}
if (-not $cmderAsAdminFound) {
write-host "Adding 'Cmder as Admin' to Windows Terminal..."
$json.profiles.list += @{
commandline="cmd.exe /k `"%USERPROFILE%/cmderdev/vendor/init.bat`"";
startingDirectory="%USERPROFILE%/cmderdev";
icon="%USERPROFILE%/cmderdev/icons/cmder_red.ico";
closeOnExit="graceful";
guid="{00000000-0000-0000-ba54-000000000133}";
hidden=$false;
elevate=$true;
name="Cmder as Admin"
}
}
$json | ConvertTo-Json -depth 100 | set-content $windowsTerminalSettings
}
else {
write-host "Cannot add profiles for Windows Terminal. The Windows Terminal settings file does not exist!"
}

View File

@ -9,5 +9,5 @@ if "%cmder_init%" == "1" (
) )
pushd "%CMDER_ROOT%" pushd "%CMDER_ROOT%"
call "%CMDER_ROOT%\vendor\init.bat" /f %* call "%CMDER_ROOT%\vendor\init.bat" /f
popd popd

14
vendor/bin/excd.cmd vendored
View File

@ -1,8 +1,6 @@
@echo off @if "%~1"=="/?" (@cd %*)
set excd=%* @set excd=%*
set excd=%excd:"=% @set excd=%excd:"=%
set excd_param=/d @if "%excd:~0,1%"=="~" (@set excd=%userprofile%\%excd:~1%)
if /i "%excd:~0,2%"=="/d" set "excd=%excd:~2%" @if not "%~1"=="/d" (@set excd_param="/d") else (@set excd_param=)
if "%excd:~0,1%"=="~" (set excd=%userprofile%\%excd:~1%) @cd %excd_param% "%excd%"
if "%excd:~0,1%"=="/" (set excd_param=)
cd %excd_param% %excd%

21
vendor/bin/set-shortcut.ps1 vendored Normal file
View File

@ -0,0 +1,21 @@
[CmdletBinding()]
param(
[Parameter()]
[string]$SourceExe,
[string]$Arguments,
[string]$DestinationPath,
[string]$WorkingDirectory,
[String]$IconLocation
)
if ($IconLocation -eq '') {
$IconLocation = $SourceExe
}
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($destinationPath)
$Shortcut.TargetPath = $SourceExe
$Shortcut.Arguments = $Arguments
$shortcut.WorkingDirectory = $WorkingDirectory
$shortcut.IconLocation = $IconLocation
$Shortcut.Save()

View File

@ -1,10 +1,6 @@
# For explanation of these and other settings see: # For explanation of these and other settings see:
# https://chrisant996.github.io/clink/clink.html # https://chrisant996.github.io/clink/clink.html
# name: Expand envvars when completing
# type: boolean
match.expand_envvars = True
# name: Sets how command history expansion is applied # name: Sets how command history expansion is applied
# type: enum # type: enum
# options: off,on,not_squoted,not_dquoted,not_quoted # options: off,on,not_squoted,not_dquoted,not_quoted

View File

@ -48,15 +48,15 @@ prompt_overrideSvnStatusOptIn = false
-- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors -- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors
-- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects -- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects
-- --
-- Green: "\x1b[1;32;49m" -- Green: "\x1b[1;33;49m"
-- Yellow: "\x1b[1;33;49m" -- Yellow: "\x1b[1;32;49m"
-- Light Grey: "\x1b[1;30;49m" -- Light Grey: "\x1b[1;30;49m"
-- Prompt Element Colors -- Prompt Element Colors
uah_color = "\x1b[1;33;49m" -- Yellow uah = [user]@[hostname] uah_color = "\x1b[1;33;49m" -- Green = uah = [user]@[hostname]
cwd_color = "\x1b[1;32;49m" -- Green cwd = Current Working Directory cwd_color = "\x1b[1;32;49m" -- Yellow cwd = Current Working Directory
lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color
clean_color = "\x1b[37;1m" clean_color = "\x1b[37;1m"
dirty_color = "\x1b[33;3m" -- Yellow, Italic dirty_color = "\x1b[33;3m" -- Yellow, Italic
conflict_color = "\x1b[31;1m" -- Red, Bold conflict_color = "\x1b[31;1m" -- Red, Bold
unknown_color = "\x1b[37;1m" -- White, Bold = No VCS Status Branch Color unknown_color = "\x1b[37;1m" -- White = No VCS Status Branch Color

70
vendor/git-prompt.sh vendored
View File

@ -1,35 +1,26 @@
# Returns 1 if git status for Cmder is disabled, otherwise returns 0
function getGitStatusSetting() { function getGitStatusSetting() {
local gitConfig gitStatusSetting=$(git --no-pager config -l 2>/dev/null)
# Get all git config entries for the current repository without pager if [[ -n ${gitStatusSetting} ]] && [[ ${gitStatusSetting} =~ cmder.status=false ]] || [[ ${gitStatusSetting} =~ cmder.shstatus=false ]]
gitConfig=$(git --no-pager config -l 2>/dev/null) || return 0 # treat failure as enabled
# Check if git status for Cmder is disabled
if [[ $gitConfig =~ (^|$'\n')cmder\.status=false($|$'\n') ]] || \
[[ $gitConfig =~ (^|$'\n')cmder\.shstatus=false($|$'\n') ]]
then then
return 1 # disabled echo false
else
echo true
fi fi
return 0
} }
# Prints current branch or detached HEAD short commit hash
function getSimpleGitBranch() { function getSimpleGitBranch() {
local gitDir gitDir=$(git rev-parse --git-dir 2>/dev/null)
gitDir=$(git rev-parse --git-dir 2>/dev/null) || return 0 if [ -z "$gitDir" ]; then
return 0
fi
local headFile="$gitDir/HEAD" headContent=$(< "$gitDir/HEAD")
[ -f "$headFile" ] || return 0 if [[ "$headContent" == "ref: refs/heads/"* ]]
local headContent
headContent=$(< "$headFile")
if [[ "$headContent" =~ ^ref:\ refs/heads/(.+)$ ]]
then then
echo " (${BASH_REMATCH[1]})" echo " (${headContent:16})"
else else
echo " (HEAD detached at ${headContent:0:7})" echo " (HEAD detached at ${headContent:0:7})"
fi fi
} }
@ -42,18 +33,18 @@ fi
if test -f ~/.config/git/git-prompt.sh if test -f ~/.config/git/git-prompt.sh
then then
if getGitStatusSetting if [[ $(getGitStatusSetting) == true ]]
then then
. ~/.config/git/git-prompt.sh . ~/.config/git/git-prompt.sh
fi fi
else else
# Taken parts from https://github.com/git-for-windows/build-extra/blob/main/git-extra/git-prompt.sh PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]' # set window title
PS1='\[\033]0;${TITLEPREFIX:+$TITLEPREFIX:}${PWD//[^[:ascii:]]/?}\007\]' # set window title to TITLEPREFIX (if set) and current working directory # PS1="$PS1"'\n' # new line
# PS1="$PS1"'\n' # new line (disabled) PS1="$PS1"'\[\033[32m\]' # change to green
PS1="$PS1"'\[\033[32m\]' # change to green and bold
PS1="$PS1"'\u@\h ' # user@host<space> PS1="$PS1"'\u@\h ' # user@host<space>
PS1="$PS1${MSYSTEM:+\[\033[35m\]$MSYSTEM }" # show MSYSTEM in purple (if set) # PS1="$PS1"'\[\033[35m\]' # change to purple
PS1="$PS1"'\[\033[1;33m\]' # change to dark yellow in bold # PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
PS1="$PS1"'\w' # current working directory PS1="$PS1"'\w' # current working directory
if test -z "$WINELOADERNOEXEC" if test -z "$WINELOADERNOEXEC"
then then
@ -64,7 +55,7 @@ else
if test -f "$COMPLETION_PATH/git-prompt.sh" if test -f "$COMPLETION_PATH/git-prompt.sh"
then then
. "$COMPLETION_PATH/git-completion.bash" . "$COMPLETION_PATH/git-completion.bash"
if getGitStatusSetting if [[ $(getGitStatusSetting) == true ]]
then then
. "$COMPLETION_PATH/git-prompt.sh" . "$COMPLETION_PATH/git-prompt.sh"
PS1="$PS1"'\[\033[36m\]' # change color to cyan PS1="$PS1"'\[\033[36m\]' # change color to cyan
@ -75,22 +66,9 @@ else
fi fi
fi fi
fi fi
PS1="$PS1"'\[\033[0m\]' # reset color PS1="$PS1"'\[\033[0m\]' # change color
PS1="$PS1"'\n' # new line PS1="$PS1"'\n' # new line
PS1="$PS1"'\[\033[30;1m\]' # change color to grey in bold PS1="$PS1"'λ ' # prompt: always λ
PS1="$PS1"'λ ' # prompt: Cmder uses λ
PS1="$PS1"'\[\033[0m\]' # reset color
fi fi
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
# Evaluate all user-specific Bash completion scripts (if any)
if test -z "$WINELOADERNOEXEC"
then
for c in "$HOME"/bash_completion.d/*.bash
do
# Handle absence of any scripts (or the folder) gracefully
test ! -f "$c" ||
. "$c"
done
fi

2
vendor/init.bat vendored
View File

@ -426,7 +426,7 @@ if "%CMDER_ALIASES%" == "1" (
) )
:: Add aliases to the environment :: Add aliases to the environment
type "%user_aliases%" | %WINDIR%\System32\findstr /b /l /i "history=cat " >nul type "%user_aliases%" | findstr /b /l /i "history=cat " >nul
if "%ERRORLEVEL%" == "0" ( if "%ERRORLEVEL%" == "0" (
echo Migrating alias 'history' to new Clink 1.x.x... echo Migrating alias 'history' to new Clink 1.x.x...
call "%CMDER_ROOT%\vendor\bin\alias.cmd" /d history call "%CMDER_ROOT%\vendor\bin\alias.cmd" /d history

View File

@ -10,8 +10,9 @@ if "%~1" == "/h" (
exit /b exit /b
:help
:::=============================================================================== :::===============================================================================
:::help - shows all sub routines in a .bat/.cmd file with documentation :::show_subs - shows all sub routines in a .bat/.cmd file with documentation
:::. :::.
:::include: :::include:
:::. :::.
@ -19,15 +20,16 @@ exit /b
:::. :::.
:::usage: :::usage:
:::. :::.
::: %lib_base% help "file" ::: %lib_base% show_subs "file"
:::. :::.
:::options: :::options:
:::. :::.
::: file <in> full path to file containing lib_routines to display ::: file <in> full path to file containing lib_routines to display
:::.
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| %WINDIR%\System32\findstr /i /r "^:::"') do (
rem echo a="%%a"
:help
for /f "tokens=* delims=:" %%a in ('%WINDIR%\System32\findstr /i /r "^:::" "%~1"') do (
if "%%a"=="." ( if "%%a"=="." (
echo. echo.
) else if /i "%%a" == "usage" ( ) else if /i "%%a" == "usage" (
@ -42,13 +44,9 @@ exit /b
pause pause
exit /b exit /b
:cmder_shell
:::=============================================================================== :::===============================================================================
:::cmder_shell - Initializes the Cmder shell environment variables :::show_subs - shows all sub routines in a .bat/.cmd file with documentation
:::.
:::description:
:::.
::: This routine sets up the Cmder shell environment by detecting the
::: command shell and initializing related variables.
:::. :::.
:::include: :::include:
:::. :::.
@ -57,30 +55,15 @@ exit /b
:::usage: :::usage:
:::. :::.
::: %lib_base% cmder_shell ::: %lib_base% cmder_shell
:::.
:::options:
:::.
::: file <in> full path to file containing lib_routines to display
:::.
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
:cmder_shell
call :detect_comspec %ComSpec% call :detect_comspec %ComSpec%
exit /b exit /b
:::===============================================================================
:::detect_comspec - Detects the command shell being used:::
:::.
:::description:
:::.
::: This function sets the CMDER_SHELL variable to the name of the
::: detected command shell. It also initializes the CMDER_CLINK and
::: CMDER_ALIASES variables if they are not already defined.
:::.
:::include:
:::.
::: call "lib_base.cmd"
:::.
:::usage:
:::.
::: %lib_base% detect_comspec %ComSpec%
:::-------------------------------------------------------------------------------
:detect_comspec :detect_comspec
set CMDER_SHELL=%~n1 set CMDER_SHELL=%~n1
if not defined CMDER_CLINK ( if not defined CMDER_CLINK (
@ -91,27 +74,6 @@ exit /b
) )
exit /b exit /b
:::===============================================================================
:::update_legacy_aliases - Updates the legacy alias definitions in the user_aliases file
:::.
:::description:
:::.
::: This function checks if the user_aliases file contains the marker
::: ";= Add aliases below here". If the marker is not found, it creates
::: an initial user_aliases store by copying the default user_aliases file
::: from the CMDER_ROOT directory. If the CMDER_USER_CONFIG environment
::: variable is defined, it creates a backup of the existing user_aliases
::: file before copying the default file.
:::.
:::include:
:::.
::: call "lib_base.cmd"
:::.
:::usage:
:::.
::: %lib_base% update_legacy_aliases
:::-------------------------------------------------------------------------------
:update_legacy_aliases :update_legacy_aliases
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
if "%errorlevel%" == "1" ( if "%errorlevel%" == "1" (

View File

@ -12,6 +12,7 @@ if "%~1" == "/h" (
exit /b exit /b
:read_version
:::=============================================================================== :::===============================================================================
:::read_version - Get the git.exe version :::read_version - Get the git.exe version
:::. :::.
@ -33,7 +34,6 @@ exit /b
::: GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string ::: GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
:read_version
:: clear the variables :: clear the variables
set GIT_VERSION_%~1= set GIT_VERSION_%~1=
@ -55,7 +55,6 @@ exit /b
set "GIT_VERSION=%%C" set "GIT_VERSION=%%C"
) else ( ) else (
echo "'git --version' returned an improper version string!" echo "'git --version' returned an improper version string!"
%print_debug% :read_version "returned string: '%%A %%B %%C' by executable path: %git_executable%"
pause pause
exit /b exit /b
) )
@ -64,6 +63,7 @@ exit /b
exit /b exit /b
:parse_version
:::=============================================================================== :::===============================================================================
:::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces :::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces
:::. :::.
@ -88,7 +88,6 @@ exit /b
::: [SCOPE]_BUILD <out> Scoped Build version. ::: [SCOPE]_BUILD <out> Scoped Build version.
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
:parse_version
:: process a `x.x.x.xxxx.x` formatted string :: process a `x.x.x.xxxx.x` formatted string
%print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2" %print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
@ -111,8 +110,9 @@ exit /b
:endlocal_set_git_version :endlocal_set_git_version
:validate_version
:::=============================================================================== :::===============================================================================
:::validate_version - Validate semantic version string 'x.x.x.x' :::validate_version - Validate semantic version string 'x.x.x.x'.
:::. :::.
:::include: :::include:
:::. :::.
@ -128,7 +128,6 @@ exit /b
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4 ::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
:validate_version
:: now parse the version information into the corresponding variables :: now parse the version information into the corresponding variables
%print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2" %print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
@ -143,8 +142,9 @@ exit /b
) )
exit /b exit /b
:compare_versions
:::=============================================================================== :::===============================================================================
:::compare_version - Compare semantic versions and return latest version :::compare_version - Compare semantic versions return latest version.
:::. :::.
:::include: :::include:
:::. :::.
@ -160,7 +160,6 @@ exit /b
::: [SCOPE2] <in> Example: VENDOR ::: [SCOPE2] <in> Example: VENDOR
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
:compare_versions
:: checks all major, minor, patch and build variables for the given arguments. :: checks all major, minor, patch and build variables for the given arguments.
:: whichever binary that has the most recent version will be used based on the return code. :: whichever binary that has the most recent version will be used based on the return code.
@ -185,12 +184,7 @@ exit /b
endlocal & exit /b 0 endlocal & exit /b 0
:::=============================================================================== :::===============================================================================
:::is_git_shim - Check if the directory has a git.shim file :::is_git_shim
:::.
:::description:
:::.
::: Shim is a small helper program for Scoop that calls the executable configured in git.shim file
::: See: github.com/ScoopInstaller/Shim and github.com/cmderdev/cmder/pull/1905
:::. :::.
:::include: :::include:
:::. :::.
@ -207,7 +201,7 @@ exit /b
:is_git_shim :is_git_shim
pushd "%~1" pushd "%~1"
:: check if there is a shim file - if yes, read the actual executable path :: check if there's shim - and if yes follow the path
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
if exist git.shim ( if exist git.shim (
for /F "tokens=2 delims== " %%I in (git.shim) do ( for /F "tokens=2 delims== " %%I in (git.shim) do (
@ -224,7 +218,7 @@ exit /b
exit /b exit /b
:::=============================================================================== :::===============================================================================
:::compare_git_versions - Compare the user git version against the vendored version :::compare_git_versions
:::. :::.
:::include: :::include:
:::. :::.
@ -258,7 +252,7 @@ exit /b
:: if the user provided git executable is not found :: if the user provided git executable is not found
IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 ( IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 (
:: if not exist "%git_executable%" ( :: if not exist "%git_executable%" (
%print_debug% ":compare_git_versions" "No git at '%git_executable%' found." %print_debug% ":compare_git_versions" "No git at "%git_executable%" found."
set test_dir= set test_dir=
) )
) )
@ -267,7 +261,7 @@ exit /b
exit /b exit /b
:::=============================================================================== :::===============================================================================
:::get_user_git_version - Get the version information for the user provided git binary :::get_user_git_version - get the version information for the user provided git binary
:::. :::.
:::include: :::include:
:::. :::.
@ -283,4 +277,5 @@ exit /b
%lib_git% read_version USER "%test_dir%" 2>nul %lib_git% read_version USER "%test_dir%" 2>nul
%print_debug% ":get_user_git_version" "get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%" %print_debug% ":get_user_git_version" "get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%"
%lib_git% validate_version USER %GIT_VERSION_USER% %lib_git% validate_version USER %GIT_VERSION_USER%
exit /b exit /b

View File

@ -1,5 +1,6 @@
@echo off @echo off
call "%~dp0lib_base.cmd" call "%~dp0lib_base.cmd"
call "%%~dp0lib_console" call "%%~dp0lib_console"
set lib_path=call "%~dp0lib_path.cmd" set lib_path=call "%~dp0lib_path.cmd"
@ -10,13 +11,6 @@ if "%~1" == "/h" (
call :%* call :%*
) )
setlocal enabledelayedexpansion
if not defined find_pathext (
set "find_pathext=!PATHEXT:;= !"
set "find_pathext=!find_pathext:.=\.!"
)
endlocal & set "find_pathext=%find_pathext%"
exit /b exit /b
:enhance_path :enhance_path
@ -38,12 +32,13 @@ exit /b
:::options: :::options:
::: :::
::: append <in> Append to the path env variable rather than pre-pend. ::: append <in> Append to the path env variable rather than pre-pend.
::: ::B
::: :::
:::output: :::output:
::: :::
::: path <out> Sets the path env variable if required. ::: path <out> Sets the path env variable if required.
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
if "%~1" neq "" ( if "%~1" neq "" (
set "add_path=%~1" set "add_path=%~1"
) else ( ) else (
@ -57,8 +52,7 @@ exit /b
set "position=" set "position="
) )
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
if "%ERRORLEVEL%" == "0" ( if "%ERRORLEVEL%" == "0" (
set "add_to_path=%add_path%" set "add_to_path=%add_path%"
) else ( ) else (
@ -87,20 +81,20 @@ exit /b
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!;" echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!;"
call :set_found call :set_found
) )
%print_debug% :enhance_path "Env Var INSIDE PATH !find_query! - found=!found!" %print_debug% :enhance_path "Env Var INSIDE PATH !find_query! - found=!found!"
if /i "!position!" == "append" ( if /i "!position!" == "append" (
if "!found!" == "0" ( if "!found!" == "0" (
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!\"$" echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!\"$"
call :set_found call :set_found
) )
%print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!" %print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!"
) else ( ) else (
if "!found!" == "0" ( if "!found!" == "0" (
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:"^\"!find_query!;" echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:"^\"!find_query!;"
call :set_found call :set_found
) )
%print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!" %print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!"
) )
endlocal & set found=%found% endlocal & set found=%found%
@ -135,12 +129,13 @@ exit /b
exit /b exit /b
:changed :changed
%print_debug% :enhance_path "END Env Var - PATH=%path%" %print_debug% :enhance_path "END Env Var - PATH=%path%"
%print_debug% :enhance_path "Env Var %find_query% - found=%found%" %print_debug% :enhance_path "Env Var %find_query% - found=%found%"
exit /b exit /b
exit /b exit /b
:set_found :set_found
if "%ERRORLEVEL%" == "0" ( if "%ERRORLEVEL%" == "0" (
set found=1 set found=1
@ -191,7 +186,7 @@ exit /b
set "position=" set "position="
) )
dir "%add_path%" 2>NUL | findstr -i -e "%find_pathext%" >NUL dir "%add_path%" 2>NUL | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
if "%ERRORLEVEL%" == "0" ( if "%ERRORLEVEL%" == "0" (
set "add_to_path=%add_path%" set "add_to_path=%add_path%"
@ -210,10 +205,10 @@ exit /b
exit /b exit /b
) )
%print_debug% :enhance_path_recursive "Env Var - add_path=%add_to_path%" %print_debug% :enhance_path_recursive "Env Var - add_path=%add_to_path%"
%print_debug% :enhance_path_recursive "Env Var - position=%position%" %print_debug% :enhance_path_recursive "Env Var - position=%position%"
%print_debug% :enhance_path_recursive "Env Var - depth=%depth%" %print_debug% :enhance_path_recursive "Env Var - depth=%depth%"
%print_debug% :enhance_path_recursive "Env Var - max_depth=%max_depth%" %print_debug% :enhance_path_recursive "Env Var - max_depth=%max_depth%"
if %max_depth% gtr %depth% ( if %max_depth% gtr %depth% (
if "%add_to_path%" neq "" ( if "%add_to_path%" neq "" (
@ -228,7 +223,7 @@ exit /b
exit /b exit /b
:set_depth : set_depth
set /a "depth=%depth%+1" set /a "depth=%depth%+1"
exit /b exit /b
@ -238,9 +233,10 @@ exit /b
) )
for /d %%i in ("%add_path%\*") do ( for /d %%i in ("%add_path%\*") do (
%print_debug% :enhance_path_recursive "Env Var BEFORE - depth=%depth%" %print_debug% :enhance_path_recursive "Env Var BEFORE - depth=%depth%"
%print_debug% :enhance_path_recursive "Found Subdirectory - '%%~fi'" %print_debug% :enhance_path_recursive "Found Subdirectory - '%%~fi'"
call :enhance_path_recursive "%%~fi" %depth% %max_depth% %position% call :enhance_path_recursive "%%~fi" %depth% %max_depth% %position%
%print_debug% :enhance_path_recursive "Env Var AFTER- depth=%depth%" %print_debug% :enhance_path_recursive "Env Var AFTER- depth=%depth%"
) )
exit /b exit /b

View File

@ -12,26 +12,26 @@ if "%~1" == "/h" (
exit /b exit /b
:run_profile_d
:::=============================================================================== :::===============================================================================
:::run_profile_d - Run all scripts in the passed directory path :::run_profile_d - Run all scripts in the passed dir path
:::. :::
:::include: :::include:
:::. :::
::: call "lib_profile.cmd" ::: call "lib_profile.cmd"
:::. :::
:::usage: :::usage:
:::. :::
::: %lib_profile% "[dir_path]" ::: %lib_profile% "[dir_path]"
:::. :::
:::required: :::required:
:::. :::
::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat. ::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.
::: Example: "c:\bin" ::: Example: "c:\bin"
:::. :::
::: path <out> Sets the path env variable if required. ::: path <out> Sets the path env variable if required.
:::------------------------------------------------------------------------------- :::-------------------------------------------------------------------------------
:run_profile_d
if not exist "%~1" ( if not exist "%~1" (
mkdir "%~1" mkdir "%~1"
) )
@ -43,3 +43,4 @@ exit /b
) )
popd popd
exit /b exit /b

View File

@ -18,8 +18,7 @@ function readVersion($gitPath) {
} }
function isGitShim($gitPath) { function isGitShim($gitPath) {
# check if there is a shim file - if yes, read the actual executable path # check if there's shim - and if yes follow the path
# See: github.com/ScoopInstaller/Shim
if (Test-Path "${gitPath}\git.shim") { if (Test-Path "${gitPath}\git.shim") {
$shim = (get-content "${gitPath}\git.shim") $shim = (get-content "${gitPath}\git.shim")

12
vendor/sources.json vendored
View File

@ -1,13 +1,13 @@
[ [
{ {
"name": "git-for-windows", "name": "git-for-windows",
"version": "2.49.0.windows.1", "version": "2.41.0.windows.3",
"url": "https://github.com/git-for-windows/git/releases/download/v2.49.0.windows.1/PortableGit-2.49.0-64-bit.7z.exe" "url": "https://github.com/git-for-windows/git/releases/download/v2.41.0.windows.3/PortableGit-2.41.0.3-64-bit.7z.exe"
}, },
{ {
"name": "clink", "name": "clink",
"version": "1.7.14", "version": "1.5.1",
"url": "https://github.com/chrisant996/clink/releases/download/v1.7.14/clink.1.7.14.843933.zip" "url": "https://github.com/chrisant996/clink/releases/download/v1.5.1/clink.1.5.1.1e9e51.zip"
}, },
{ {
"name": "conemu-maximus5", "name": "conemu-maximus5",
@ -16,7 +16,7 @@
}, },
{ {
"name": "clink-completions", "name": "clink-completions",
"version": "0.6.2", "version": "0.4.10",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.2.zip" "url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.4.10.zip"
} }
] ]