Moving and archiving IIS Logs

I want to write a function that would move IIS logs to a remote server, then verify the move, log the errors if any, send email alerts, and zip the files if move is successful. I would then call the function using another script that would be populated with a CSV file with the servernames and IPs and all other necessary parameters. So, I broke down the function into multiple parts and wrote these functions and cmdlets so far:

Function MoveFile

{

[CmdletBinding()]

param

(

[parameter(Mandatory=$True,

Helpmessage=‘which server would you like to target?’)]

[Alias(‘host’)]

[ValidateLength(3,30)]

[string[]]$Servername,

[string]$Sourcefile,

[string]$DestinationFile,

[string]$logname = ‘C:\errors.txt’

)

begin {

write-verbose “Deleting Logname”

del $logname -ErrorAction SilentlyContinue

}

process {

Write-verbose “Copying IIS Logs”

foreach ($item in (Get-ChildItem $Servername$sourcefile)) {

copy-Item $item.Fullname $DestinationFile -Force

}

}

}

Compare-Object -ReferenceObject $(get-content $Servername$sourcefile) -DifferenceObject $(get-content $Destinationfile) | Where-Object sideindicator -Match “^<=.*” | foreach-object {“content mistmatch”}
3.
function send-notification($subject, $detail) {
$message = New-Object System.Net.Mail.MailMessage
$message.Subject = $subject
$message.Body = $detail
$message.To.Add(“recipient@domain.com”)
$message.From = “sender@domain.com

$client = New-Object System.Net.Mail.SMTPClient -ArgumentList &quot;smtp.domain.com&quot;
$client.Send($message)

}
4.
function zip-files

{

param($Sourcedirectory, $zipFilename, $zipFilepath, $zipFile)

#Prepare zip file

if(-not (test-path($zipFile))) {

set-content $zipFile (&quot;PK&quot; + [char]5 + [char]6 + (&quot;$([char]0)&quot; * 18))

(dir $zipFile).IsReadOnly = $false  

}

$shellApplication = new-object -com shell.application

$zipPackage = $shellApplication.NameSpace($zipFile)

$files = Get-ChildItem -Path $srcdir | where{! $_.PSIsContainer}

foreach($file in $files) {

$zipPackage.CopyHere($file.FullName)

#using this method, sometimes files can be 'skipped'

#this 'while' loop checks each file is added before moving to the next

while($zipPackage.Items().Item($file.name) -eq $null){

    Start-sleep -seconds 1

}

}

}

I do not know how to include all of these functions and cmdlets in 1 function and make them work for my use-case. I would like someone to help me out with this.

If you put all the functions into a script, you can then run the functions at the bottom of that script.