Powershell将数组格式化为二维数组



几天前我遇到了一个问题,我的脚本应该从AD OU中提取所有主机名,然后检查每个主机的已用空间和磁盘上的可用空间。由于这是我第一次使用powershell,我遇到了很多问题。我现在遇到的问题是脚本找不到数组中列出的主机名。我想我发现了为什么它不能工作,因为它使用了错误的主机名。每个主机名的错误消息:

Write-Warning : Es wurde kein Positionsparameter gefunden, der das Argument "@{Name=BUCHHOLZMVZ}" akzeptiert.
In Zeile:16 Zeichen:5
+     Write-Warning "Server " $server "nicht erreichbar"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Write-Warning], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.WriteWarningCommand

当我只使用命令来获取所有服务器的所有主机名时,我会得到:

Name           
----           
someserver
someserver1
someserver2
(and so on...) 

这是脚本:

$servers = Get-ADComputer -Filter * -SearchBase "OU=ServerOU, DC=somedomain, DC=somedomain, DC=somedomain" | Select-Object Name
$allDisks = foreach ($server in $servers)
{
try {
Get-WmiObject Win32_LogicalDisk -ComputerName $server -Filter DriveType=3 -ErrorAction Stop | 
Select-Object @{'Name'='ComputerName'; 'Expression'={$server}},
DeviceID, 
@{'Name'='Size'; 'Expression'={[math]::truncate($_.size / 1GB)}}, 
@{'Name'='Freespace'; 'Expression'={[math]::truncate($_.freespace / 1GB)}}
}
catch {
Write-Warning "Server " $server "nicht erreichbar"
Continue
}

}
$allDisks |Export-Csv C:Servers.csv -NoTypeInformation

第一行使用以下内容:

$servers = Get-ADComputer -Filter * -SearchBase "OU=ServerOU, DC=somedomain, DC=somedomain, DC=somedomain" |
Select-Object -Expand Name

在不使用-Expand-ExpandProperty的情况下使用Select-Object会输出包含属性和值的对象。如果只想输出选定属性的值,则必须使用-Expand或成员访问权限($servers.Name(。

最新更新