9

私が達成しようとしていること: powershell を使用してマシンに DNS アドレスを設定しようとしています。

これが私のコードです:

$dnsserver = (,"192.168.0.5")
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE | Invoke-WmiMethod -Name SetDNSServerSearchOrder -ArgumentList (,$dnsserver)

私はこれを参考として使用しています:

Invoke-WmiMethod を使用して DNS サーバーを設定する

問題:スクリプトを実行しても何も変わりません。スクリプトを実行してマシンを再起動しても、何も起こりません。リモートではなく、ローカル マシンでスクリプトを実行しています。

DNS アドレスを 1 つだけ追加したいと考えています。

これを機能させるには、おそらく別のユーザーとして実行するか、何か特別なことをする必要がありますか?

4

7 に答える 7

7
$DC = read-host "Please enter a primary DNS"
$Internet = read-host "Please enter secondary DNS"
$dns = "$DC", "$Internet"

PowerShell 4 の場合:

#I know this one is sloppy, but will get the work done.

Set-DnsClientServerAddress -InterfaceIndex 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 17, 18, 19, 20 -ServerAddresses ($DNS)
#I know this one is sloppy, but will get the work done.

Powershell 1、2、および 3 用。

$Interface = Get-WmiObject Win32_NetworkAdapterConfiguration 
Write-Host "$(Get-Date -format T):Registering DNS $dns for $server" -ForegroundColor Green
$Interface.SetDNSServerSearchOrder($dns)

DC に障害が発生したため、数百台のコンピューターの DNS 範囲を設定する必要があるクライアントのために、実際に昨日書いたスクリプトからこれらを抜き出しました。

興味があれば、スクリプト全体を提供できます。スクリプトのポイントは、ドメインで実行し、ドメイン内のすべてのコンピューターの DNS を設定することです。

編集、実行部分の改良版 (PS4+)

このスクリプトで何か問題が発生した場合でも、エラーは表示されません。以前の ps4 のスクリプトとは異なり、常にいくつかのエラーが出力されます。

$ErrorActionPreference = "Continue"

#Set all DNS addresses needed.
write-verbose -Verbose "Set all DNS addresses needed."
$DC = "192.168.103.30"
$Internet = "8.8.8.8" #Google
$WorkRouter = "192.168.12.254"
$HomeRouter = "10.0.0.1"
$Possible = "192.168.1.1"
$Possible2 = "192.168.0.1"

#Combine addresses
write-verbose -Verbose "Combining DNS addresses."
$dns = "$DC", "$Internet", "$WorkRouter", "$HomeRouter", "$Possible", "$Possible2"

#Set network adapter ranges
write-verbose -Verbose "Setting network adapter ranges."

#Get Network adapters
write-Verbose -Verbose "Now checking available network adapters."
$Net = Get-NetAdapter | select ifIndex | ft -a | Out-File -FilePath C:/Netadapter.txt
$Net =  "C:/Netadapter.txt"

#Setting ranges to work with
$Ranges = (Get-Content $Net) -creplace "ifIndex", "" -creplace "-", "" | foreach {$_.Trim()} | Where { $_ } | Sort #| out-file C:/Netadapter.txt

#Execute DNS change
write-Warning -Verbose "Now executing DNS change to all available network adapters."
foreach ($range in $ranges)    {
Set-DnsClientServerAddress -InterfaceIndex $range -ServerAddresses ($DNS)
}

write-verbose -Verbose "DNS Settings have been altered."
于 2014-10-03T12:41:17.763 に答える
4

通常、ネットワーク インターフェイスの管理には管理者権限が必要なため、昇格した PowerShell コンソールでスクリプトを実行する必要があります。

于 2013-09-10T17:16:03.330 に答える
1

これは私が使用するものです.. PS 5.1

$ipaddress = <ip>
$Gateway = <gateway IP>
$netadapter = <InterfaceAlias>
$primary = <First DNS record or comma seperated IP's>
$NetScript = @"
 Get-Netadapter -Name $netadapter | New-NetIPAddress -AddressFamily IPv4 -IPAddress $IP -PrefixLength 23 -Type Unicast -DefaultGateway $Gateway
Set-DnsClientServerAddress -InterfaceAlias 'Ethernet0' -ServerAddresses $primary
Disable-NetAdapterBinding -Name "Ethernet0" -ComponentID ms_tcpip6
Disable-NetAdapterBinding -Name "Ethernet0" -DisplayName "QoS Packet Scheduler"
"@
$NetScript = $NetScript.Replace('#netadapter#', $netadapter).Replace('#Ipaddress#', $IP).Replace('#Gateway#', $Gateway)

#Where Ethernet0 = InterfaceAlias

これは、VMware および HyperV の展開でよく使用されます。

于 2018-06-26T20:34:02.097 に答える