Powershell将Select的输出添加到变量

时间:2015-11-25 12:04:47

标签: powershell variables syntax output pipeline

我想在变量中存储命令Select的输出。这是原始代码:

# OUs to search for servers
"OU=Domain Controllers,$mydomain", "OU=Server,OU=Berlin,$mydomain" | 
# For each OU get Windows Server
ForEach { Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server*' } -Properties OperatingSystem -SearchBase $_ } | 
Select -Exp Name | Add-Content C:\serverfile.txt

在最后一行中,我想将Add-Content更改为将输出添加到变量$ Servers的命令。但是我无法正确使用语法。我试过了:

| Add-Content $Servers

| $Servers

"> $Servers"

$Servers += Select -Exp Name

2 个答案:

答案 0 :(得分:1)

  • Add-Content $Servers - Add-content会期望$servers是文件路径。这不是你想要的。查看Add-Content
  • 的更多信息
  • | $Servers - $servers不是接受管道输入的函数,cmdlet,别名或命令。这不是你想要的。这是一段视频,可以作为understanding the pipeline的开头。不是最好的例子,但它是一个开始。
  • "> $Servers" - 重定向也应该用于文件路径(大多数情况下)。 $servers不是文件路径。这不是你想要的。查看about_redirection
  • 的更多信息

您可以直接将管道输出分配给变量。这就是你能做的。确实存在其他选项,例如在循环内构建数组。这是不必要的。

$servers = "OU=Domain Controllers,$mydomain", "OU=Server,OU=Berlin,$mydomain" | ForEach-Object { 
    Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server*' } -Properties OperatingSystem -SearchBase $_ } | 
    Select-Object -ExpandProperty Name

或者,如果您需要同时输出文件和变量,可以使用Tee-Object

"OU=Domain Controllers,$mydomain", "OU=Server,OU=Berlin,$mydomain" | ForEach-Object { 
    Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server*' } -Properties OperatingSystem -SearchBase $_ } | 
    Select-Object -ExpandProperty Name | Tee-Object -Variable servers | Add-Content "C:\serverfile.txt"

在这两种情况下,$servers都将包含输出。

答案 1 :(得分:0)

您可以创建和数组(例如$ Servers),然后将每个结果添加到其中:

$Servers = @()
"OU=Domain Controllers,$mydomain", "OU=Server,OU=Berlin,$mydomain" | 
# For each OU get Windows Server
ForEach { $Servers += Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server*' } -Properties OperatingSystem -SearchBase $_ | Select -ExpandProperty Name}