从 PowerShell 使用 Select-Object 时如何排除标头?

Rub*_*_PH 2 powershell

我在 Powershell 上使用 Get-ADUser 来检索 Title 属性列表,然后使用 Add-Content 将其提供给文件。该脚本在多个 ADSearchBase 之间进行迭代,因此提要文件已预先准备好所需的标头。但是,当脚本针对每个 ADSearchBase 运行时,还会在源文件中添加多个标头。

请注意,我将提取多个属性,下面的示例仅针对 1 个属性。

生成的文件将被馈送到应用程序,因此有格式要求。

$ADFilter = "objectCategory -eq 'Person'"

Set-Content -Path feedfile.txt -Value "sym"

$ADSearchBases = @("OU=test1,DC=ABC,DC=ABC","OU=test2,DC=DEF,DC=ABC")
foreach ($ADSearchBase in $ADSearchBases) {
    Get-ADUser -Server $DomainController -Credential $myCredentials -SearchBase $ADSearchBase -Filter $ADFilter -Properties 'Title' |
        Select-Object title |
        Add-Content feedfile.txt
}
Run Code Online (Sandbox Code Playgroud)

当前结果

sym  
title  
Employee  
Manager  
title  
Sales Clerk  
Cashier
Run Code Online (Sandbox Code Playgroud)

预期结果

sym  
Employee  
Manager  
Sales Clerk  
Cashier
Run Code Online (Sandbox Code Playgroud)

San*_*zon 5

这是针对您的问题的改进解决方案。为了提高脚本的性能,避免Add-Content进入循环非常重要。

如果您想使用获取属性Select-Object,可以使用-ExpandProperty. IE:

Select-Object -ExpandProperty title
Run Code Online (Sandbox Code Playgroud)

或者通过成员访问枚举,如本例所示:

$ADFilter = "objectCategory -eq 'Person'"
$ADSearchBases = @(
    "OU=test1,DC=ABC,DC=ABC"
    "OU=test2,DC=DEF,DC=ABC"
)

$hash = @{
    Server     = $DomainController
    Credential = $myCredentials
    Filter     = $ADFilter
    Properties = 'Title'
}

$result = foreach($searchBase in $ADSearchBases) {
    $hash.SearchBase = $searchBase
    (Get-ADUser @hash).title
}

Set-Content -Path feedfile.txt -Value "sym"
Add-Content -Path feedfile.txt -Value $result
Run Code Online (Sandbox Code Playgroud)