目前,我已经创建了一个非常基本的 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 功夫没有找到任何方法来实现上述几点。任何能让我实现这些目标的提示(也许是一些 PS 的网络库?)都非常受欢迎。
答案1
我发现有两种方法可以做到这一点。
一个是连续运行 PowerShell 脚本,因此您每 N 秒循环检查一次网络状况的变化(使用 sleep 命令处于空闲状态)。
另一个可能更好的方法是让您的脚本从 Windows 任务计划程序事件启动。例如,您可以在用户登录或机器启动时触发检查。您还可以使用系统事件日志中的事件定义特定触发器,其中可能包含您可以使用的网络相关事件(我还没有将其用于与网络相关的事物,所以我必须自己检查)。通过使用正确的触发器,您可能能够让您的脚本仅在网络条件发生变化时运行。
希望这可以帮助。