Public/General/Block.ps1

<#
.SYNOPSIS
Break the running script if run as an Administrator
 
.DESCRIPTION
Break the running script if run as an Administrator
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-AdminUser {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires non-Admin Rights"

    if ((Get-OSDGather -Property IsAdmin) -eq $true) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if the computer is not a Lenovo
 
.DESCRIPTION
Break the running script if the computer is not a Lenovo
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-ManufacturerNeLenovo {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires a Lenovo computer"
        
    if ((Get-MyComputerManufacturer -Brief) -ne 'Lenovo') {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if Curl.exe is not present on the system
 
.DESCRIPTION
Break the running script if Curl.exe is not present on the system
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-NoCurl {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires curl.exe"
        
    if (-NOT (Test-Path "$env:SystemRoot\System32\curl.exe")) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if internet is not available
 
.DESCRIPTION
Break the running script if internet is not available
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-NoInternet {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires Internet access"
        
    if (-NOT (Test-WebConnection -Uri 'microsoft.com')) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if PowerShell Version is less than 5
 
.DESCRIPTION
Break the running script if PowerShell Version is less than 5
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-PowerShellVersionLt5 {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires PowerShell version 5 or greater"
        
    if ($PSVersionTable.PSVersion.Major -lt 5) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if PowerShell Module is not installed
 
.DESCRIPTION
Break the running script if PowerShell Module is not installed
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-PSModuleNotInstalled {
    [CmdletBinding()]
    param (
        [string]$ModuleName = 'OSD',
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires PowerShell Module $ModuleName to be installed"
        
    if (-not (Get-Module -ListAvailable -Name $ModuleName)) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if run as a Standard User
 
.DESCRIPTION
Break the running script if run as a Standard User
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-StandardUser {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires Admin Rights"

    if ((Get-OSDGather -Property IsAdmin) -eq $false) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if the Windows 10 ReleaseID is less than 1703
 
.DESCRIPTION
Break the running script if the Windows 10 ReleaseID is less than 1703
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-WindowsReleaseIdLt1703 {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires Windows ReleaseId of 1703 or greater"
        
    if ((Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').ReleaseId -lt 1703) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if the Windows Version is not equal to 10
 
.DESCRIPTION
Break the running script if the Windows Version is not equal to 10
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-WindowsVersionNe10 {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires Windows with a Major version 10 or greater"
        
    if ([System.Environment]::OSVersion.Version.Major -ne 10) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if running in Windows (not WinPE)
 
.DESCRIPTION
Break the running script if running in Windows (not WinPE)
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-WinOS {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction requires WinPE"
        
    if (-NOT (Get-OSDGather -Property IsWinPE)) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}
<#
.SYNOPSIS
Break the running script if run in WinPE (not Windows)
 
.DESCRIPTION
Break the running script if run in WinPE (not Windows)
 
.PARAMETER Warn
Warning Message without a Break
 
.PARAMETER Pause
Adds a 'Press Enter to Continue'
 
.LINK
https://osd.osdeploy.com/module/functions/block
#>

function Block-WinPE {
    [CmdletBinding()]
    param (
        [switch]$Warn,
        [switch]$Pause
    )
    $CallingFunction = (Get-PSCallStack)[1].InvocationInfo.Line
    $Message = "[$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))] $CallingFunction cannot be run from WinPE"
        
    if ((Get-OSDGather -Property IsWinPE)) {
        Write-Warning $Message
        if ($PSBoundParameters.ContainsKey('Pause')) {
            [void]('Press Enter to Continue')
        }
        if (-NOT ($PSBoundParameters.ContainsKey('Warn'))) {
            Break
        }
    }
}