我需要使用powershell修改2008域上的DNS记录

我需要使用powershell修改2008域上的DNS记录,powershell,dns,wmi,Powershell,Dns,Wmi,BRIVWTDC2是我的DC $rec = [WmiClass]"\\BRIVWTDC2\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord" $rec | get-member -membertype method 给我: TypeName: System.Management.ManagementClass#ROOT\MicrosoftDNS\MicrosoftDNS_ResourceRecord Name

BRIVWTDC2是我的DC

$rec = [WmiClass]"\\BRIVWTDC2\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
$rec | get-member -membertype method
给我:

   TypeName: System.Management.ManagementClass#ROOT\MicrosoftDNS\MicrosoftDNS_ResourceRecord

Name                                 MemberType Definition
----                                 ---------- ----------
CreateInstanceFromTextRepresentation Method     System.Management.ManagementBaseObject CreateInstanceFromTextRepresentation(System.String DnsServe...
GetObjectByTextRepresentation        Method     System.Management.ManagementBaseObject GetObjectByTextRepresentation(System.String DnsServerName, ...
PS C:\Windows\system32> $rec.CreateInstanceFromTextRepresentation


MemberType          : Method
OverloadDefinitions : {System.Management.ManagementBaseObject CreateInstanceFromTextRepresentation(System.String DnsServerName, System.String Contain
                      erName, System.String TextRepresentation)}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : System.Management.ManagementBaseObject CreateInstanceFromTextRepresentation(System.String DnsServerName, System.String Containe
                      rName, System.String TextRepresentation)
Name                : CreateInstanceFromTextRepresentation
IsInstance          : True

给我:

   TypeName: System.Management.ManagementClass#ROOT\MicrosoftDNS\MicrosoftDNS_ResourceRecord

Name                                 MemberType Definition
----                                 ---------- ----------
CreateInstanceFromTextRepresentation Method     System.Management.ManagementBaseObject CreateInstanceFromTextRepresentation(System.String DnsServe...
GetObjectByTextRepresentation        Method     System.Management.ManagementBaseObject GetObjectByTextRepresentation(System.String DnsServerName, ...
PS C:\Windows\system32> $rec.CreateInstanceFromTextRepresentation


MemberType          : Method
OverloadDefinitions : {System.Management.ManagementBaseObject CreateInstanceFromTextRepresentation(System.String DnsServerName, System.String Contain
                      erName, System.String TextRepresentation)}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : System.Management.ManagementBaseObject CreateInstanceFromTextRepresentation(System.String DnsServerName, System.String Containe
                      rName, System.String TextRepresentation)
Name                : CreateInstanceFromTextRepresentation
IsInstance          : True
那为什么我不能呢

$rec.CreateInstanceFromTextRepresentation("BRIVWTDC2", "stage.testdmc.com", "SECARC in CNAME BRIVWTARC2.stage.testdmc.com")
其中arg是DC,arg 2是区域,arg 3是文本表示=为RIVWTARC2.stage.testdmc.com创建一个名为SECARC的别名

我刚刚得到:

Exception calling "CreateInstanceFromTextRepresentation" : "Generic failure "
At line:1 char:42
+ $rec.CreateInstanceFromTextRepresentation <<<< ("BRIVWTDC2", "stage.testdmc.com", "'SECARC' in CNAME 'BRIVWTARC2.stage.testdmc.com'")
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WMIMethodException
调用“CreateInstanceFromTextRepresentation”时出现异常:“一般故障” 第1行字符:42 +$rec.CreateInstanceFromTextRepresentation。尝试:

您可能必须将
$rr
实例化为MicrosoftDNS\u ResourceRecord的实例。我不知道怎么做。

。尝试:


您可能必须将
$rr
实例化为MicrosoftDNS\u ResourceRecord的实例。我不知道怎么做。

这是权限,我们需要有人可以更改DNS(头和砖墙:-)() 以下示例创建一个DNS别名,必须以管理员或可以更改DNS的用户身份运行

# DnsChanger.ps1
# Change the DNS Entries for Arbitrary Servers
# version 0.1 15/08/2012
# Paddy Carroll 
# 2 arguments (1) physical server name (2) server alias
# 

# setup event source

if (! [System.Diagnostics.EventLog]::SourceExists("DnsManager"))
{
"Administrative script to create event source has not been run: DnsManager.ps1"
# which is just [System.Diagnostics.EventLog]::CreateEventSource("DnsManager", "Application")
throw 'error'
}

# initialise event

$evt=new-object System.Diagnostics.EventLog("Application")
$evt.Source="DnsManager"
$errevent=[System.Diagnostics.EventLogEntryType]::error
$infoevent=[System.Diagnostics.EventLogEntryType]::information


# set up variables

$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name  

# get arguments

if($args.count -lt 2)
{
   "Script requires two parameters, a physical server name and an alias. FDQN names will be truncated and the current domain will be appended"
   $evt.WriteEntry("Wrong number of arguments supplied to DnsManager " ,$errevent,2)
   throw 'error'
}

$phys = $args[0].split('.')[0]
$alias = $args[1].split('.')[0]
$filter = "ContainerName = " + [char]34 + $domain + [char]34 

$filter

# test for existence of CNAMEType alias

try{
   $rec = Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_CNAMEType -filter $filter
   if (!$rec)
      {
    # if it doesnt exist, get all AType aliases
         $rec = Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_AType -    filter $filter
      }
   }catch{
      $type = $_.Exception.getType().FullName
      $detail = $_.Exception.ErrorDetails().toString()
      $evt.WriteEntry("Problem getting DNS Namespace for " + $domain  ,$errevent,3)
      throw 'error'
   }


# create the alias

try{
$rec[0].CreateInstanceFromTextRepresentation($domain,$domain,$alias + '.' + $domain + ' IN     CNAME ' + $phys + '.'+$domain)
}catch{
    $type = $_.Exception.getType().FullName
    $detail = $_.Exception.ErrorDetails().toString()
    $evt.WriteEntry("Problem creating Alias for " + $phys + " as " + $alias + " : " +    $type + " : " + $detail,$errevent,1)
    throw 'error'
   }
$evt.WriteEntry("Alias created for " + $phys + " as " + $alias ,$infoevent,1)

这是权限,我们需要有人谁可以更改DNS(头和砖墙:-() 以下示例创建一个DNS别名,必须以管理员或可以更改DNS的用户身份运行

# DnsChanger.ps1
# Change the DNS Entries for Arbitrary Servers
# version 0.1 15/08/2012
# Paddy Carroll 
# 2 arguments (1) physical server name (2) server alias
# 

# setup event source

if (! [System.Diagnostics.EventLog]::SourceExists("DnsManager"))
{
"Administrative script to create event source has not been run: DnsManager.ps1"
# which is just [System.Diagnostics.EventLog]::CreateEventSource("DnsManager", "Application")
throw 'error'
}

# initialise event

$evt=new-object System.Diagnostics.EventLog("Application")
$evt.Source="DnsManager"
$errevent=[System.Diagnostics.EventLogEntryType]::error
$infoevent=[System.Diagnostics.EventLogEntryType]::information


# set up variables

$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name  

# get arguments

if($args.count -lt 2)
{
   "Script requires two parameters, a physical server name and an alias. FDQN names will be truncated and the current domain will be appended"
   $evt.WriteEntry("Wrong number of arguments supplied to DnsManager " ,$errevent,2)
   throw 'error'
}

$phys = $args[0].split('.')[0]
$alias = $args[1].split('.')[0]
$filter = "ContainerName = " + [char]34 + $domain + [char]34 

$filter

# test for existence of CNAMEType alias

try{
   $rec = Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_CNAMEType -filter $filter
   if (!$rec)
      {
    # if it doesnt exist, get all AType aliases
         $rec = Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_AType -    filter $filter
      }
   }catch{
      $type = $_.Exception.getType().FullName
      $detail = $_.Exception.ErrorDetails().toString()
      $evt.WriteEntry("Problem getting DNS Namespace for " + $domain  ,$errevent,3)
      throw 'error'
   }


# create the alias

try{
$rec[0].CreateInstanceFromTextRepresentation($domain,$domain,$alias + '.' + $domain + ' IN     CNAME ' + $phys + '.'+$domain)
}catch{
    $type = $_.Exception.getType().FullName
    $detail = $_.Exception.ErrorDetails().toString()
    $evt.WriteEntry("Problem creating Alias for " + $phys + " as " + $alias + " : " +    $type + " : " + $detail,$errevent,1)
    throw 'error'
   }
$evt.WriteEntry("Alias created for " + $phys + " as " + $alias ,$infoevent,1)

SECARC
需要是FQDN
SECARC.stage.testdmc.com
SECARC
需要是FQDN
SECARC.stage.testdmc.com
这是返回参数,不是必需的