Magma can be used to do (1) by taking products of characters, and (2) using the function 'Symmetrization', provided $|\lambda| \le 6$. In either case the output will be a character $\chi$ of a symmetric group. You can then write a short function that calculates all the inner products of $\chi$ with irreducible characters to get the answer in the form you want. The function 'SymmetricCharacter' returns the irreducible character labelled by a given partition.
Edit: Gap also has most of the required functions built-in. To generate the irreducible characters of $S_7$ use 'Irr(SymmetricGroup(7))'. You can then add and multiply characters to get the character of the tensor product of two representations of $S_7$. Then 'Symmetrizations(Irr(SymmetricGroup(7)),s)' computes $S_\lambda \chi$ for all irreducible characters of $S_7$ and all partitions $\lambda$ of $s$. This took almost no time to run, even for $s=10$, a case Magma fails on.
I'm not sure if Gap provides any way to determine the partition labelling an irreducible character of $S_n$. Before 'SymmetricCharacter' was introduced in Magma, I used some code of my own to identify the labelling partition, by first looking at the degree (using the hook-formula), and then resolving any ambiguities using classical formulae for the values of symmetric group characters on cycles of short length. Please send me an email if you'd like more details.