I tryed create user and map it to exists login
As I understand it, the Smo.User.Create method is used for this with pre-initialized Smo.User.UserType='SqlLogin' and Smo.User.Login='some_login' properties ('some_login' Login must be created early)
in documentation Smo.User.UserType 'SqlLogin' member is deprecated and i used Smo.User.UserType='SqlUser'
but first call (user not exist) of Smo.User.Create is created user WITHOUT map to login
second call (after drop user) of Smo.User.Create is created user WITH map to login
Next steps, of course, will be add user to role and grant to him some permissions.
There is an Add-SQLLogin, a Get-SQLLogin, and a Remove-SQLLogin cmdlet. It looks like the SQL folks (the ones that create the cmdlets for the SQL product) don't want to allow you to Set-SQLLogin.
You can, however, simplify your code by using the Remove- and Set- cmdlets instead of working with the SMO object.