目前,我已經創建了一個非常非常基本的 PS 腳本,它可以簡單地檢查預設連線如果預設值不是腳本中指定的,則連接到 VPN:
$DefaultNetworkIndex = Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Sort-Object {$_.RouteMetric+(Get-NetIPInterface -AssociatedRoute $_).InterfaceMetric} | Select-Object -First 1 -ExpandProperty InterfaceIndex
$DefaultNetwork = (Get-NetConnectionProfile -InterfaceIndex $DefaultNetworkIndex).Name
if ($DefaultNetwork -ne 'Some Connection Name') {
Invoke-Expression 'rasdial VPN username password /phonebook:rasphone.pbk'
}
我想充實它:
- 不斷監控網路變化並做出回應
- 阻止任何網路存取(如果位於未指定的網路中),直至 VPN 運行
但我的Google-fu沒有找到我任何辦法讓我做到以上幾點。任何能讓我完成它們的指示(也許是 PS 的一些網路庫?)將非常受歡迎。
答案1
我看到有兩種方法可以做到這一點。
一種是連續執行 PowerShell 腳本,因此您每 N 秒循環檢查一次網路狀況的變化(使用 sleep 命令空閒)。
另一個可能更好的方法是讓腳本從 Windows 工作排程器事件啟動。例如,您可以在使用者登入或電腦啟動時觸發檢查。您還可以使用系統事件日誌中的事件定義特定觸發器,其中可能包含您可以使用的與網路相關的事件(我沒有將其用於與網路相關的事件,因此我必須自己檢查)。透過使用正確的觸發器,您可以僅在網路條件變更時執行腳本。
希望這可以幫助。