我希望附加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) }
答案 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"
}