我想在变量中存储命令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
答案 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}