Maybe just replace your Eviscerate button by one of the "smashable Stealth" macro, that you modify in order to only cast Eviscerate if you're not Stealthed (instead of Stealth), like this one :
/script if not(string.find(GetShapeshiftFormInfo(1), "Invis" )) then CastSpellByName("Stealth"); end
Just Replace "Stealth" at the end by Eviscerate and see what happens
.
You can test the macro by hitting it while Stealthed, it should do nothing.