Sorry,
I am 100% confident on this one. The indeterminate behavior results from myriad
of
error handling practices possible. The default preference and its implicit
behavior, all
pet peeves of mine.
When writing a binary cmdlet, you can opt to throw an error which can be
terminating
if desired (by invoking the cmdlet with -ErrorActoin Stop) or you can throw a
terminating error you can't catch.
When processing in a pipeline, I assure you the data is processed record by
record
as it is retrieved, trust me.
If you **don't** want the pipeline to terminate, then state so:
get-Mailbox ... -ErrorAction SilentlyContinue | Some-OtherCmdlet ...
However, using try catch in the pipeline is possible, the syntax is just awful
to look at.
For example:
Get-ChildItem c:\ |%{
Write-Host $_.FullName
try
{
throw 'Some error'
}
catch
{
Write-Host ('Caught an error: {0}, but continuing anyway...' -f
$_.Exception.Message) -ForegroundColor Red
}
$_
} |%{
Write-Host ('And here we are again: {0}...' -f $_.FullName)
-ForegroundColor Green
}
Back to my point about the pipeline and accumulation, since I know you also
develop, you are
familiar with what some language's call generators or iterators (think c# yield
return).
Type the following:
Get-ChildItem c:\ -Force -Recurse -ErrorAction SilentlyContinue
You see results immediately and they stream consecutively until finished.
Now try this:
foreach ($i in (Get-ChildItem c:\ -Force -Recurse -ErrorAction
SilentlyContinue))
{
$i
}
Notice the long wait before the first result?
Hth,
jlc
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Michael B. Smith
> Sent: Wednesday, November 1, 2017 1:46 PM
> To: [email protected]
> Subject: [Exchange] RE: Outlook rules errors
>
> I gotta jump in here:
>
> >> By invoking Get-Mailbox outside the pipeline the way you are, all the
> objects are
> >> accumulated in memory, then fed to the body one at a time.
> >> That doesn't scale in large environments, but if this runs already you are
> obviously ok.
>
> In my experience, exactly the opposite is true.
>
> For example, if you've got 50,000 mailboxes and you are trying to use a
> pipeline with them, my experience says that exactly zero percent of the time
> will that pipeline complete without an error.
>
> 100% of the time you'll get "steppable pipeline already in use" or a similar
> error indicating that there were buffer collisions.
>
> P.S. - Another way to handle the OP's issue is with redirecting the warning
> stream.
>
> https://blogs.technet.microsoft.com/heyscriptingguy/2014/03/30/understan
> ding-streams-redirection-and-write-host-in-powershell/
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Joseph L. Casale
> Sent: Wednesday, November 1, 2017 3:30 PM
> To: '[email protected]'
> Subject: [Exchange] RE: Outlook rules errors
>
> Sure,
> $i references a mailbox. That has the offending owner of the invalid rule.
>
> Here is a rule I require all code I work with to follow, otherwise it gets
> filed in
> G:)
> Always use `Set-StrictMode -Version Latest`
> For every cmdlet that exposes it, use the -ErrorLevel parameter and either
> try/catch it or ignore it (for the rare cases that might make sense).
>
> So in your case, wrap the body in a try catch and report the offender, for
> example:
> try
> {
> Get-InboxRule... -ErrorAction Stop
> }
> catch
> {
> Write-Host ('{0} has an error.' -f $_.Identity)
> }
>
> A note about pipelines, while writing programs with a pipeline is
> programmatically gruesome, you can rationalize it in some cases with
> Powershell.
> By invoking Get-Mailbox outside the pipeline the way you are, all the objects
> are accumulated in memory, then fed to the body one at a time.
> That doesn't scale in large environments, but if this runs already you are
> obviously ok.
>
> hth,
> jlc
>
> > -----Original Message-----
> > From: [email protected]
> > [mailto:[email protected]] On Behalf Of Maglinger, Paul
> > Sent: Wednesday, November 1, 2017 1:04 PM
> > To: [email protected]
> > Subject: [Exchange] Outlook rules errors
> >
> > I'm using the following Powershell script to search for users that are
> > using
> > rules to either forward or redirect email outside of the company:
> > # foreach ($i in (Get-Mailbox -ResultSize unlimited)) {Get-InboxRule -
> > Mailbox $i.DistinguishedName | where {$_.ForwardTo} | fl
> > MailboxOwnerID,Name,ForwardTo >> C:\downloads\ForwardRules.txt }
> >
> > While it runs this script I get a lot of warnings of "The Inbox rule
> > "Blahblahblah" contains errors. To resolve the error, please edit the rule
> > or
> > re-create it."
> >
> > Very informative. not. I have no idea which mailbox to look at. Is there a
> > way to refine the script, or is there another script that can be run that
> > will
> tell
> > me who has rules that have problems?
> >
> > Everything that I've found online talks about going into Outlook. I haven't
> > found anything using PowerShell.
> >
> > Thanks!
> >
> > Paul
> >
> >
> >
>
>
>
>