2014-12-03 124 views
0

您了解编程的一件事总是处理错误。 在这种情况下,我的程序没有错误,但是;似乎没有任何印刷品。 我只需要我的组名和managedby信息在2列中。你能解释为什么没有输出?没有在文本文件中打印

Import-Module ActiveDirectory 

$exportlist = "C:\Temp\managedby.txt" 

Clear-Content $exportlist 

$Header = ` 
"Group ID Name" + "|" + "ManagedBy" 

$Header | Out-File $exportlist -Append 

$list = get-adgroup -properties name, managedby -filter {name -notlike "WA*" -or name -notlike "workstation*"} ` 
| Select name, managedby 

$listing =` 
$list.name + "|" + $list.managedby 

$listing | Out-File $exportlist -Append 

这是什么出来,当我在PowerShell中运行它:

PS F:\>$Header = ` 
>>"Group ID Name" + "|" + "ManagedBy" 
>> 
PS F:\>write-host $Header 
Group ID Name|ManagedBy 
PS F:\>$list = get-adgroup -properties name, managedby -filter {name -notlike "WA*" -or name -notlike "workstation*"} ` 
>>| Select name, managedby 
PS F:\>$listing =` 
>> $list.name + "|" + $list.managedby 
PS F:\>write-host $listing 
|

看起来$listing包含任何内容?

+0

你试过送'$ Header'和'$ listing'出来的屏幕只是为了看他们是否真的包含任何东西? – briantist 2014-12-03 16:29:29

+0

请看我的编辑。唯一打印的是我的“|”行 – narue1992 2014-12-03 16:37:47

+0

因此,*文本文件中没有任何内容*或文本文件中只显示标题*的问题? – briantist 2014-12-03 16:41:05

回答

2

在仔细考虑一下之后:最有可能的情况是您正在使用PowerShell v2,并且Get-ADGroup会产生多个结果。在PowerShell V2中,$list.Name不会扩展为所有数组元素的Name属性的列表,但数组对象的(不存在)属性Name因此导致$null,然后在字符串连接期间将其转换为空字符串。

地产扩张的PowerShell V2:

PS C:\Temp>$PSVersionTable.PSVersion.ToString() 
2.0 
PS C:\Temp>$f = Get-ChildItem 
PS C:\Temp>$f 

    Directory: C:\Temp 

Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
-a---  03.12.2014  20:38   0 a.txt 
-a---  03.12.2014  20:38   0 b.txt 

PS C:\Temp>$f.Name 
PS C:\Temp>$f | select -Expand Name 
a.txt 
b.txt

地产扩张的PowerShell v3的:

PS C:\Temp>$PSVersionTable.PSVersion.ToString() 
3.0 
PS C:\Temp>$f = Get-ChildItem 
PS C:\Temp>$f 

    Directory: C:\Temp 

Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
-a---  03.12.2014  20:38   0 a.txt 
-a---  03.12.2014  20:38   0 b.txt 

PS C:\Temp>$f.name 
a.txt 
b.txt 
PS C:\Temp>$f | select -expand Name 
a.txt 
b.txt

虽这么说,你的目的似乎是要导出的名字和经理AD组分配给一个文件,由|个字符分隔。但是,您尝试的方式太难了。只需使用Export-Csv cmdlet即可轻松完成此操作,该命令允许您指定您喜欢的任何分隔符。

Import-Module ActiveDirectory 

$exportlist = 'C:\Temp\managedby.txt' 

$attr = 'Name', 'ManagedBy' 
$fltr = { Name -notlike "WA*" -or Name -notlike "workstation*" } 

Get-ADGroup -Properties $attr -Filter $fltr | Select $attr | 
    Export-Csv $exportlist -NoType -Delimiter '|' 

如果你想经理,而不是专有名称的名称,使用calculated property解决它:

Get-ADGroup -Properties $attr -Filter $fltr | 
    Select Name, @{n='ManagedBy';e={Get-ADObject -Identity $_.ManagedBy | select -Expand Name}} | 
    Export-Csv $exportlist -NoType -Delimiter '|' 
+0

谢谢。 -noType -Delimiter'|'似乎在做伎俩。欣赏它! – narue1992 2014-12-08 15:15:52