Powershell 将数组格式化为二维数组
Powershell Format Arrays to two dimensional Arrays
几天前我遇到了一个问题,我的脚本应该从 AD OU 中提取所有主机名,然后检查 space 在磁盘上使用和释放每个 space主持人。因为这是我第一次用 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
)。
几天前我遇到了一个问题,我的脚本应该从 AD OU 中提取所有主机名,然后检查 space 在磁盘上使用和释放每个 space主持人。因为这是我第一次用 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
)。