Interesting. I apologize if this is a stupid question, but in regards to the original code I was attempting to use, what is different in the way it is processed using the Exchange Management Shell vs. when I create a session to an Exchange server from PowerShell?
I was able to use the following code from EMS and do an add or subtract just by toggling the operand *$RecvConn.RemoteIPRanges += $HostIPConv Set-ReceiveConnector $recvConn -RemoteIPRanges $RecvConn.RemoteIPRanges* The $HostIPConv variable stores a single IP address. - Sean On Fri, Dec 5, 2014 at 7:56 AM, Michael B. Smith <[email protected]> wrote: > You can’t do it that way, for a subtraction. You must use either the > Remove() or RemoveAt() methods, on the RemoteIpRanges result. > > > > How, precisely, to do it is going to be dependent on the exact format of > the $HostIPConv variable. > > > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Sean Martin > *Sent:* Friday, December 5, 2014 2:13 AM > > *To:* [email protected] > *Subject:* Re: [Exchange] PowerShell Help > > > > So that works when adding an IP address (thank you!), however, I receive > the following when attempting to remove an IP address (using -=): > > > > *Method invocation failed because [System.Collections.ArrayList] doesn't > contain* > > > > > > > * a method named 'op_Subtraction'. At J:\MIS Technical > Support\Distributed\Continuity\Continuity Binders\Scripting \Exchange > 2010\SMTPRelay\DoNotExecute\RemoveFromRelayList.ps1:92 char:29 + > $RecvConn.RemoteIPRanges -= <<<< $HostIPConv + CategoryInfo : > InvalidOperation: (op_Subtraction:String) [], Ru ntimeException + > FullyQualifiedErrorId : MethodNotFound* > > > > - Sean > > > > On Thu, Dec 4, 2014 at 2:54 PM, Michael B. Smith <[email protected]> > wrote: > > Hmmmm. > > > > Willing to try something else? Try this… > > > > $RecvConns = Get-ReceiveConnector | where {$_.name -eq "SMTP Relay > Connector"} > > > > forEach ($recvConn in $recvConns) { > > Write-Host "Updating", $recvConn.Identity > > $RecvConn.RemoteIPRanges += $HostIPConv > > $recvConn.Guid.ToString() | Set-ReceiveConnector -RemoteIPRanges > $RecvConn.RemoteIPRanges > > } > > > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Sean Martin > *Sent:* Thursday, December 4, 2014 6:13 PM > *To:* [email protected] > *Subject:* Re: [Exchange] PowerShell Help > > > > Thanks for the tip on the operator, that does make better sense. > > > > Unfortunately I'm still encountering a similar issue: > > > > *Cannot process argument transformation on parameter 'Identity'. Cannot > convert* > > > > > > * the "b1645fd1-31c2-46f0-9df6-36cb7285303b" value of type "System.Guid" > to type > "Microsoft.Exchange.Configuration.Tasks.ReceiveConnectorIdParameter". + > CategoryInfo : InvalidData: (:) [Set-ReceiveConnector], Paramet > erBindin...mationException + FullyQualifiedErrorId : > ParameterArgumentTransformationError,Set-Receive Connector* > > > > On Thu, Dec 4, 2014 at 1:47 PM, Michael B. Smith <[email protected]> > wrote: > > This should sort it. As an aside, you should probably be using “-eq” > instead of “-match”, if only one connector is supposed to match. > > > > $RecvConns = Get-ReceiveConnector | where {$_.name -match "SMTP Relay > Connector"} > > > forEach ($recvConn in $recvConns) { > Write-Host "Updating", $recvConn.Identity > $RecvConn.RemoteIPRanges += $HostIPConv > Set-ReceiveConnector –Identity $recvConn.Guid -RemoteIPRanges > $RecvConn.RemoteIPRanges > } > > > > > > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Sean Martin > *Sent:* Thursday, December 4, 2014 3:47 PM > *To:* [email protected] > *Subject:* [Exchange] PowerShell Help > > > > Good morning/afternoon, > > > > I need a little assistance with a PS script I'm putting together. Just to > let it be known, scripting is not my strong suit. > > > > I'm putting together a powershell script for Junior admins to quickly and > efficiently add or remove IP addresses to a relay connector we have on our > Exchange servers. The entire script accepts input from the user, does some > connectivity checks, dns checks, etc. but the primary function is to gather > the input and simply run the set-receiveconnector cmdlet with the updated > IP list. When I execute the script from the Exchange Management shell, it > works perfectly. However, I would like the admins to be able to execute the > script quickly and easily, and potentially from a PC that doesn't have the > EMS installed. > > > Here's the code that works when the script is executed from the EMS: > > > > ================================================================ > > $RecvConns = Get-ReceiveConnector | where {$_.name -match "SMTP Relay > Connector"} > > > forEach ($recvConn in $recvConns) { > Write-Host "Updating", $recvConn.Identity > $RecvConn.RemoteIPRanges += $HostIPConv > Set-ReceiveConnector $recvConn -RemoteIPRanges $RecvConn.RemoteIPRanges > } > > ================================================================ > > > > However, if I add the logic to import a PSsession so the user can simply > right-click and execute in powershell: > > > > ================================================================ > > $ExchSrvr = "server1","server2","server3" | Where {Test-Connection > -ComputerName $_ -Count 1 -Quiet} | Get-Random > $ExchSess = New-PSSession -ConfigurationName Microsoft.Exchange > -ConnectionUri ("http://{0}.<domain>/PowerShell" -f $exchsrvr) > Import-PSSession $ExchSess > > ================================================================ > > > > I receive this error when the script attemps to set-receiveconnector: > > > > *Cannot process argument transformation on parameter 'Identity'. Cannot > convert* > > > > > > > * the "<servername>\SMTP Relay Connector" value of type > "Deserialized.Microsoft.Exchan > ge.Data.Directory.SystemConfiguration.ReceiveConnector" to type > "Microsoft.Exch ange.Configuration.Tasks.ReceiveConnectorIdParameter". > + CategoryInfo : InvalidData: (:) [Set-ReceiveConnector], Paramet > erBindin...mationException + FullyQualifiedErrorId : > ParameterArgumentTransformationError,Set-Receive Connector* > > > > > > I'm having a hard time tracking this issue down. Please note I removed > references to actual server names and domains. The actual script is in the > proper syntax. Appreciate any help anyone can provide. > > > > - Sean > > > > > > > >
