Создание записей DNS-записей с использованием WMI из powershell - PullRequest
3 голосов
/ 15 сентября 2011

Отказ от ответственности: я очень плохо знаком с PowerShell и почти не знаю WMI.

Я пытаюсь сделать записи DNS на удаленном сервере через PowerShell.Я погуглил и обнаружил, что 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, который я ожидал.Я немного смущен тем, как это сделать.Любая помощь будет оценена.

Поиск в Google для этого дает только результаты использования литералов wmi (я думаю, это то, что они есть?)

Ответы [ 5 ]

1 голос
/ 15 сентября 2011

Проверьте свойства $ 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
1 голос
/ 15 сентября 2011

Если вы используете 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"
0 голосов
/ 21 апреля 2016

По-прежнему актуален сегодня ...

Что касается альтернативных учетных данных, в предыдущих ответах: -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)
0 голосов
/ 19 июня 2013

Просто поделиться знаниями:

Если вы хотите сделать это на локальном сервере (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")
0 голосов
/ 16 сентября 2011

Мы получили это, чтобы работать следующим образом:

Мы включили PowerShell Remoting как на локальных, так и на удаленных машинах и включили его через 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

Есть только одна вещь, которую вы должны запускать с повышенными разрешениями. Надеюсь, что это помогает другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...