我是 powershell 和 dbatools 的新手。这是一个很棒的工具,但是当我尝试将几个不同命令的结果组合成一个要导出到 csv 的数组时,它并没有提供预期的结果。它只打印第一个命令的输出。有人可以帮我加入所有三个变量的结果吗?我要做的是编写一个脚本来自动生成我们的 SQL Server 库存和容量评估报告。
到目前为止,这是我的代码:
$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;博士
PSCustomObject
使用变量的属性创建一个。PowerShell 输出格式化程序使用输出集中的第一个对象作为模板,以表格格式显示后续对象。
如果第一个对象具有属性 A、B 和 C,则它们将是表头。
如果第二个对象只有属性 D、E 和 F,则将显示一个空行。
您可以通过以下示例自己查看:
选项 1 - 计算属性(在您的场景中不推荐):
那么,您可以使用计算的属性重命名变量中的属性以具有相同的名称吗?
然后,当您将其添加到数组中时,所有值都应显示:
为什么不是这种方法适合您的场景?
你所有的属性意味着不同的东西。的
Architecture
属性与例如$OSInfo
的任何属性都不匹配。$DiskSpace
在这里使用计算属性可能最终会及时混淆每个人。选项 2 - 创建 PSCustomObject(推荐)
构建
PSCustomObject
类型很容易,特别是如果您像在场景中那样提前知道命令或变量的输出。将您的示例与我机器上的信息一起使用,我们可以创建以下内容
PSCustomObject