Windows 7 を実行している仮想マシンで Outlook 2010 を実行しています。ネットワークはホストを通じて提供されます。Outlook は Exchange サーバーに接続します。
ホストの IP アドレスが変更されると (たとえば、別の Wi-Fi ネットワークに移動した場合)、Outlook の接続が切断されます。詳しく調査したわけではありませんが、TCP 接続を頑固に保持し、新しい接続を開始しないようです。下部のステータス バーには「このフォルダーは <time> に最後に更新されました」と表示され続け、新しいメールはダウンロードされません。
「フォルダーの更新」ボタンや「すべてのフォルダーの送受信」ボタンを押しても効果はありません。オフライン モードに切り替えて (「オフラインで作業」ボタン)、オンラインに戻しても効果はありません。
場合によっては、Outlook が最終的に再接続することがあります。ただし、それには数分または数時間かかります。今すぐ Outlook に再接続するように指示するにはどうすればよいですか?
Outlook を終了して再起動すると機能しますが、混乱を招きます。この問題は、VM で Outlook を実行している場合、または IP アドレスが変更されるゲートウェイの背後で Outlook を実行している場合に特有のものです。Windows マシン自体の IP アドレスが変更された場合、Outlook は正しく再接続します。
答え1
Outlook を再起動したり、ネットワーク インターフェイスを無効にして (面倒な作業ですが) 再度有効にしたりする以外に、Outlook をサーバーに再接続させる方法を見つけることができませんでした。
そこで私が行うことは、次のスクリプトを使用して、VM とホスト間の仮想ケーブルを抜き差しすることですVBoxCableReconnect
。もちろん、このスクリプトは VirtualBox に固有のものですが、他の VM テクノロジでも同様のことが可能だと思います。
#! /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');
ホスト上でネットワーク インターフェイスを起動するときに、VM を実行しているユーザーとしてこれを実行します。
答え2
時計の横にある Outlook アイコンを Ctrl キーを押しながら右クリックすると、「接続ステータス」という新しいメニュー項目が表示され、他の方法よりもはるかに速く再接続できます。