Я запускаю Outlook 2010 на виртуальной машине с Windows 7. Сетевое взаимодействие осуществляется через хост. Outlook подключается к серверу Exchange.
Когда IP-адрес хоста меняется (например, при переходе в другую сеть Wi-Fi), это нарушает подключение Outlook. Я не исследовал подробно, но, похоже, он упрямо сохраняет TCP-соединение и не начинает новое. В строке состояния внизу постоянно отображается «Эта папка последний раз обновлялась в <время>», а новые письма не загружаются.
Нажатие кнопок «Обновить папку» или «Отправить/получить все папки» не помогает. Переключение в автономный режим (кнопка «Работать автономно») и обратно в онлайн не помогает.
Иногда, в конце концов, Outlooks восстанавливает соединение. Но это занимает минуты или часы.Как мне сейчас дать команду Outlook переподключиться?
Уничтожение Outlook и его перезапуск работают, но это мешает. Эта проблема характерна для запуска Outlook на виртуальной машине или, предположительно, за шлюзом, IP-адрес которого меняется: если IP-адрес самой машины Windows меняется, Outlook корректно переподключается.
решение1
Мне не удалось найти способ заставить Outlook повторно подключиться к серверу, кроме как перезапустить его или отключить и (что мучительно) снова включить сетевой интерфейс.
Итак, что я делаю, так это отключаю и подключаю обратно виртуальный кабель между виртуальной машиной и хостом с помощью следующего VBoxCableReconnect
скрипта. Конечно, скрипт специфичен для VirtualBox, но я ожидаю, что подобные вещи возможны и с другими технологиями виртуальных машин.
#! /usr/bin/env perl
use strict;
use warnings;
sub vbox_list {
my %vms;
my ($running) = @_;
my $what = $running ? 'runningvms' : 'vms';
local $ENV{LC_ALL} = 'C';
open VBOX, "VBoxManage list -l $what |" or die 'VBoxManage: $!';
local $/ = "\n\n\n";
while (my $section = <VBOX>) {
my %vm = ();
$section =~ s/\n\n.*//s; # strip shared folders, etc.
foreach my $line (split /\n/, $section) {
$line =~ s/\A([^:]+):\s+// or next;
$vm{$1} = $line;
}
$vms{$vm{UUID}} = {%vm};
}
close VBOX;
return %vms;
}
sub vbox_list_cables {
my ($vms) = @_;
my @cables;
foreach my $vm (values %$vms) {
my %vm = %$vm;
foreach my $key (keys %vm) {
next unless $key =~ /\ANIC *([0-9]+)\z/;
my $num = $1;
if ($vm{$key} =~ /(^|, )Cable connected: on($|, )/) {
push @cables, [$vm{UUID}, $vm{Name}, $num];
}
}
}
return @cables;
}
sub vbox_iterate_cableconnected {
my ($cables, $onoff) = @_;
foreach my $cable (@$cables) {
my ($uuid, $name, $num) = @$cable;
system 'VBoxManage', 'controlvm', $uuid, "setlinkstate$num", $onoff;
# TODO: report errors
}
}
my %vms = vbox_list(1);
my @cables = vbox_list_cables(\%vms);
vbox_iterate_cableconnected(\@cables, 'off');
sleep(1);
vbox_iterate_cableconnected(\@cables, 'on');
Запустите это как пользователь, управляющий виртуальной машиной, при открытии сетевого интерфейса на хосте.
решение2
Нажмите Control и щелкните правой кнопкой мыши по значку Outlook возле часов, и у вас появится новый пункт меню под названием «Состояние подключения», с помощью которого вы сможете переподключиться гораздо быстрее, чем любым другим способом.