InstallShield's Targets file has this built in but it's not designed correctly and only works based on certain assumptions that may not be true.
The way I like to do it is:
1) Define a Path Variable in the ISM called ISBUILDDIR and give it a defined value of
<ISProjectDataFolder>
2) Under Product Configurations, Release Configuration, set the Build Release location to \ProductName
This essentially gives you an abstraction that by default behaves like before but can be overridden during the build.
3) In your .ISPROJ (MSBuild) create the following item group:
<ItemGroup>
<InstallShieldPathVariableOverrides Include="$(OutDir)">
<PathVariable>ISBUILDDIR</PathVariable>
</InstallShieldPathVariableOverrides>
</ItemGroup>
Now the $(OutDir) property will be assigned to the ISBUILD path variable and the product/release configuration will output to $(OutDir)\ProductName In the case of TFS Builds $(OutDir) gets assigned $(BinariesRoot) so your build output will get picked up and placed in the drop location archive.