-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwinDECK_Module_CreateUSBStick.ps1
More file actions
144 lines (120 loc) · 3.75 KB
/
winDECK_Module_CreateUSBStick.ps1
File metadata and controls
144 lines (120 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# winDECK_Module_CreateUSBStick.ps1
#
# Create USB Stick
#
# v1.0
#
# 29.08.2017
#
# (C) Stefan Kubsch
#
# https://github.com/StefanKubsch/winDECK
#
Set-StrictMode -Version "Latest"
$localScriptRoot = $PSScriptRoot
#region Include Functions Library
. "$localScriptRoot\Resources\Libs\General.ps1"
. "$localScriptRoot\Resources\Libs\CUS.ps1"
#endregion
#region Initialize environment
ShowSplashScreen ($CUSSplashScreen)
Header_InitializeEnvironment
CheckForPSVersion ($CUSMinPSVersion)
CheckForAdminRights
CheckForOSVersion(10)
#endregion
#region USB handling
# Check for useable USB sticks
Write-Host ""
Write-Host -BackgroundColor Red "Searching for useable USB sticks..."
$Sticks = Get-Disk | Where-Object BusType -eq "USB"
ForEach ($Stick in $Sticks)
{
$Size = [Math]::Floor($Stick.AllocatedSize/1GB)
If (($Size -gt $NeededStickSize) -and ($Size -lt 128))
{
$AvailableSticks += $Stick
}
}
$AvailableSticks | Sort-Object Number | Format-Table -AutoSize
If (-Not($AvailableSticks))
{
Write-Host -ForegroundColor Red "No useable sticks were found. Exiting."
WaitForKey
Exit
}
# Select USB stick
Write-Host -BackgroundColor Red "Please select USB stick for preparation..."
Write-Host ""
$Flag = $False
While (-Not($Flag))
{
$ChosenNumber = Read-Host "Which stick do you want to use (choose Drivenumber)"
ForEach ($Stick in $AvailableSticks)
{
If ($ChosenNumber -eq $Stick.Number)
{
$Flag = $True
$ChosenStick = $Stick
}
}
If (-Not($Flag))
{
Write-Host -ForegroundColor Red "Invalid input. Please choose again!"
}
}
$Flag = $False
While (-Not($Flag))
{
Write-Host "Do you really want to use stick " -NoNewline
Write-Host -ForegroundColor Magenta $ChosenStick.FriendlyName -NoNewline
$Input = Read-Host " (y/n)"
If ($Input.ToUpper() -eq "Y")
{
$Flag = $True
} ElseIf ($Input.ToUpper() -eq "N")
{
Write-Host -ForegroundColor Red "Operation aborted. Exiting."
WaitForKey
Exit
} Else
{
Write-Host -ForegroundColor Red "Invalid input. Please choose again!"
}
}
# Find a free driveletter
$DriveLetter = [int][char]'C'
While ((Get-PSDrive -PSProvider FileSystem).Name -Contains [char]$DriveLetter)
{
$DriveLetter++
}
$DriveLetter = [char]$DriveLetter
# Format USB stick
Write-Host ""
Write-Host -BackgroundColor Red "Prepare chosen USB stick..."
Write-Host ""
Write-Host "Formatting USB stick " -NoNewline
Write-Host -ForegroundColor Magenta $ChosenStick.FriendlyName -NoNewline
Write-Host "..." -NoNewline
Stop-Service -Name ShellHWDetection
Get-Disk $ChosenStick.Number | Clear-Disk -RemoveData -Confirm:$False -PassThru | New-Partition -UseMaximumSize -DriveLetter $Driveletter -IsActive | Format-Volume -FileSystem NTFS -NewFileSystemLabel winDECK -Confirm:$False | Out-Null
Start-Service -Name ShellHWDetection
Write-Host "Done."
# Copy files to stick
Write-Host ""
$CopyToPath = $DriveLetter+":"
Write-Host "Copy needed files to USB stick and write-protect them..." -NoNewline
New-Item -Path $CopyToPath\Resources\Libs -ItemType "Directory" | Out-Null
Copy-Item $localScriptRoot\Resources\Libs\General.ps1 $CopyToPath\Resources\Libs | Out-Null
Set-ItemProperty -Path $CopyToPath\Resources\Libs\General.ps1 -Name IsReadOnly -Value $True
Copy-Item $localScriptRoot\Resources\Libs\CDM.ps1 $CopyToPath\Resources\Libs | Out-Null
Set-ItemProperty -Path $CopyToPath\Resources\Libs\CDM.ps1 -Name IsReadOnly -Value $True
Copy-Item $localScriptRoot\RUN_winDECK_Step2_CollectData.cmd $CopyToPath\ | Out-Null
Set-ItemProperty -Path $CopyToPath\RUN_winDECK_Step2_CollectData.cmd -Name IsReadOnly -Value $True
Copy-Item $localScriptRoot\winDECK_Module_CollectData.ps1 $CopyToPath\ | Out-Null
Set-ItemProperty -Path $CopyToPath\winDECK_Module_CollectData.ps1 -Name IsReadOnly -Value $True
Write-Host "Done."
#endregion
#region Exit winDECK
Header_PreparingExit
#endregion