PTR rekord hozzáadása Powershell scripttel

Adva volt egy windowsos DNS Serveren egy zóna, amihez nem lett létrehozva a címkeresési zóna (reverse lookup zone). A zónát megcsináltam gyorsan, de volt már vagy 20 A rekord, amihez létre kellett volna hozni a PTR rekordokat. Nem akartam 15 perc alatt végigkattintgatni, inkább 2 órát elvacakoltam, hogy megírjam a Powershell scriptet, ami megcsinálja:)

Mi is kell a feladat megoldásához

  • dnscmd: Windows Server 2003 Support Tools része, parancssori felület a DNS kiszolgáló adminisztrálásához.
  • PowerGUI: ez pedig csak hasznos segítség a script elkészítéséhez, van benne debugger.

Először ki kell exportálni a zónát a dnscmd segítségével

dnscmd /ZoneExport zonename dns.txt

Ez a \Windows\system32\dns könyvtárba menti el a dns.txt fájlt.

Mivel ez AD zóna is volt, egy csomó sor van benne, ami nem A rekord, pl. _gc._tcp SRV rekord és hasonló. Mivel viszonylag kevés ilyen volt, ezeket kézzel kitöröltem, de erre is lehetne +2 sort berakni a scriptbe.

Utána már elvileg csak ilyen sorok maradnak:

serverName                 A	192.168.1.3

Hah, ezt könnyű is lesz feldolgozni, gyorsan TAB mentén szétvágjuk, és már meg is vagyunk! Persze:) Sikerült úgy megírni a dnscmd-t, hogy az A előtt szóközök vannak, éppen annyi, hogy szépen az A betűk egy oszlopban legyenek, utána viszont egy darab TAB. No, de azért így se NP teljes problémát kell megoldani:)

# Adds PTR records for hosts in Microsoft DNS Server
# uses the dnscmd.exe tool from Windows Server 2003 Support Tools

# input: a txt file with the hosts and IPs exported by dnscmd using:
#    - Execute: dnscmd /ZoneExport zonename dns.txt
#    - Remove the lines which are other than A records 
#    - The structure of the file is like
#        hostname[arbitrary number of spaces]A[TAB character]IPAddress

$DNSCMD = "c:\tools\dnscmd.exe"

$FORWARD_ZONE_NAME = ".mydomain.local"
$REVERSE_ZONE_NAME = "168.192.in-addr.arpa"

$dnsrecords = Get-Content "dns.txt"

foreach ($line in $dnsrecords) {
    $terms = $line.Split(" ")
    $hostName = $terms[0]
    
    # split the last part at TABs
    $t = ($terms[ $terms.Length - 1 ]).Split("`t")
     
    $ip = $t[ $t.Length - 1 ]
    $ipOctets = $ip.Split('.')  
    
    $params = " /RecordAdd " + $REVERSE_ZONE_NAME + " " + $ipOctets[3] + "." + $ipOctets[2] + " PTR " + $hostName + $FORWARD_HOST_NAME 
    
    [diagnostics.process]::start($DNSCMD, $params)
}

Egyetlen egy dologgal vacakoltam sokat, sehogy se akarta a TAB-ot megtalálni a Split. Próbáltam \t, 009, unicode kód alapján is, sehogyse. Végül a [char 9] működött. Most így utólag, lehet, hogy az kellett volna, hogy a vágandó változót string-re castolni.

Biztos lehetett volna egyszerűbben, de így legalább gyakorloltam kicsit a Powershellt:-)

Reklámok
Kategória: Tech | Közvetlen link a könyvjelzőhöz.

2 hozzászólás a(z) PTR rekord hozzáadása Powershell scripttel bejegyzéshez

  1. Marton szerint:

    A PowerShellben az escape karakter a ` (backtick). A problémádban a `t lett volna a barátod. 🙂

  2. Zoltan szerint:

    Áá, köszi! Frissítettem ennek megfelelően a bejegyzést. Ezt megjegyzem legközelebbre:)

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s