Powershell 停止在值之后将其写入屏幕';测试

Powershell 停止在值之后将其写入屏幕';测试,powershell,Powershell,我开始写一个函数,它将测试一个有效的IP地址并以此为基础构建。我的代码工作得很好,但是,当IP有效时,它会将有效的IP写入屏幕。由于我将添加到这个函数中,最终输出将是IP地址等等,所以我想以某种方式抑制它 do { $ip=$(read-host "Enter an IP address") [ref]$a = $null $inputOk = [system.net.IPAddress]::tryparse($ip,$a) if ($inputOk -eq $false

我开始写一个函数,它将测试一个有效的IP地址并以此为基础构建。我的代码工作得很好,但是,当IP有效时,它会将有效的IP写入屏幕。由于我将添加到这个函数中,最终输出将是IP地址等等,所以我想以某种方式抑制它

do {
   $ip=$(read-host "Enter an IP address")
   [ref]$a = $null
   $inputOk = [system.net.IPAddress]::tryparse($ip,$a)
   if ($inputOk -eq $false) {
       write-warning ("'{0}' is not a valid IP address, try again." -f $ip)
   }
} until ($inputOk)
输出如下所示:

Enter an IP address: 127.0.0.1
127.0.0.1

我希望它不返回刚刚输入的有效ip

也许这可以帮助您:

Function Test-IP {
    [CmdletBinding()]
    Param (
        $IP
    )

    do {
        $IP = Read-Host "Enter an IP address"

        $Result = [System.Net.IPAddress]::TryParse($IP,[Ref]$null)

        if ($Result) {
            Write-Verbose "Valid IP found: $IP"
            <#
                Do stuff here with the valid IP
            #>
        }
        else {
            Write-Warning ("'{0}' is not a valid IP address, try again." -f $ip)
        }
    } until ($Result)
}

# See progress messages:
Test-IP -Verbose

# Without progress messages
Test-IP
功能测试IP{
[CmdletBinding()]
Param(
$IP
)
做{
$IP=读取主机“输入IP地址”
$Result=[System.Net.IPAddress]::TryParse($IP,[Ref]$null)
如果($结果){
详细写入“找到有效IP:$IP”
}
否则{
写入警告(“{0}”不是有效的IP地址,请重试。“-f$IP)
}
}直到($Result)
}
#请参阅进度消息:
测试IP-详细
#没有进度消息
测试IP

如果创建的函数具有
[CmdLetBinding()]
,则可以使用
详细开关。要显示脚本/函数的进度,这是一种方法。如果您不想看到函数中发生了什么,只需省略
Verbose
开关。

为什么在
$ip=$(读取主机“输入ip地址”)
周围使用额外的括号?疏忽!谢谢。@PetSerAl这就是答案,但我不明白为什么。@Matt括号不是赋值或递增/递减,所以它们返回值。@PetSerAl,谢谢你的解释。我认为唯一的问题是在从主机读取IP后,由于额外的括号而导致IP的输出。