Eu sou novo no powershell e dbatools. É uma ótima ferramenta, mas quando tento combinar o resultado de alguns comandos diferentes em um array para ser exportado para csv, não está fornecendo o resultado pretendido. Está apenas imprimindo a saída dos primeiros comandos. Alguém pode me ajudar a juntar o resultado de todas as três variáveis? O que estou tentando fazer é escrever um script para automatizar a geração de nosso relatório de avaliação de capacidade e inventário do SQL Server.
Segue meu código até agora:
$Servers = Get-Content 'C:\Users\temp\ServerList.txt'
$reportData = @()
foreach ($Server in $Servers) {
if (Test-Connection -ComputerName $Server -Count 1 -ErrorAction 'SilentlyContinue') {
$OSInfo=Get-DbaOperatingSystem -ComputerName MyServer| Select ComputerName, OSVersion, Version, Architecture
$DiskSPace=Get-DbaDiskSpace -ComputerName MyServer| Select ComputerName, Label, Name, Capacity, Free
$SQLInstanceInfo=Connect-DbaInstance -SqlInstance MyServer | Select DbaInstanceName, Edition, NetPort, IsClustered, Processors, ProductLevel, ServiceName,
$reportData +=$OSInfo
$reportData +=$DiskSPace
$reportData +=$SQLInstanceInfo
}
else {
write-host $Server "not connected"
}
}
Write-Output $reportData | Format-Table
TL;DR
Crie um
PSCustomObject
com as propriedades de suas variáveis.O formatador de saída do PowerShells usa o primeiro objeto no conjunto de saída como um modelo para exibir objetos subsequentes em formato de tabela.
Se o primeiro objeto tiver as propriedades A, B e C, esses serão os cabeçalhos da tabela.
Se o segundo objeto tiver apenas as propriedades D, E e F, uma linha em branco será mostrada.
Você pode ver por si mesmo com este exemplo:
Opção 1 - Propriedades Calculadas (Não recomendaria no seu cenário):
Então, você poderia renomear as propriedades em suas variáveis para ter o mesmo nome usando propriedades calculadas?
Então, quando você adiciona isso ao seu array, todos os valores devem ser exibidos:
Por que não este método para o seu cenário?
Todas as suas propriedades significam coisas separadas. A
Architecture
propriedade de$OSInfo
não corresponde a nenhuma propriedade de,$DiskSpace
por exemplo. Usar propriedades calculadas aqui provavelmente acabaria confundindo a todos com o tempo.Opção 2 - Criando um PSCustomObject (recomendaria)
É fácil construir um
PSCustomObject
tipo, especialmente se você conhece a saída de comandos ou variáveis com antecedência, como faz em seu cenário.Usando seus exemplos com as informações da minha máquina, podemos criar o seguinte
PSCustomObject