Arrays Powershell将数组格式转换为二维数组

Arrays Powershell将数组格式转换为二维数组,arrays,powershell,automation,Arrays,Powershell,Automation,几天前我遇到了一个问题,我的脚本应该从AD OU提取所有主机名,然后检查每个主机的磁盘空间使用情况和可用空间。因为这是我第一次使用powershell做一些事情,所以我遇到了很多问题。我现在遇到的问题是脚本找不到数组中列出的主机名。我想我发现了为什么它不能工作,因为它使用了错误的主机名。 对于每个主机名,我都会收到错误消息: Write-Warning : Es wurde kein Positionsparameter gefunden, der das Argument "@{Na

几天前我遇到了一个问题,我的脚本应该从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
或成员访问(
$servers.Name
)。

在第一行中使用
选择对象-Expand Name
。您只需要代码其余部分的名称值问题是什么(同时查看标题)?看起来您的诊断是正确的,这可能不是PowerShell问题。显然,相关服务器根本没有响应、不在线或甚至不退出(如果它在AD中,并不意味着它存在)。通过以其他方式连接到相关服务器,尝试从问题中排除PowerShell/WMI。例如,
计算机管理-->计算机管理(本地),右键单击-->连接到另一台计算机。