我希望附加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,Opps
================================================================================
脚本:
$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) }
发布于 2018-06-24 08:07:13
Add-Content
需要一个字符串作为值,因此要更改我们需要将值封装在引号中的类型。要在引号中访问对象属性,例如$ip.ipaddress[0]
,为了不从字面上处理文本,我们必须将其括在括号中,前面的美元符号"$(...)"
正式称为子表达式运算符(请参阅mklement0's explanaton)。为了确保我们没有复制条目,我们使用if
语句对条目运行快速检查,只有在if
语句的两个条件都满足的情况下才会进入add-content
$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"
}
https://stackoverflow.com/questions/50998926
复制相似问题