Solved

IIS log management Powershell script?

Posted on 2010-08-25
14
1,490 Views
Last Modified: 2012-05-10
Would somebody help me out with a Powershell script to manage IIS log files?  What I want to do.

Start at \\webserver1\logfile -  loop through each folder.
File path c:\logfiles\domain.org\w3svc[X]

If the files date isn't equal to today date
then move the file \\webserver1\ domain.org\w3svc[X] to \\archiveserver\domain.org\w3svc[X] and
then rename the file u_ex100713.log to w1u_ex100713.log
else do nothing

if the files been moved and renamed then write or append the filename to \\webserver1\tracking.txt
file.  


0
Comment
Question by:Westez
  • 8
  • 6
14 Comments
 
LVL 42

Expert Comment

by:sedgwick
ID: 33529050
do u mean to check all log files dates under \\webserver1\logfile\domain.org\w3svc[X].
and if the file date isn't equal to today date then move to the archive server?

>>then rename the file u_ex100713.log to w1u_ex100713.log
is this an example of a log file?
so the renaming should be just the prefix of file name?
from 'u_' to 'w1u_'?
0
 

Author Comment

by:Westez
ID: 33530757
Yes, sorry for not being clear.
0
 
LVL 42

Expert Comment

by:sedgwick
ID: 33530775
do u mind having it as vb script?
0
Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

 
LVL 42

Expert Comment

by:sedgwick
ID: 33530803
file date you mean creation time or last modified time?
0
 
LVL 42

Expert Comment

by:sedgwick
ID: 33531083
here you go in powershell
foreach ($i in gci \\webserver1\logfile\domain.org\w3svc[X]){
	if(!$i.psiscontainer){
		if ((Get-Date $i.CreationTime).ToShortDateString() -eq (Get-Date).ToShortDateString()){
			move-Item $i.FullName \\archiveserver\domain.org\w3svc[X]
		}
	}
}

gci \\archiveserver\domain.org\w3svc[X] | rename-item -newname { $_.name -replace 'u_','w1u_' }

Open in new window

0
 

Author Comment

by:Westez
ID: 33533510
Thanks for your help.

The w3svc[X] - that X is a number.  So my file structure looks like this.  
domain.org\w3svc7
domain.org\w3svc22
domain.org\w3svc23

We currently host 41domains.  Is it possible to treat the w3svc[X] as a variable so one script would loop through each domains log folder and move the files?  

0
 

Author Comment

by:Westez
ID: 33534243
Do we have to tell it where to move the file too?

At the moment it doesn't work.
I'm trying to make it work with a single domain.  And I can move the files with this cmd in a DOS shell on the web server where the log files are stored.  Of course the cmd moves everything, so the date thing comes back to bite me, LOL.

move c:\logfiles\domain.org\w3svc17\*.* \\archiveserver\weblogs\domain.org\w3svc17

weblogs is a share sitting on the archive server.
0
 

Author Comment

by:Westez
ID: 33534376
My bad, you are telling it where to move the file to.  It doesn't throw any error msg's it just don't move the files.  
One thing I never figured out in DOS was the date thing. If the files creation date is not equal to todays date then move the file, or delete the file, etc.  Could you help me out with an example using DOS?
0
 
LVL 42

Expert Comment

by:sedgwick
ID: 33535323
it doesn't move the files cause the script looking for folder:
w3svc[X]
which as u said doesn't exists cause the [X] reflect different numbers.
so basically it should look for all subfolders which start with 'w3svc'.
is that correct?
0
 
LVL 42

Expert Comment

by:sedgwick
ID: 33535332
i'm not big DOS fan but i can post you a vb script in no time, whatever you feel comfortable with.
0
 
LVL 42

Expert Comment

by:sedgwick
ID: 33535636
check now
foreach ($it in gci \\meirpc\temp){
	if($it.psiscontainer -and $it.Name.ToLower().StartsWith("w3svc")){
		foreach ($i in gci $it.FullName){
			if(!$i.psiscontainer){
				if ((Get-Date $i.CreationTime).ToShortDateString() -eq (Get-Date).ToShortDateString()){
					Move-Item $i.FullName \\meirpc\temp\output
				}
			}
		}
	}
}

gci \\meirpc\temp\output | rename-item -newname { $_.name -replace 'u_','w1u_' }

Open in new window

0
 
LVL 42

Accepted Solution

by:
sedgwick earned 500 total points
ID: 33536005
replace $source_folder and $dest_folder to your source and destination folders.

i assume that in your case:
$source_folder = \\webserver1\logfile\domain.org
$dest_folder = \\archiveserver\weblogs\domain.org
cls
$source_folder = "\\meirpc\temp\w3svc"
$dest_folder = "\\meirpc\temp\output\w3svc"

foreach ($it in gci $source_folder){
	if($it.psiscontainer -and $it.Name.ToLower().StartsWith("w3svc")){
		foreach ($i in gci $it.FullName){
			if(!$i.psiscontainer){
				if ((Get-Date $i.CreationTime).ToShortDateString() -eq (Get-Date).ToShortDateString()){
					$dest = Join-Path $dest_folder $it.Name
					if (!(Test-Path -path $dest)){
						New-Item $dest -type directory
					}
					move-Item $i.FullName $dest 
					$destfile = Join-Path $dest $i.Name
					$filename = $destfile -replace 'u_','w1u_'
					Rename-Item -path $destfile -NewName $filename
				}
			}
		}
	}
}

Open in new window

0
 

Author Comment

by:Westez
ID: 33537161
Let me get back to you tomorrow on this, and many thanks for your help.  
0
 

Author Closing Comment

by:Westez
ID: 33560217
Sedqwick - I'm having problems getting the script to run. Most likely something I'm doing. But I've another problem that demands attention, we're a small shop and we all wear many hats.  Maybe we can pick back up on it in a day or two. Thanks for taking the time to help us out here though, it's certainly enough to get us started.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A brief introduction to what I consider to be the best editor for PowerShell.
In previous parts of this Nano Server deployment series, we learned how to create, deploy and configure Nano Server as a Hyper-V host. In this part, we will look for a clustering option. We will create a Hyper-V cluster of 3 Nano Server host nodes w…
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

685 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question