The problem here is not in the sc executable. As the error message says, sc resolves to Set-Content . If you run Get-Alias -Name sc , you will see:

To bypass the alias, use the full name of the executable file (including the file extension):
PS C:\> sc.exe query wuauserv SERVICE_NAME: wuauserv TYPE : 20 WIN32_SHARE_PROCESS STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0
You might want to use the -f operator when building command-line arguments to avoid the annoying -f quotes everywhere:
$CmdLine = 'sc.exe create "{0}" binpath= "{1}" displayname= "{2}" ' -f $ServiceName,$TargetPath,$DisplayName Execute-Command -Command $CmdLine
source share