Public/Use-WinPEContent.ps1

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
function Use-WinPEContent {
    [CmdletBinding()]
    param (
        [ValidateSet('*','Drivers','Files','Modules','Registry','Scripts')]
        [string[]]$Content = '*'
    )
    #=======================================================================
    # Blocks
    #=======================================================================
    Block-WinOS
    #=======================================================================
    # PSDrive
    #=======================================================================
    $GetPSDrive = Get-PSDrive -PSProvider 'FileSystem'

    foreach ($Item in $Content) {
        #=======================================================================
        # Drivers
        #=======================================================================
        if ($Item -eq '*' -or $Item -eq 'Drivers') {
            foreach ($PSDrive in $GetPSDrive) {
                $ContentPath = @("$($PSDrive.Root)Content\Drivers","$($PSDrive.Root)WinPE\Drivers")
                foreach ($ContentItem in $ContentPath) {
                    if (Test-Path "$ContentItem") {
                        Get-ChildItem "$ContentItem" *.inf -Recurse | `
                        ForEach-Object {
                            Write-Verbose "Importing Driver $($_.FullName)"
                            PNPUtil.exe /add-driver "$($_.FullName)" /install
                        }
                    }
                }
            }
        }
        #=======================================================================
        # Files
        #=======================================================================
        if ($Item -eq '*' -or $Item -eq 'Files') {
            foreach ($PSDrive in $GetPSDrive) {
                $ContentPath = @("$($PSDrive.Root)Content\Files","$($PSDrive.Root)WinPE\Files")
                foreach ($ContentItem in $ContentPath) {
                    if (Test-Path "$ContentItem") {
                        Write-Verbose "Copying Files at $ContentItem to X:\"
                        robocopy "$ContentItem" X:\ *.* /e /ndl /b
                    }
                }
            }
        }
        #=======================================================================
        # Modules
        #=======================================================================
        if ($Item -eq '*' -or $Item -eq 'Modules') {
            foreach ($PSDrive in $GetPSDrive) {
                $ContentPath = @("$($PSDrive.Root)Content\Modules","$($PSDrive.Root)WinPE\Modules")
                foreach ($ContentItem in $ContentPath) {
                    if (Test-Path "$ContentItem") {
                        Get-ChildItem "$ContentItem" | `
                        Where-Object {$_.PSIsContainer} | `
                        ForEach-Object {
                            Write-Verbose "Copying Module at $($_.FullName) to X:\Program Files\WindowsPowerShell\Modules"
                            Copy-Item -Path "$($_.FullName)" -Destination "X:\Program Files\WindowsPowerShell\Modules" -Recurse -Force -ErrorAction SilentlyContinue
                            Import-Module -Name "$($_.Name)" -Force -ErrorAction SilentlyContinue
                        }
                    }
                }
            }
        }
        #=======================================================================
        # Registry
        #=======================================================================
        if ($Item -eq '*' -or $Item -eq 'Registry') {
            foreach ($PSDrive in $GetPSDrive) {
                $ContentPath = @("$($PSDrive.Root)Content\Registry","$($PSDrive.Root)WinPE\Registry")
                foreach ($ContentItem in $ContentPath) {
                    if (Test-Path "$ContentItem") {
                        Get-ChildItem "$ContentItem" *.reg -Recurse | `
                        ForEach-Object {
                            Write-Verbose "Importing Registry File $($_.FullName)"
                            reg import "$($_.FullName)"
                        }
                    }
                }
            }
        }
        #=======================================================================
        # Scripts
        #=======================================================================
        if ($Item -eq '*' -or $Item -eq 'Scripts') {
            foreach ($PSDrive in $GetPSDrive) {
                $ContentPath = @("$($PSDrive.Root)Content\Scripts","$($PSDrive.Root)WinPE\Scripts")
                foreach ($ContentItem in $ContentPath) {
                    if (Test-Path "$ContentItem") {
                        Get-ChildItem "$ContentItem" *.ps1 -Recurse | `
                        ForEach-Object {
                            Write-Verbose "Executing PowerShell Script $($_.FullName)"
                            & "$($_.FullName)" -ErrorAction SilentlyContinue
                        }
                    }
                }
            }
        }
    }
}