文本文件中没有打印任何内容

时间:2014-12-03 16:08:12

标签: powershell output

您学习编程的一件事总是处理错误。 在这种情况下,我的程序没有错误;什么都没有打印。 我只想在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什么都不包含?

1 个答案:

答案 0 :(得分:2)

在考虑了更多关于它之后:最可能的情况可能是您正在使用PowerShell v2而Get-ADGroup会产生多个结果。在PowerShell中,v2 $list.Name不会扩展到所有数组元素的Name属性列表,而是扩展到数组对象的(不存在)属性Name,从而导致{{1} },然后在字符串连接期间转换为空字符串。

PowerShell v2中的属性扩展:

$null

PowerShell v3中的属性扩展:

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

话虽如此,您的目标似乎是将AD组的名称和管理员导出到一个由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个字符分隔的文件中。但是,你正在努力尝试方式。您可以使用Export-Csv cmdlet轻松完成此操作,该cmdlet允许您指定所需的分隔符。

|

如果您想要经理的名称而不是专有名称,请使用calculated property解析它:

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 '|'