在Powershell中输出foreach循环

时间:2015-03-31 19:03:02

标签: powershell

我正在尝试从计算机名称的CSV文件中获取计算机及其OU的列表

Add-PSSnapin quest.activeroles.admanagement

$results = @()
$computers = Get-Content "computers.csv"

foreach ($computer in $computers)
{
    $results += Get-QADComputer $computer | select name, parentcontainer
}

$results = Export-CSV -path "computerswithous.csv"

但它错误地要求我提供价值。如何将此数据简单地输出到CSV文件?

2 个答案:

答案 0 :(得分:1)

你没有在帖子中包含它,但这是你得到的:

cmdlet Export-Csv at command pipeline position 1
Supply values for the following parameters:
InputObject: 

简单回答是这一行

$results = Export-CSV -path "computerswithous.csv"

最有可能是这个

$results | Export-CSV -path "computerswithous.csv"

在您的示例中,Export-CSV没有输入数据,这是您的提示(而非错误)请求的内容。您实际上想要将$results传输到CSV文件。

您也可以取消该构造,只需使用标准管道即可获得所需内容。

Add-PSSnapin quest.activeroles.admanagement

Get-Content "computers.csv" | ForEach-Object{Get-QADComputer $_} | 
    Select Name,ParentContainer | Export-CSV -Path "computerswithous.csv" -NoTypeInformation

答案 1 :(得分:0)

根本不需要中间收集($results)。只需将foreach循环包装在sub-expression中,然后将其发送到管道。

Add-PSSnapin quest.activeroles.admanagement

$computers = Get-Content "computers.csv"

$(foreach ($computer in $computers)
{
  Get-QADComputer $computer | select name, parentcontainer
}) | Export-CSV -path "computerswithous.csv"