使用PowerShell中的WMI创建DNS记录条目

时间:2011-09-15 02:39:06

标签: powershell wmi

免责声明:我对powershell非常陌生,几乎不了解WMI。

我正在尝试通过powershell在远程服务器上创建dns条目。我用Google搜索并发现WMI是唯一的方法。

以下代码片段适用于我

$dnsAType = [wmiclass]"\\$dnsServer\root\MicrosoftDNS:MicrosoftDNS_AType"
    $dnsAType.CreateInstanceFromPropertyData($dnsServer, $dnsZone, $domainName, $class, $ttl, $ipaddress)

问题是我必须将这些条目作为不同的用户。我登录的用户没有足够的权限。所以我必须传递证书。 Get-WmiObject似乎是传递不同凭据的唯一方式。但我无法让代码适用于Get-WmiObject。

以下代码段可以获取wmi_objects。

$wmi_object = Get-WmiObject -Class MicrosoftDNS_AType -Namespace "root\MicrosoftDNS" -computerName "192.168.1.5" -Credential $creds

但这似乎是一个数组,并且元素似乎没有我期待的CreateInstanceFromPropertyData方法。我对如何解决这个问题感到困惑。任何帮助,将不胜感激。

谷歌搜索只给了我使用wmi文字的结果(我想这就是它们是什么?)

5 个答案:

答案 0 :(得分:1)

如果您使用的是PowerShell V2,则可以使用Set-WMIInstance

Set-WMIInstance -Namespace "root\MicrosoftDNS" -class MicrosoftDNS_AType -argument @{DnsServerName="srventr2.societe.fr"; ContainerName="societe.fr" ; OwnerName="t1.societe.fr"; RecordData="192.168.10.10" ; RecordClass=1 ; TTL=3600 } -credential (get-credential) -computername "192.168.183.138"

答案 1 :(得分:1)

检查$ dnsAType.psbase.Scope.Options的属性,您可以设置用户名和密码以及其他一些连接选项:

PS > $dnsAType.psbase.Scope.Options    

Locale           :
Username         :
Password         :
SecurePassword   :
Authority        :
Impersonation    : Impersonate
Authentication   : Unchanged
EnablePrivileges : False
Context          : {}
Timeout          : 10675199.02:48:05.4775807

答案 2 :(得分:0)

我们按照以下方式开展此工作:

我们在本地和远程计算机上启用了PowerShell远程处理,并通过Invoke-Command

启用了它
    PS>Enable-PSRemoting
    PS>Invoke-Command {
    $dnsAType = [wmiclass]"root\MicrosoftDNS:MicrosoftDNS_AType"
        $dnsAType.CreateInstanceFromPropertyData($dnsServer, $dnsZone, $domainName, $class, $ttl, $ipaddress)
    } -Credentials $cred -ComputerName $remotemachineName

只有一件事你必须使用提升的权限运行。希望这有助于其他人。

答案 3 :(得分:0)

只是为了分享知识:

如果您想在本地服务器(server.contoso.com)上执行该操作,并且您至少有一个SRV记录实例

PS C:\> $record = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_SRVType
PS C:\> $record[0].CreateInstanceFromTextRepresentation("server.contoso.com", "contoso.com", "_mysvc._tcp.contoso.com IN SRV 0 100 8000 host1.contoso.com")

答案 4 :(得分:-1)

今天仍然相关......

至于备用凭据,在以前的答案中:-Credential

然而,在返回正确的界面时,Powershell可能有点“笨拙”。

以下命令将返回MicrosoftDNS_ResourceRecord(即使我们要求MicrosoftDNS_AType)

GWMI -Class MicrosoftDNS_AType -ComputerName $dns `
     -Namespace root\MicrosoftDNS -Credential username | GM

作为替代方案,以下命令将返回MicrosoftDNS_AType

GWMI -Class MicrosoftDNS_AType -ComputerName $dns `
     -Namespace root\MicrosoftDNS -Credential username -List | GM

完成任务:

(GWMI -Class MicrosoftDNS_AType -ComputerName $dns `
      -Namespace root\MicrosoftDNS -Credential username `
      -List).CreateInstanceFromPropertyData($dnsFqdn,$zone, $host, 1, 3600, $ip)