Solved

IIS log management Powershell script?

Posted on 2010-08-25
14
1,480 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
Comment Utility
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
Comment Utility
Yes, sorry for not being clear.
0
 
LVL 42

Expert Comment

by:sedgwick
Comment Utility
do u mind having it as vb script?
0
 
LVL 42

Expert Comment

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

Expert Comment

by:sedgwick
Comment Utility
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
Comment Utility
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
Comment Utility
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
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:Westez
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
Let me get back to you tomorrow on this, and many thanks for your help.  
0
 

Author Closing Comment

by:Westez
Comment Utility
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

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Microsoft Windows Server Update Service (WSUS) is free for everyone, but it lacks of some desirable features like send an e-mail to the administrator with the status of all computers on the WSUS server. This article is based on my PowerShell script …
This article will help you understand what HashTables are and how to use them in PowerShell.
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

728 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now