Powershell 将 Select 的输出添加到变量
Powershell Add Output of Select to Variable
我想将命令 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
您可以创建数组(例如 $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}
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
都将包含输出。
我想将命令 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
您可以创建数组(例如 $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}
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
都将包含输出。