1 (изменено: inock, 2020-11-19 18:15:02)

Тема: VBS: Добавить запись в DNS

Граждане, помогите написать код, добавляющий A-запись в днс?
Интернет облазил, нормальных примеров на VBS нет, только на PS.

Пока у меня так. Что делать дальше - никак не соображу.

+ открыть спойлер

strHostName = "test"
strZoneName = "ats.teplo.local"
strIP = "192.168.0.5"
strServer = "bte-dc-01"
strNameSpace = "root\microsoftDNS"

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer (strServer, strNameSpace)
Set objDNS = objService.Get("MicrosoftDNS_ResourceRecord")
Set objMethod = objDNS.Methods_("CreateInstanceFromTextRepresentation")

'wscript.quit

Set ObjInParam = objMethod.inParameters.SpawnInstance_()
ObjInParam.TextRepresentation = strHostName & "." & strZoneName & ". IN A " & strIP
ObjInParam.DnsServerName = strServer
ObjInParam.ContainerName = strZoneName

wscript.echo ObjInParam.DnsServerName
wscript.echo ObjInParam.ContainerName
wscript.echo ObjInParam.TextRepresentation

Set ObjRR = objDNS.ExecMethod_("CreateInstanceFromTextRepresentation", ObjInParam)

Что имеем на выходе:

bte-dc-01
ats.teplo.local
test.ats.teplo.local. IN A 192.168.0.5
C:\TEMP\ats\test.vbs(23, 1) SWbemObjectEx: Generic failure

2 (изменено: inock, 2020-11-19 18:18:53)

Re: VBS: Добавить запись в DNS

Думаю, дело все-таки не в коде...

Вот второй вариант, но метод так же не выполняется

+ открыть спойлер

strHostName = "test"
strZoneName = "ats.teplo.local"
strIP = "192.168.0.5"
strServer = "bte-dc-01"

'Set objDNS = GetObject("winMgmts:root\MicrosoftDNS")
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objDNS = objLocator.ConnectServer (strServer, "root\MicrosoftDNS")
Set objRR = objDNS.Get("MicrosoftDNS_ResourceRecord")
Set objDNSServer = objDNS.Get("MicrosoftDNS_Server.Name="".""")


Dim strNull
strFullHost = strHostName & "." & strZoneName & ". IN A " & strIP
wscript.echo strFullHost
strNull = objRR.CreateInstanceFromTextRepresentation( _
                  objDNSServer.Name, _
                  strZoneName, _
                  strFullHost, _
                  objOutParam)

Set objRR2 = objDNS.Get(objOutParam)
WScript.Echo "Created Record: " & objRR2.TextRepresentation

C:\TEMP\ats>cscript test__.vbs
test.ats.teplo.local. IN A 192.168.0.5
C:\TEMP\ats\test__.vbs(16, 1) SWbemObjectEx: Generic failure

3 (изменено: inock, 2020-11-19 18:25:01)

Re: VBS: Добавить запись в DNS

Powershell здесь не в тему, но тоже не работает (

+ открыть спойлер

# Блок переменных
# $DNSServer - NetBIOS имя сервера DNS
# $DNSFZone - DNS зона прямого просмотра
# $DataFile - Путь к файлу CSV с входными данными
#
$DNSServer = "bte-dc-01"
$DNSFZone = "ats.teplo.local"
$DataFile = "C:\TEMP\ats\Create-A-Records.csv"
#
# Подключение к удалённому экземпляру WMI
# и обработка входных данных файла
#
$DNSRR = [WmiClass]"\\$DNSServer\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
$ConvFile = $DataFile + "_unicode"
Get-Content $DataFile | Set-Content $ConvFile -Encoding Unicode
Import-CSV $ConvFile -Delimiter ";" | ForEach-Object {
$FQDN = $_.HostName + "." + $DNSFZone
$IP = $_.HostIP
$TextA = "$FQDN IN A $IP"
echo  $TextA
echo $DNSFZone
echo $DNSServer
$DNSRR.CreateInstanceFromTextRepresentation($DNSServer,$DNSFZone,$TextA)
}
Remove-Item $ConvFile


C:\TEMP\ats>powershell -F DNS-Create-A-Records-from-File.ps1
1063.ats.teplo.local IN A 10.32.99.166
ats.teplo.local
bte-dc-01
Исключение при вызове "CreateInstanceFromTextRepresentation" : "Generic failure
 "
C:\TEMP\ats\DNS-Create-A-Records-from-File.ps1:23 знак:44
+ $DNSRR.CreateInstanceFromTextRepresentation <<<< ($DNSServer,$DNSFZone,$TextA
)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WMIMethodException

При этом, с оснастки mmc, все работает нормально, без проблем.

4

Re: VBS: Добавить запись в DNS

inock, а привилегий достаточно? Не пробовали задавать привилегии для Wbem в скрипте?

5 (изменено: inock, 2020-11-20 16:15:24)

Re: VBS: Добавить запись в DNS

Дело было не в бобине. Заработало.

6

Re: VBS: Добавить запись в DNS

inock, колитесь, коллега .