PowerShell v3 の場合は、これを試してください。
$out = git log ORIG_HEAD --% --no-merges --date=short --pretty="format:<tr><td>%h</td><td>%ad</td><td>%an</td><td>%s</td></tr>"
$out > test.txt
--% は、PowerShell をネイティブ実行可能ファイルにより適した別の解析モードにします。詳細については、このブログ投稿を参照してください。
PowerShell v3 を使用していない場合は、PowerShell Community Extensionsの echoargs を使用して、git.exe が PowerShellから引数を受け取るときに引数を確認することをお勧めします。
PS> echoargs log ORIG_HEAD --no-merges --date=short --pretty="format:<tr><td>%h</td><td>%ad</td><td>%an</td><td>%s</td></tr>"
Arg 0 is <log>
Arg 1 is <ORIG_HEAD>
Arg 2 is <--no-merges>
Arg 3 is <--date=short>
Arg 4 is <--pretty=format:<tr><td>%h</td><td>%ad</td><td>%an</td><td>%s</td></tr>>
Command line:
"C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx\Apps\EchoArgs.exe" log ORIG_HEAD --no-merges --date=short --pretty=format:<tr><td>%h</td><td>%ad</td><td>%an</td><td>%s</td></tr>
PowerShell がどのように引数を exe に渡しているかがわかれば、通常は余分な引用符を使用して引数をマッサージする方法を理解するチャンスがあります。