############################################################## ## Change Log # ## 1.0 Initial release # ## 1.1 Added logic for resolved IP to be displayed on screen.# ############################################################## Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # Create form controls $form = New-Object System.Windows.Forms.Form $form.Text = "Haystack" $form.ClientSize = New-Object System.Drawing.Size(400, 270) $dnsNameLabel = New-Object System.Windows.Forms.Label $dnsNameLabel.Text = "A Record:" $dnsNameLabel.Location = New-Object System.Drawing.Point(10, 20) $dnsNameLabel.AutoSize = $true $dnsNameTextbox = New-Object System.Windows.Forms.TextBox $dnsNameTextbox.Location = New-Object System.Drawing.Point(120, 20) $dnsNameTextbox.Size = New-Object System.Drawing.Size(250, 20) $zoneLabel = New-Object System.Windows.Forms.Label $zoneLabel.Text = "DNS Zone:" $zoneLabel.Location = New-Object System.Drawing.Point(10, 50) $zoneLabel.AutoSize = $true $zoneTextbox = New-Object System.Windows.Forms.TextBox $zoneTextbox.Location = New-Object System.Drawing.Point(120, 50) $zoneTextbox.Size = New-Object System.Drawing.Size(250, 20) $ipLabel = New-Object System.Windows.Forms.Label $ipLabel.Text = "IP Address:" $ipLabel.Location = New-Object System.Drawing.Point(10, 80) $ipLabel.Size = New-Object System.Drawing.Size(62, 10) $form.Controls.Add($ipLabel) $ipTextBox = New-Object System.Windows.Forms.TextBox $ipTextBox.Location = New-Object System.Drawing.Point(10, 100) $ipTextBox.ReadOnly = $true $form.Controls.Add($ipTextBox) $createButton = New-Object System.Windows.Forms.Button $createButton.Location = New-Object System.Drawing.Point(120, 80) $createButton.Size = New-Object System.Drawing.Size(150, 23) $createButton.Text = "Create Zone and A Record" $createButton.Add_Click({ # Combine fields and ping DNS name $combined = $dnsNameTextbox.Text + "." + $zoneTextbox.Text $pingResult = Test-Connection -ComputerName $combined -Count 1 -Quiet # Get IP address using Resolve-DnsName $ipAddress = "" $dnsResult = Resolve-DnsName -Name $combined -Type A -ErrorAction SilentlyContinue if ($dnsResult) { $ipAddress = $dnsResult.IPAddress } # If ping failed and Resolve-DnsName didn't return an IP address, show error message and exit if (!$pingResult -and !$dnsResult) { [System.Windows.Forms.MessageBox]::Show("Could not resolve DNS name.") return } # Create DNS zone and A record $zoneName = $zoneTextbox.Text $aRecord = $dnsNameTextbox.Text if ($ipAddress) { $aRecord = $ipAddress } Add-DnsServerPrimaryZone -Name $combined -ZoneFile $zoneName Add-DnsServerResourceRecordA -Name $combined -ZoneName $combined -IPv4Address $aRecord [System.Windows.Forms.MessageBox]::Show("DNS zone and A record created successfully.") }) $ipTextBox.Text = $ipAddress # Add controls to form $form.Controls.Add($dnsNameLabel) $form.Controls.Add($dnsNameTextbox) $form.Controls.Add($zoneLabel) $form.Controls.Add($zoneTextbox) $form.Controls.Add($createButton) $form.Controls.Add($pictureBox) $form.Controls.Add($ipLabel) $form.Controls.Add($ipTextBox) # Show the form $form.ShowDialog() | Out-Null