I haven't tested the script on Windows 2000 yet. The script relies heavily
on the DIR command to get a list of mailboxes as well as the size. If
Windows 2000 does this any differently than NT4 it will break. Will you
verify this for me?
When you issue the command "dir /ad C:\imail\users" what do you get? Can you
redirect it "> test.txt" and send it to me?
For example on NT4 SP5, when the script issues the command to get a list of
home directories:
@lines = `dir /ad "$test_dir"`;
which on my system is equivalent to "dir /ad E:\imail\users"
It gets:
Volume in drive E has no label.
Volume Serial Number is 548A-792A
Directory of e:\imail\users
04/27/00 08:02a <DIR> .
04/27/00 08:02a <DIR> ..
03/01/00 03:07p <DIR> aacos1
03/01/00 03:55p <DIR> aagui1
03/01/00 03:39p <DIR> aalfo1
03/01/00 03:07p <DIR> aalle1
<SNIP>
03/01/00 03:08p <DIR> zluca1
04/25/00 02:17p <DIR> zpers1
03/01/00 03:08p <DIR> ztayl1
03/01/00 03:52p <DIR> zthom1
03/01/00 03:20p <DIR> zveal1
03/01/00 03:58p <DIR> zwaji1
3755 File(s) 0 bytes
91,578,900,480 bytes free
The script removes everything but lines containing directory listings:
#Remove first 7 lines, and last 2 lines
pop(@lines);
pop(@lines);
shift(@lines);
shift(@lines);
shift(@lines);
shift(@lines);
shift(@lines);
shift(@lines);
shift(@lines);
It then isolates the user directories and builds a hash of directory
listings only:
#Loop through each line of directory output and strip out everything
#but the directory then call dir_size.
#assign @lines to $line, one at a time
foreach $line (@lines)
{
@line = split(/ /,$line,21);
splice(@line,0,20);
chomp(@line);
my $current_dir = $line[0];
push (@list, $current_dir);
}
It returns a hash containing all user directories:
return @list;
When you issue the command "dir /s/w C:\imail\users\USERNAME\*.mbx" what do
you get? Can you redirect it "> test2.txt" and send it to me?
For example on NT4 SP5, when the script issues the command to get total
mailbox size:
@res = `dir /s/w "$test_dir"`;
which on my system is equivalent to "dir /s/w e:\imail\users\jmorgan\*.mbx"
I get:
Volume in drive E has no label.
Volume Serial Number is 548A-792A
Directory of e:\imail\users\jmorgan
Main.mbx
1 File(s) 11,203 bytes
Total Files Listed:
1 File(s) 11,203 bytes
91,579,039,744 bytes free
In the script I take this and extract the line with the size in it:
# The second to last line has the number of files and
# total size of the the directory
my $LastLine = $res[-2];
I then Isolate the number with:
@res = split(/ /,$LastLine);
Remove the commas:
$_ = $res[-2];
tr/0-9//cd;
$res[-2] = $_;
And return the total size of all mbx files:
return $res[-2];
As you can see, any variance in the way DIR prints its results may break the
script. I don't have a Windows 2000 system running right now, so I can't
verify the output of the DIR command on Windows 2000.
Hopefully I can make some changes and get it to work for everyone, once I
get enough feedback. Any Perl gurus know a better way?
> -----Original Message-----
> From: Dave Koontz [SMTP:[EMAIL PROTECTED]]
> Sent: Wednesday, April 26, 2000 8:43 PM
> To: "Joel Morgan"
> Subject: Re: [IMail Forum] issue warnings to users approaching the
> mailbox size limit
>
> First I would just like to say THANKS for providing such a nice script for
> everyone's use!
>
> I agree with another user on the iMail list that their should be TWO
> levels
> of notifications, perhaps at 75% - polite, and another more serious one
> at
> 90%....
>
> Now, I do have a problem with the current script. Perhaps I am just to
> naive with perl. I am running iMail v6.03 on NT 2000. When I run your
> script, it displays "NO USER" name.... further it appears that it is just
> looking at the \imail\users folder and not the individual user's folder as
> the bytes for each user it finds are identical. When I modify your script
> and attempt to isolate the $dir variable --- it returns "" (nothing) So
> the
> registry key and the User folder your script looks at is always the root
> of
> both. Can you help a newbie? <g>
>
> Thanks again....
>
> ----- Original Message -----
> From
> To: <[EMAIL PROTECTED]>
> Sent: Wednesday, April 26, 2000 4:35 PM
> Subject: [IMail Forum] issue warnings to users approaching the mailbox
> size
> limit
>
>
> Imail version 6.X lacks the ability to issue warnings to users approaching
> the mailbox size limit. This perl script scans the registry for each
> domain
> and checks each user's mailbox size against MaxSize entered for the user
> in
> the registry. If the user has 0 entered as MaxSize then the domains
> MaxSize
> entry is used. If the mailbox is within 10% of the limit it emails a
> caution
> to the user and logs it. If the user's mailbox exceeds the limit it only
> logs it. The resulting log file is then emailed to the postmaster account.
> Sizes are reported in bytes.
>
> To run the script every 24 hours, schedule with the command "AT 2:00
> /interactive /every:Su,M,T,W,Th,F,S C:\BIN\LIMIT.PL"
>
> I would appreciate any comments or suggestions. For example should the
> user
> continue to be warned once the mailbox limit has been passed. Maybe even
> warn until the user is 10% over the limit. It currently starts warning the
> user at 10% of the limit and continues until the limit is reached. I don't
> want the number of warnings mailed to a user to be infinite.
>
> It should work without any configuration settings other than to either
> manually run it or schedule it. Would someone give it a shot and help me
> test it?
>
> It seems to work fine, but use at your own risk!
>
> Works with Activestate's Perl available at http://www.activestate.com/
>
> <<LIMIT.PL>>
>
Please visit http://www.ipswitch.com/support/mailing-lists.html
to be removed from this list.