# Block

Block functions are used to take the place of different stops that I place in my scripts

![](https://3420392058-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpnxLqvh8u2fEz86kIM%2F-MWUwAhBN7XK7NIfs6vs%2F-MWV-zlxlJEMglCBVUZI%2Fimage.png?alt=media\&token=1265a405-22e6-40c7-a87c-bafeb264c152)

## Example

For example, I have a function that needs the following requirements

* Runs in Full OS, not WinPE
* Requires Admin Rights
* Requires Curl.exe

In my code,  I' would do something like this

```
    #=======================================================================
    #	Require WinOS
    #=======================================================================
    if ((Get-OSDGather -Property IsWinPE)) {
        Write-Warning "$($MyInvocation.MyCommand) cannot be run from WinPE"
        Break
    }
    #=======================================================================
    #   Require Admin Rights
    #=======================================================================
    if ((Get-OSDGather -Property IsAdmin) -eq $false) {
        Write-Warning "$($MyInvocation.MyCommand) requires Admin Rights ELEVATED"
        Break
    }
    #=======================================================================
    #   Require cURL
    #=======================================================================
    if (-NOT (Test-Path "$env:SystemRoot\System32\curl.exe")) {
        Write-Warning "$($MyInvocation.MyCommand) could not find $env:SystemRoot\System32\curl.exe"
        Write-Warning "Get a newer Windows version!"
        Break
    }
    #=======================================================================
```

By taking these Blocks into separate functions, I can easily add this to my PowerShell script and greatly simplify things as well as ensuring consistency

```
Import-Module OSD
Block-WinPE
Block-StandardUser
Block-NoCurl
```

## Real World Example

In the real world, I have a function that has these blocks in place

![](https://3420392058-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpnxLqvh8u2fEz86kIM%2F-MWUwAhBN7XK7NIfs6vs%2F-MWUzKFseiHD-lEbN9wq%2Fimage.png?alt=media\&token=5845a97a-4b06-4298-b9c1-b40f5c3c446e)

And when running the function in PowerShell as a Standard User, I receive the following:

![](https://3420392058-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpnxLqvh8u2fEz86kIM%2F-MWUwAhBN7XK7NIfs6vs%2F-MWUz0zcxoXrKPvvw_nf%2Fimage.png?alt=media\&token=1de3a13a-716c-4bcd-ad3e-fb05879cec95)

## The Code

This is what the code of a Block will do.  By default, a Warning with a Timestamp and calling Function will be displayed, followed by a Break.  These can be adjusted with two Parameters

#### -Warn

Provides a Warning without a Break

#### -Pause

Adds a Press Any Key to continue

![](https://3420392058-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpnxLqvh8u2fEz86kIM%2F-MWUwAhBN7XK7NIfs6vs%2F-MWV-I8hSj2gqzPjGFXF%2Fimage.png?alt=media\&token=f8d98f9e-65c4-40bf-b589-b7877e2c3288)
