Que problema interessante, viu, Alberto?
Veja como cheguei na solução:
Se não quiser saber do processo, pule para minha próxima resposta, aqui só explico um pouco de como cheguei nisto, porque realmente achei muito interessante hehe
1.) Se o arquivo não foi criado, algum erro aconteceu e não ficamos sabendo. Os erros são acessíveis através do stream de erro:
Console.WriteLine($"HadErrors: {powerShellInstance.HadErrors}");
foreach (var item in powerShellInstance.Streams.Error)
{
Console.WriteLine($"- {item}");
}
Com isso, a saída na aplicação será:
HadErrors: True
- The term 'Get-Localuser' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Ou seja, o Get-Localuser
não foi encontrado.
O módulo que define esse cmdlet é o Microsoft.PowerShell.LocalAccounts
, então eu tentei o importar com Import-Module Microsoft.PowerShell.LocalAccounts
e então não foi possível carregar esse módulo.
2.) O PowerShell possui uma versão chamada PowerShell Core que é uma versão multi plataforma, roda no Linux. Realmente, o Get-LocalUser
não faz sentido no Linux e foi isso o que eu encontrei no GitHub do projeto: https://github.com/PowerShell/PowerShell/issues/952
Se você não quiser ler a discussão, fica aqui um resumo: o Get-LocalUser
funciona no Windows, mas não funciona no Linux.
3.) Eu estou instalando o pacote System.Management.Automation.dll
pelo NuGet e percebi que ele é "netstandard2.0", ou seja, é uma lib que roda nas duas plataformas. Pra baixar somente a versão Windows, criei um projeto .NET 4.0, instalei o pacote e o código funcionou.
4.) Mas, não vamos querer ficar com um projeto .NET 4.0, então eu descobri a diferença entre eles e é uma coisa que eu ainda não entendi muito bem.
Os passos para funcionar são ...
(fica na próxima resposta)