我想将以下命令简化为1行,进行循环直到它返回TRUE。
以下将检查TCP连接是否正常工作:
const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// ...
})
如果没有阻止任何防火墙,通常会打印/返回TRUE。
我想要做的是,在没有脚本/文件的情况下,让这个命令循环,直到它返回一个TRUE值。
有什么想法吗?
答案 0 :(得分:1)
这样的事情会起作用:
while ((New-Object System.Net.Sockets.TcpClient -ArgumentList DESTINATION-IP,PORT).Connected -ne $true) { Start-Sleep -Milliseconds 1000 }
除非你真的想连接洪水,否则我不建议睡眠时间不到250毫秒左右。
另外,请记住,在没有脚本文件的情况下,您不需要制作一个单行程序来调用脚本。 Powershell有一个行终止符:;
。您可以轻松拨打powershell -Command { 1; 2; 3; }
。
尝试使其更加健壮。您可以删除空格和换行符以使其成为一行,但我会将其格式化为易读性:
do {
try {
$Connected = (New-Object System.Net.Sockets.TcpClient -ArgumentList DESTINATION-IP,PORT -ErrorAction Stop).Connected;
}
catch {
$Connected = $false;
}
if (!$Connected) { Start-Sleep -Milliseconds 1000; }
} until ($true.Equals($Connected));