Public/GlobalInitScripts.ps1

Function Add-DatabricksGlobalInitScript {
  <#
            .SYNOPSIS
            Create a new global init script in this workspace.
            .DESCRIPTION
            Create a new global init script in this workspace.
            Official API Documentation: https://docs.databricks.com/dev-tools/api/latest/global-init-scripts.html#operation/create-script
            .PARAMETER Name
            The name of the script.
      .PARAMETER Script
            The Base64-encoded content of the script. To upload a plain text script please use -AsPlainText
      .PARAMETER AsPlainText
            If specified, -Script is interpreted as plain text and encoded to Base64 internally before the upload.
      .PARAMETER Position
            The position of a global init script, where 0 represents the first global init script to run, 1 is the second global init script to run, and so on.
      If you omit the position for a new global init script, it gets the last position. It runs after all current global init scripts. Setting any value greater than the position of the last script is equivalent to the last position. For example, suppose there are three existing scripts with positions 0, 1 and 2. Any position value of 3 or greater puts the script in the last position (3) If an explicit position value conflicts with an existing script, your request succeeds. The original script at that position and all later scripts have their position incremented by 1.
      .PARAMETER Enabled
            Specifies whether the script is enabled. The script runs only if enabled.
            .EXAMPLE
            Add-DatabricksGlobalInitScript -Name "MyScript" -Script "echo Hello World" -AsPlainText -Position 1 -Enabled $true
    #>

  [CmdletBinding()]
  param
  (
    [Parameter(Mandatory = $true, Position = 1, ValueFromPipelineByPropertyName = $true)] [Alias("script_name")] [string] $Name,
    [Parameter(Mandatory = $true, Position = 2, ValueFromPipelineByPropertyName = $true)] [string] $Script,
    [Parameter(Mandatory = $false, Position = 3, ValueFromPipelineByPropertyName = $false)] [switch] $AsPlainText,
    [Parameter(Mandatory = $false, Position = 4, ValueFromPipelineByPropertyName = $true)] [int64] $Position,
    [Parameter(Mandatory = $false, Position = 5, ValueFromPipelineByPropertyName = $true)] [boolean] $Enabled = $false
  )
    
  begin {
    $requestMethod = "POST"
    $apiEndpoint = "/2.0/global-init-scripts"
  }
    
  process {
    Write-Verbose "Building Body/Parameters for final API call ..."

    if($AsPlainText) {
      $Script = $Script | ConvertTo-Base64 -Encoding ([Text.Encoding]::UTF8)
    }
    #Set parameters
    $parameters = @{
      name = $Name
      script = $Script
      position = $Position
      enabled = $Enabled
    }

    $result = Invoke-DatabricksApiRequest -Method $requestMethod -EndPoint $apiEndpoint -Body $parameters

    return $result
  }
}

Function Get-DatabricksGlobalInitScript {
  <#
      .SYNOPSIS
      Get a list of all global init scripts for this workspace. This returns all properties for each script but not the script contents. To retrieve the contents of a script, use the get a global init script operation.
      .DESCRIPTION
      Get a list of all global init scripts for this workspace. This returns all properties for each script but not the script contents. To retrieve the contents of a script, use the get a global init script operation.
      Official API Documentation: https://docs.databricks.com/dev-tools/api/latest/global-init-scripts.html#operation/get-scripts
      .PARAMETER ScriptID
      (Optional) The ID of a single script to return. If not specified, all scripts are returned
      .EXAMPLE
      Get-DatabricksGlobalInitScript
      .EXAMPLE
      Get-DatabricksGlobalInitScript -ScriptID 63D1236F6D2950C8
  #>

  [CmdletBinding()]
  param
  (
    [Parameter(Mandatory = $false, Position = 1, ValueFromPipelineByPropertyName = $true)] [Alias("script_id", "id")] [string] $ScriptID
  )
  begin {
    $requestMethod = "GET"
    $apiEndpoint = "/2.0/global-init-scripts"
  }
    
  process {
    Write-Verbose "Building Body/Parameters for final API call ..."

    if($ScriptID)
    {
      $apiEndpoint += "/$ScriptID"
    }
    #Set parameters
    $parameters = @{
    }

    $result = Invoke-DatabricksApiRequest -Method $requestMethod -EndPoint $apiEndpoint -Body $parameters

    if($ScriptID)
    {
      return $result
    }
    else {
      return $result.scripts
    }
  }
}

Function Remove-DatabricksGlobalInitScript {
  <#
      .SYNOPSIS
      Delete a global init script.
      .DESCRIPTION
      Delete a global init script.
      Official API Documentation: https://docs.databricks.com/dev-tools/api/latest/global-init-scripts.html#operation/delete-script
      .PARAMETER ScriptID
      The ID of the global init script to remove.
      .EXAMPLE
      Remove-DatabricksGlobalInitScript -ScriptID 63D1236F6D2950C8
  #>

  [CmdletBinding()]
  param
  (
    [Parameter(Mandatory = $true, Position = 1, ValueFromPipelineByPropertyName = $true)] [Alias("script_id", "id")] [string] $ScriptID
  )
  
  begin {
    $requestMethod = "DELETE"
    $apiEndpoint = "/2.0/global-init-scripts"
  }
    
  process {
    Write-Verbose "Building Body/Parameters for final API call ..."

    $apiEndpoint += "/$ScriptID"

    #Set parameters
    $parameters = @{
    }
        
    $result = Invoke-DatabricksApiRequest -Method $requestMethod -EndPoint $apiEndpoint

    return $result
  }
}


Function Update-DatabricksGlobalInitScript {
  <#
            .SYNOPSIS
            Update a global init script, specifying only the fields to change. All fields are optional. Unspecified fields retain their current value.
            .DESCRIPTION
            Update a global init script, specifying only the fields to change. All fields are optional. Unspecified fields retain their current value.
            Official API Documentation: https://docs.databricks.com/dev-tools/api/latest/global-init-scripts.html#operation/update-script
      .PARAMETER ScriptID
      The ID of the global init script to update.
            .PARAMETER Name
            The name of the script.
      .PARAMETER Script
            The Base64-encoded content of the script. To upload a plain text script please use -AsPlainText
      .PARAMETER AsPlainText
            If specified, -Script is interpreted as plain text and encoded to Base64 internally before the upload.
      .PARAMETER Position
            The position of a global init script, where 0 represents the first global init script to run, 1 is the second global init script to run, and so on.
      If you omit the position for a new global init script, it gets the last position. It runs after all current global init scripts. Setting any value greater than the position of the last script is equivalent to the last position. For example, suppose there are three existing scripts with positions 0, 1 and 2. Any position value of 3 or greater puts the script in the last position (3) If an explicit position value conflicts with an existing script, your request succeeds. The original script at that position and all later scripts have their position incremented by 1.
      .PARAMETER Enabled
            Specifies whether the script is enabled. The script runs only if enabled.
            .EXAMPLE
            Update-DatabricksGlobalInitScript -ScriptID 63D1236F6D2950C8 -Name "MyNewScript" -Script "echo Hello New World " -AsPlainText -Position 2 -Enabled $false
    #>

  [CmdletBinding()]
  param
  (
    [Parameter(Mandatory = $true, Position = 1, ValueFromPipelineByPropertyName = $true)] [Alias("script_id", "id")] [string] $ScriptID,
    [Parameter(Mandatory = $false, Position = 1, ValueFromPipelineByPropertyName = $true)] [Alias("script_name")] [string] $Name,
    [Parameter(Mandatory = $false, Position = 2, ValueFromPipelineByPropertyName = $true)] [string] $Script,
    [Parameter(Mandatory = $false, Position = 3, ValueFromPipelineByPropertyName = $false)] [switch] $AsPlainText,
    [Parameter(Mandatory = $false, Position = 4, ValueFromPipelineByPropertyName = $true)] [int64] $Position,
    [Parameter(Mandatory = $false, Position = 5, ValueFromPipelineByPropertyName = $true)] [boolean] $Enabled = $false
  )
    
  begin {
    $requestMethod = "PATCH"
    $apiEndpoint = "/2.0/global-init-scripts"
  }
    
  process {
    Write-Verbose "Building Body/Parameters for final API call ..."

    $apiEndpoint += "/$ScriptID"

    if($AsPlainText) {
      $Script = $Script | ConvertTo-Base64 -Encoding ([Text.Encoding]::UTF8)
    }
    #Set parameters
    $parameters = @{
      name = $Name
      script = $Script
      position = $Position
      enabled = $Enabled
    }

    $result = Invoke-DatabricksApiRequest -Method $requestMethod -EndPoint $apiEndpoint -Body $parameters

    return $result
  }
}