As mentioned in the comment, you can change your code to [datetime]::parseexact('2018-05-07T15:19:17.839+03:00', 'yyyy-MM-ddTHH:mm:ss.fffzzz',$null) and that will work for you if you are not concerned with the CultureInfo.
But as I can see in your code, that you are providing 3 arguments to your ParseExact function, which makes me wonder if you are really trying to change the CultureInfo. If you want to change your that, you can do something like this -
([datetime]::ParseExact($date,"dd/MM/yyyy",[Globalization.CultureInfo]::CreateSpecificCulture('en-GB'))
OR
([datetime]::ParseExact($date,"dd/MM/yyyy",[Globalization.CultureInfo]::CreateSpecificCulture('de-DE'))
and so on depending upon your requirement.
Extra Info -
As per the msdn article,
The
DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles)
method parses the string representation of a date that matches any one
of the patterns assigned to the formats parameter. If the string s
does not match any one of these patterns with any of the variations
defined by the styles parameter, the method throws a FormatException.
Aside from comparing s to multiple formatting patterns, rather than to
a single formatting pattern, this overload behaves identically to the
DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles)
method.
The style parameter, is a bitwise combination of enumeration values that indicates the permitted format of s(input date). A typical value to specify is None.
See the Get-Date Formatting Culture for more info.
[datetime]::parseexact('2018-05-07T15:19:17.839+03:00', 'yyyy-MM-ddTHH:mm:ss.fffzzz',$null)