# encoding: ascii
# api: powershell
# title: Infoblox Module
# description: I’ve just started to work on a PowerShell module for the Infoblox Trinzic DDI appliance, this is a VERY early release with some functions that can manage DNS-records.
# version: 1.2.1/record
# type: function
# author: DollarUnderscore
# license: CC0
# function: Get-IBResourceRecord
# x-poshcode-id: 5044
# x-archived: 2016-02-21T01:34:59
# x-published: 2016-04-02T20:58:00
#
# I would love some help with developing a proper module for this product which seems to be quite common.
# Do you want to help?
# Go to my blog at:
# http://dollarunderscore.azurewebsites.net/?p=2201
# ...and you will find some information about this module and how to contribute!
# Thanks in advance!
#
function Get-IBResourceRecord
{
<#
.SYNOPSIS
Retrieves resource records from a Infoblox Gridserver
.DESCRIPTION
Specify an attribute to search for, for example hostname and retrieve the object from the Gridserver
.EXAMPLE
Get-InfoBloxRecord -RecordType host -RecordName MyServer -GridServer myinfoblox.mydomain.com -Credential $Credential
.EXAMPLE
Get-InfoBloxRecord -RecordType network -RecordName 1.0.0.0/8 -GridServer myinfoblox.mydomain.com -Credential $Credential -Passthrough
.PARAMETER RecordType
Specify the type of record, for example host or network.
.PARAMETER SearchField
The field where the RecordValue is. Default is "Name".
.PARAMETER RecordValue
The value to search for.
.PARAMETER GridServer
The name of the infoblox appliance.
.PARAMETER Properties
What properties should be included?
.PARAMETER Credential
Add a Powershell credential object (created with for example Get-Credential).
.PARAMETER Passthrough
Includes credentials and gridserver in the object sent down the pipeline so you don't need to add them in the next cmdlet.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True)]
[ValidateSet("A","AAAA","CName","DName","DNSKEY","DS","Host","LBDN","MX","NAPTR","NS","NSEC","NSEC3","NSEC3PARAM","PTR","RRSIG","SRV","TXT")]
[string] $RecordType,
[Parameter(Mandatory=$false)]
$SearchField = 'name',
[Parameter(Mandatory=$True)]
$RecordValue,
[Parameter(Mandatory=$True)]
$GridServer,
[Parameter(Mandatory=$false)]
$Properties,
[switch] $Passthrough,
[Parameter(Mandatory=$True)]
$Credential)
BEGIN { }
PROCESS {
Write-Verbose "Building resource record search query..."
$InfobloxURI = "https://$GridServer/wapi/v1.2.1/record:$($RecordType.ToLower())`?$($SearchField.ToLower())~=$RecordValue"
if ($Properties -ne $null) {
Write-Verbose "Adding return fields/properties..."
$InfobloxURI = $InfobloxURI + "&_return_fields=$(($Properties -join "," -replace " ").ToLower())"
}
Write-Verbose "Initiating webrequest to API..."
$WebRequest = Invoke-WebRequest -Uri $InfobloxURI -Credential $Credential
Write-Verbose "Checking status code..."
if ($WebRequest.StatusCode -eq 200) {
Write-Verbose "Statuscode OK. Converting from Json..."
$RecordObj = $WebRequest.Content | ConvertFrom-Json -ErrorAction Stop
}
else {
Write-Error "Request to Infoblox failed (response code is not 200). See error above for details."
Write-Debug "Request just failed (response not 200 or Json version failed). Please debug."
return
}
Write-Verbose "Looping through returned objects..."
foreach ($Record in $RecordObj) {
$returnObject = $null
$returnObject = $Record
if ($Passthrough -eq $true) {
Write-Verbose "Adding credentials/gridserver to the pipeline..."
$returnObject | Add-Member -Type NoteProperty -Name Credential -Value $Credential
$returnObject | Add-Member -Type NoteProperty -Name GridServer -Value $GridServer
}
Write-Verbose "Sending object to the pipeline..."
Write-Output $returnObject
}
}
END {
Write-Verbose "Finished."
}
}
function Add-IBResourceRecordHost
{
<#
.SYNOPSIS
Add a host record on the Infoblox Gridserver
.DESCRIPTION
This cmdlet creates a host object on the Infoblox Gridserver.
.EXAMPLE
Add-InfoBloxHostRecord -IPv4Address 1.2.3.4 -HostName myserver.mydomain.com -GridServer myinfoblox.mydomain.com -Credential $Credential
.PARAMETER IPv4Address
The IPv4 address for the host record. Allows pipeline input.
.PARAMETER HostName
The hostname for the host record. Allows pipeline input.
.PARAMETER GridServer
The name of the infoblox appliance. Allows pipeline input.
.PARAMETER Credential
Add a Powershell credential object (created with for example Get-Credential). Allows pipeline input.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
$IPv4Address,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[Alias('name')]
$HostName,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[string] $GridServer,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[System.Management.Automation.PSCredential] $Credential)
BEGIN { }
PROCESS {
$InfobloxURI = "https://$GridServer/wapi/v1.2.1/record:host"
$Data = "{`"ipv4addrs`":[{`"ipv4addr`":'$IPv4Address'}],`"name`":'$HostName'}" | ConvertFrom-Json | ConvertTo-Json
$WebReqeust = Invoke-WebRequest -Uri $InfobloxURI -Method Post -Body $Data -ContentType "application/json" -Credential $Credential
if ($WebReqeust.StatusCode -ne 201) {
Write-Error "Request to Infoblox failed for record $HostName!"
return
}
}
END { }
}
function Add-IBResourceRecordCName
{
<#
.SYNOPSIS
Adds a CNAME record on the Infoblox Gridserver
.DESCRIPTION
This cmdlet creates a CName record on the Infoblox Gridserver.
.EXAMPLE
Add-IBResourceRecordCName -IPv4Address 1.2.3.4 -HostName myserver.mydomain.com -GridServer myinfoblox.mydomain.com -Credential $Credential
.PARAMETER IPv4Address
The IPv4 address for the host record. Allows pipeline input.
.PARAMETER HostName
The hostname for the host record. Allows pipeline input.
.PARAMETER GridServer
The name of the infoblox appliance. Allows pipeline input.
.PARAMETER Credential
Add a Powershell credential object (created with for example Get-Credential). Allows pipeline input.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[Alias('name')]
$HostName,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
$Canonical,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[string] $GridServer,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[System.Management.Automation.PSCredential] $Credential)
BEGIN { }
PROCESS {
$InfobloxURI = "https://$GridServer/wapi/v1.2.1/record:cname"
$Data = "{`"name`":'$HostName',`"canonical`":'$Canonical'}" | ConvertFrom-Json | ConvertTo-Json
$WebReqeust = Invoke-WebRequest -Uri $InfobloxURI -Method Post -Body $Data -ContentType "application/json" -Credential $Credential
if ($WebReqeust.StatusCode -ne 201) {
Write-Error "Request to Infoblox failed for record $HostName!"
return
}
}
END { }
}
function Add-IBResourceRecordA
{
<#
.SYNOPSIS
Adds a A record on the Infoblox Gridserver
.DESCRIPTION
This cmdlet creates a CName record on the Infoblox Gridserver.
.EXAMPLE
Add-IBResourceRecordCName -IPv4Address 1.2.3.4 -HostName myserver.mydomain.com -GridServer myinfoblox.mydomain.com -Credential $Credential
.PARAMETER IPv4Address
The IPv4 address for the host record. Allows pipeline input.
.PARAMETER HostName
The hostname for the host record. Allows pipeline input.
.PARAMETER GridServer
The name of the infoblox appliance. Allows pipeline input.
.PARAMETER Credential
Add a Powershell credential object (created with for example Get-Credential). Allows pipeline input.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
$IPv4Address,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[Alias('name')]
$HostName,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[string] $GridServer,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[System.Management.Automation.PSCredential] $Credential)
BEGIN { }
PROCESS {
$InfobloxURI = "https://$GridServer/wapi/v1.2.1/record:a"
$Data = "{`"ipv4addr`":'$IPv4Address',`"name`":'$HostName'}" | ConvertFrom-Json | ConvertTo-Json
$WebReqeust = Invoke-WebRequest -Uri $InfobloxURI -Method Post -Body $Data -ContentType "application/json" -Credential $Credential
if ($WebReqeust.StatusCode -ne 201) {
Write-Error "Request to Infoblox failed for record $HostName!"
return
}
}
END { }
}
function Remove-IBResourceRecord
{
<#
.SYNOPSIS
Removes a host record from the Infoblox Gridserver
.DESCRIPTION
This cmdlet removes a host object from the Infoblox Gridserver.
.EXAMPLE
Get-InfoBloxRecord -RecordType host -RecordName MyHost -GridServer myinfoblox.mydomain.com -Credential $Credential -Passthrough | Remove-InfoBloxRecord
.PARAMETER Reference
The object reference for the host record. Allows pipeline input.
.PARAMETER GridServer
The name of the infoblox appliance. Allows pipeline input.
.PARAMETER Credential
Add a Powershell credential object (created with for example Get-Credential). Allows pipeline input.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[Alias('_ref')]
[string] $Reference,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[string] $GridServer,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[System.Management.Automation.PSCredential] $Credential)
BEGIN { }
PROCESS {
$InfobloxURI = "https://$GridServer/wapi/v1.2.1/$Reference"
$WebReqeust = Invoke-WebRequest -Uri $InfobloxURI -Method Delete -Credential $Credential
if ($WebReqeust.StatusCode -eq 200) {
$RecordObj = $WebReqeust.Content | ConvertFrom-Json
}
else {
Write-Error "Request to Infoblox failed!"
return
}
}
END { }
}
function Set-IBResourceRecord
{
<#
.SYNOPSIS
Changes a host record on the Infoblox Gridserver
.DESCRIPTION
This cmdlet changes a host object on the Infoblox Gridserver.
.EXAMPLE
Set-InfoBloxRecord -Reference Reference -IPv4Address 1.2.3.4 -HostName myhost.mydomain.com -GridServer myinfoblox.mydomain.com -Credential $Credential
.EXAMPLE
Get-InfoBloxRecord -RecordType host -RecordName MyHost -GridServer myinfoblox.mydomain.com -Credential $Credential -Passthrough | Set-InfoBloxRecord -IPv4Address 2.3.4.5
.PARAMETER IPv4Address
The new IPv4 address for the host record.
.PARAMETER HostName
The new HostName for the host record.
.PARAMETER Reference
The object reference for the host record. Allows pipeline input.
.PARAMETER GridServer
The name of the infoblox appliance. Allows pipeline input.
.PARAMETER Credential
Add a Powershell credential object (created with for example Get-Credential). Allows pipeline input.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[Alias('_ref')]
[string] $Reference,
[Parameter(Mandatory=$True)]
[string] $IPv4Address,
[Parameter(Mandatory=$False)]
[string] $HostName,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[string] $GridServer,
[Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[System.Management.Automation.PSCredential] $Credential)
BEGIN { }
PROCESS {
$InfobloxURI = "https://$GridServer/wapi/v1.2.1/$Reference"
$Data = "{`"ipv4addrs`":[{`"ipv4addr`":'$IPv4Address'}] }" | ConvertFrom-Json | ConvertTo-Json
$WebReqeust = Invoke-WebRequest -Uri $InfobloxURI -Method Put -Body $Data -Credential $Credential
if ($WebReqeust.StatusCode -eq 200) {
$RecordObj = $WebReqeust.Content | ConvertFrom-Json
}
else {
Write-Error "Request to Infoblox failed!"
return
}
}
END { }
}
Export-ModuleMember *