Public/Test-Object.ps1

function Test-Object {
  <#
    .SYNOPSIS
    Wrapper for Test-Path

    .DESCRIPTION
    Wrapper function for Test-Path to catch access permission issues

    .INPUTS Path
    The path parameter corresponds to the path to the object to test

    .INPUTS NotFound
    The not found flag reverse the valid outcome of the test to allow for negative testing
  #>

  [CmdletBinding ()]
  Param (
    [Parameter (
      Position    = 1,
      Mandatory   = $true,
      HelpMessage = "Path to the object"
    )]
    [ValidateNotNUllOrEmpty ()]
    [String]
    $Path,
    [Parameter (
      HelpMessage = "Reverse valid outcome of the test"
    )]
    [Switch]
    $NotFound
  )
  Begin {
    # Get global preference variables
    Get-CallerPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState
  }
  Process {
    # Test path
    try {
      $Outcome = Test-Path -Path $Path -ErrorAction "Stop"
    } catch [System.UnauthorizedAccessException] {
      if (-Not $Error[0].Exception) {
        $ErrorMessage = "Access is denied ($Path)"
      } else {
        $ErrorMessage = $Error[0].Exception
      }
      Write-Log -Type "DEBUG" -Object $ErrorMessage
      $Outcome = $true
    }
    # Output test result
    if ($PSBoundParameters.ContainsKey("NotFound")) {
      return (-Not $Outcome)
    } else {
      return $Outcome
    }
  }
}