Search code examples
powershellfilesystemwatcher

Split strings from registered event output in PowerShell


I have just started working with IO.FIleSystemWatcher. My current code works and alerts me of created files in the desired location, however I want to pipe some of the variables out and split the strings. I cannot get the split portion to work.

Functional Code:

$folder = 'D:\Output'
$filter = '*.jpg'

$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
Out-File D:\Output\scans\$name.txt    
}

$name will always be formatted like so 'file.name.fn_xxx.jpg' and I want to use split to pull 'file' from $name, for example:

$name.split('.')[0]

However, this does nothing as far as I can tell. For instance I can output a file with $name as the filename, but if I try to split it first nothing outputs.

Non-Functional Code:

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green

$name = $name.split('.')[0]    
Out-File D:\Output\scans\$name.txt    
}

This is a bit over my head so any advice or suggestion is appreciated.

Thanks


Solution

  • I ended up working it out by simply using another variable.

    $folder = 'D:\Output'
    $filter = '*.jpg'
    
    $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
    
    Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
    Write-Host "$name"
    
    $x = $name.split(".")[0]
    Out-File D:\Output\scans\$x.txt
    

    I am not sure why this works, but it does. If anyone knows why please comment!