2014-12-03 142 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