OutlookConnector.HelperFunctions.ps1
# Helper functions used within Outlook Connector module # Functions are not exported out of module function Get-ValidFileName { # refference https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 #https://gallery.technet.microsoft.com/scriptcenter/Save-Email-from-Outlook-to-3abf1ff3#content param([Parameter(Mandatory=$true)][String]$FileName) # removing illegal characters foreach ($char in ([System.IO.Path]::GetInvalidFileNameChars())) {$FileName = $FileName -replace ('\'+$char),'_'} # trimming spaces and dots and removing extra long characters if (($FileName.Length) -gt 122) {$FileName = $FileName.Substring(0,123)} # 122 as we do not have extension yet while ($FileName -match '(^[\s\.])|([\s\.]$)') {$FileName = $FileName.Trim(' ').Trim(".")} # return value $FileName } function New-Folder { # creates new folder if not existing param([Parameter(Mandatory=$true)][String]$TargetFolder) if (!(Test-Path -Path $TargetFolder)) { try { mkdir -Path $TargetFolder | Out-Null } catch { throw "Target folder $TargetFolder can't be created." } } } function Validate-Properties { # verifies if sent object has all needed properties # it returns $null if everything is fine, or list of missing properties # it should be used as if (Validate-Properties) {there are errors} else {no errors} param( [Parameter(Mandatory=$true)][psobject]$InputObject, [Parameter(Mandatory=$true)][String[]]$RequiredProperties ) $ObjectProperties = ($Message | Get-Member).Name $NotFound = @() foreach ($Prop in $Properties) { if ($Prop -notin $ObjectProperties) { $NotFound += $Prop } } # return value if something found if (@($NotFound).Count -gt 0) {$NotFound} } function Create-FileName { # generates file name based on provided pattern and object # replaces each property in pattern specified with %PropertyName% with value of Property from sent object # filename has NO extension param( [Parameter(Mandatory=$true)][psobject]$InputObject, [Parameter(Mandatory=$true)][String]$FileNameFormat ) $RegEx = '(\%)(.+?)(\%)' $FileName = $FileNameFormat while ($FileName -match $RegEx) { $property = $Matches[2] # calling function should verify that all properties exist $FileName = $FileName -replace ('%'+$property+'%'),($Message.($property)) } # return value $FileName } function Add-Numbering { # generates file name based on send file name and extension # if file with that name exists, it will add numbering like (1), (2), etc. at the end of name # file name should be full path name # example Add-Numbering 'C:\tmp\Name' 'msg' param( [Parameter(Mandatory=$true)][psobject]$FileName, [Parameter(Mandatory=$true)][String]$FileExtension ) $i = 0 $FullFilePath = $FileName + '.' + $FileExtension # Check if file exists, and if yes, update name with numbering while (Test-Path -Path $FullFilePath) { $FullFilePath = $FileName + ' (' + (++$i) + ').' + $FileExtension } $FullFilePath } |