我正在寻找附加Windows主机文件以获取当前动态IP并将其映射到主机名的方法

时间:2018-06-23 07:20:36

标签: powershell

我希望附加Windows主机文件以获取当前动态IP,并将其映射到主机名,而不管当前IP地址如何。 我遇到错误

  

================================================
   Add-Content:找不到接受参数'hostname1'的位置参数。   在C:\ Users \ Opps \ Desktop \ power \ New Text Document.ps1:6 char:3   + {ac -Encoding UTF8 -value“ $($ env:windir)\ system32 \ Drivers \ etc \ hosts ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidArgument:(:) [Add-Content],ParameterBindingException       + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.AddContentCommand
   ================================================== =============================

脚本:

$ip=get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1} 
$ip.ipaddress[0]
$hst = $env:COMPUTERNAME

Set-ExecutionPolicy -ExecutionPolicy Unrestricted If ((Get-Content "$($env:windir)\system32\Drivers\etc\hosts" ) -notcontains "127.0.0.2 hostname1") 
 {ac -Encoding UTF8 "$($env:windir)\system32\Drivers\etc\hosts" ($ip.ipaddress[0]) ($hst) }

1 个答案:

答案 0 :(得分:1)

Add-Content期望将字符串作为值,因此要更改类型,我们需要将值封装在引号中。要访问对象属性,例如$ip.ipaddress[0]用引号引起来时,为了不对文本进行字面处理,我们必须将其括在方括号中并加上一个前面带有美元符号"$(...)"的括号,该符号正式称为子表达式运算符(请参见mklement0's explanaton) 。为确保我们不复制条目,我们使用if语句对条目进行快速检查,如果同时满足add-content语句的两个条件,则继续进行if

$ip = get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1} 
$ip.ipaddress[0]
$hst = $env:COMPUTERNAME
$hostfile = Get-Content "$($env:windir)\system32\Drivers\etc\hosts"
Set-ExecutionPolicy -ExecutionPolicy Unrestricted 
if ($hostfile -notcontains "127.0.0.2 hostname1" -and 
    (-not($hostfile -like "$($ip.ipaddress[0]) $hst"))) {
    Add-Content -Encoding UTF8 "$($env:windir)\system32\Drivers\etc\hosts" "$($ip.ipaddress[0]) $hst" 
}