The only cross platform method I found which works in both interactive and non-interactive shells is:
command | tee >(cat 1>&2)
The argument to tee is a file or file handle. Using process substitution we send the output to a process. In the process =cat=, we redirect stdout to stderr. The shell (bash/ksh) is responsible for setting up the 1 and 2 file descriptors.