Tak jsem dokázal nastavit, aby se VPN automaticky připojovala pokaždé, když otevřu svůj .rdp soubor, pomocí:
Add-VpnConnectionTriggerApplication -ConnectionName "<jméno připojení>" -ApplicationID "C:\WINDOWS\system32\mstsc.exe"
Nicméně to neodpojí VPN, když zavřu relaci RDP.
Je nějaký chytrý způsob, jak zajistit, aby VPN automaticky vypnula? Chci zjednodušit svůj proces připojení k dálkové práci na “Klikni na svůj .rdp soubor a hotovo!”
Bylo by fajn, kdybych nemusel pokaždé otevírat nastavení VPN a vybíjet odpojení při přestávkách nebo jiných aktivitách.
Upravení: Vyřešeno zde!
https://www.reddit.com/r/PowerShell/comments/fov3dl/auto_disconnect_my_vpn_when_i_close_rdp/flofok5/
Velké díky /u/purplemonkeymad za ukázku Start-Process, jak donutit mstsc běžet synchronně.
Podívejte se na Remote Desktop Manager. Nabízí právě tuto funkci - připojení VPN při začátku relace a odpojení po dokončení. A mnohem více.
To určitě lze udělat. Dříve jsem měl svůj starý Surface Pro 4 nastavený tak, že se automaticky připojil, když se otevřel mstsc, a odpojil se 5 sekund po zavření.
Myslím, že odpojení bylo nastavené přímo v nastavení VPN.
Set-VpnConnection -IdleDisconnectSeconds 5
ahoj lionhart280,
vypadá to, že jsi použil tlačítko Inline Code na Redditu. je to 4. 5. zleva skryto v menu ... “více” a vypadá to jako </>.
Na starém Redditu, výše uvedené nezalomí řádky, ani se neposunou do strany.
Pro dlouhé řádky nebo víceřádkový kód, prosím, používej tlačítko Code Block. je to 11. 12. zleva a je přímo vedle skryto v menu ... “více” a vypadá to jako velké T v horním levém rohu čtverce.
To ti poskytne plně funkční formátování kódu, podle mých zkušeností. [úsměv]
měj se,
lee
Nakonec jsem to řešil tímto skriptem, který tak trochu funguje. Musím ho spustit dvakrát, jednou na připojení, podruhé na odpojení, ale funguje!
$vpnName = "<Jméno mého připojení>";
$rdp = "<Cesta k mému .rdp souboru>";
$vpn = Get-VpnConnection -Jméno $vpnName;
pokud($vpn.ConnectionStatus -eq "Connected"){
rasdial $vpnName /DISCONNECT;
} jinak {
rasdial $vpnName;
mstsc $rdp;
}
Můžeš vložit to do smyčky a použít
if (-not (get-process mstsc -erroraction silentlycontinue)) {rasdial $vpnName /disconnect}
Namísto podmínky $vpn.connectionstatus.
Požaduj sleep 10 (nebo jiný čas) na konci cyklu a nech to běžet. Po zavření relace RDP se VPN automaticky odpojí.
Můžeš použít Start-Process a Wait-Process, aby počkal, až mstsc zavře, a tím pádem to šlo na jeden běh:
rasdial $vpnname
Start-Process mstsc -ArugmentList $rdp -PassThru | Wait-Process
rasdial $vpnname /disconnect
Ohoho! Teď už mluvíme.
Sleep 10 je trochu moc, asi bych zvládl s 30
Tohle bylo téměř dokonalé, ale zjistil jsem, že -ArgumentList musí mít předán celý řetězec, takže musíme $rdp uzavřít do druhých uvozovek.
To je snadné, stačí dvounásobně citovat, takže máme:
$vpnName = "<název vašeho VPN připojení>";
$rdp = "<Cesta k vašemu .rdp souboru>";
rasdial $vpnname;
Start-Sleep -Seconds 2;
Start-Process mstsc -ArgumentList """$rdp""" -PassThru | Wait-Process;
rasdial $vpnname /disconnect;
Toto funguje skvěle a přesně to, co jsem potřeboval, děkuji moc! Myslel jsem, že bude existovat způsob, jak spustit samostatný spouštěč synchronně, Start-Process byl příkaz, který jsem potřeboval!
Start-Sleep je také důležitý, protože pokud spustím mstsc ihned po připojení, může se stát, že se nepodaří připojit. Malé zpoždění před otevřením dává šanci, aby spojení stabilizovalo, nebo tak něco. Nevím, co se děje na pozadí, ale zpoždění dělá, že to funguje stoprocentně.
Na zdraví!
Namísto použití erroraction to můžeme udělat čistší:
(get-process | where ProcessName -eq mstsc).count -gt 0