-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
folder-watcher.ps1
87 lines (78 loc) · 3.25 KB
/
folder-watcher.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Parameters
param (
[Parameter(Mandatory=$true)][string]$folder = "", # Enter the root path you want to monitor.
[string]$filter = '*.*', # You can enter a wildcard filter here.
[bool]$includesubdir = $true, # In the following line, you can change 'IncludeSubdirectories to $false if required.
[Parameter(Mandatory=$true)][string]$slackUri = "",
[Parameter(Mandatory=$true)][string]$slackChannel = "",
[string]$slackUser = "Resilio Sync",
[bool]$fsCreated = $true,
[bool]$fsDeleted = $true,
[bool]$fsChanged = $true
)
if(-Not (Test-Path $folder)){
Throw "$folder does not exist."
}
if (!(Get-Module -ListAvailable -Name PSSlack)) {
Write-Host "PSSlack is not available, Installing from PowerShell Gallery..."
try {
Install-Module -Name PSSlack -Scope CurrentUser
} catch {
Throw $_.Exception.Message
}
}
Import-Module PSSlack
# Set up Slack parameters
$slack = [PSCustomObject]@{
uri = $slackUri
channel = $slackChannel
username = $slackUser
icon = ":dart:"
}
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $includesubdir;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
# Here, all three events are registerd. You need only subscribe to events that you need:
if($fsCreated){
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -MessageData $slack -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
$slack = $Event.MessageData
#Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
Send-SlackMessage -Uri $slack.uri `
-Channel $slack.channel `
-Parse full `
-Username $slack.username `
-IconEmoji $slack.icon `
-Text "The file '$name' was $changeType at $timeStamp"
}
}
if($fsDeleted){
Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -MessageData $slack -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
$slack = $Event.MessageData
#Write-Host "The file '$name' was $changeType at $timeStamp" -fore red
Send-SlackMessage -Uri $slack.uri `
-Channel $slack.channel `
-Parse full `
-Username $slack.username `
-IconEmoji $slack.icon `
-Text "The file '$name' was $changeType at $timeStamp"
}
}
if($fsChanged){
Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -MessageData $slack -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
$slack = $Event.MessageData
#Write-Host "The file '$name' was $changeType at $timeStamp" -fore white
Send-SlackMessage -Uri $slack.uri `
-Channel $slack.channel `
-Parse full `
-Username $slack.username `
-IconEmoji $slack.icon `
-Text "The file '$name' was $changeType at $timeStamp"
}
}