-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.ps1
47 lines (36 loc) · 1.48 KB
/
App.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Class App {
[void] Main() {
$this.Welcome()
$this.WriteTestResult($this.CreateTestJobs($this.GetHostPath()))
$this.Closing()
}
hidden [void] Welcome() {
Clear-Host
Write-Host "Console HostChecker 启动!" -ForegroundColor Red
}
hidden [string] GetHostPath() {
[string] $hostPath = Join-Path $PSScriptRoot "Cealing-Host.json"
while (-not (Test-Path $hostPath -PathType Leaf)) { $hostPath = (Read-Host "输入 Cealing-Host.json 文件路径").Trim("""") }
return $hostPath
}
hidden [array] CreateTestJobs([string] $hostPath) {
[array] $testJobs = @()
foreach ($hostRule in Get-Content $hostPath -Raw | ConvertFrom-Json) {
$testJobs += Start-ThreadJob {
param ([array] $hostRule)
[string] $testResult = (Test-Connection $hostRule[2] -TcpPort 443 -Count 1) ? "成功" : "失败 ($($hostRule[0]))"
Write-Host "$($hostRule[2]): $testResult"
} -ArgumentList (, $hostRule)
}
return $testJobs
}
hidden [void] WriteTestResult([array] $testJobs) {
while ($testJobs.State -ne "Completed") {
foreach ($testOutput in Receive-Job $testJobs) { Write-Host $testOutput }
}
foreach ($testOutput in Receive-Job $testJobs -Wait -AutoRemoveJob) { Write-Host $testOutput }
}
hidden [void] Closing() {
Write-Host "测试结果仅供参考" -ForegroundColor Red
}
}