Uma função deve retornar um ou mais Objetos, dados de saída não formatados (que são destinados ao host / tela).
Em outras palavras, não use cmdlets Format- * dentro de uma função
Basta remover |fl *
da última declaração e canalizar a saída da chamada de função test
para Format-List
:
function test {
@("Administrator","SomeUser","SomeOtherUser") |% {
$uname = $_;
$u = gwmi win32_useraccount |? { $_.Name –eq $uname }
if (-not $u) {
write-host ("[-] "+ $uname + " does not exist!")
} else {
write-host ("[+] "+ $uname + ":")
$u
}
}
@("Administrator","SomeUser","SomeOtherUser") |% {
$uname = $_;
gwmi win32_groupuser -computer . | select GroupComponent,PartComponent |? { $_.PartComponent -match ",Name='""+$uname+"'""}
}
}
test |fl *
Na mesma linha, pelo menos para escrever funções reutilizáveis:
- Não use Write-Host em suas funções - é ruim
- Use nomes completos de cmdlets em vez de aliases (como
%
,select
,gwmi
)
Você também pode se beneficiar do uso do parâmetro -Query
com Get-WmiObject
e fazer com que o WMI faça a filtragem, em vez de retornar todos os usuários ao powershell e então filtrá-los
Get-WmiObject -Query "SELECT * FROM Win32_UserAccount WHERE Name = '$uname'"