代码之家  ›  专栏  ›  技术社区  ›  fenster

使用PowerShell输出不带列标题的数据

  •  27
  • fenster  · 技术社区  · 16 年前

    我希望能够从PowerShell输出数据,而无需任何列标题。我知道我可以使用 Format-Table -HideTableHeaders ,但这会在顶部留下一个空行。

    以下是我的例子:

    get-qadgroupmember 'Domain Admins' | Select Name | ft -hide | out-file Admins.txt
    

    如何消除列标题和空白行?

    我可以添加另一行并执行以下操作:

    Get-Content Admins.txt | Where {$_ -ne ""} | out-file Admins1.txt
    

    但是我能在一条线上完成吗?

    7 回复  |  直到 11 年前
        1
  •  54
  •   Joey Gumbo    16 年前

    在您的情况下,仅选择单个属性时,最简单的方法可能是完全绕过任何格式:

    get-qadgroupmember 'Domain Admins' | foreach { $_.Name }
    

    这会让你得到一个简单的答案 string[] Format-* cmdlet主要用于人的消费,因此其输出不是设计为易于机器可读或可解析的。

    对于多个属性,我可能会选择 -f 格式运算符。类似于

    alias | %{ "{0,-10}{1,-10}{2,-60}" -f $_.COmmandType,$_.Name,$_.Definition }
    

    这并不漂亮,但可以让您轻松、完整地控制输出格式。并且没有空行:-)

        2
  •  39
  •   P-L    6 年前

    Select name ,然后 -ExpandProperty Name 像这样:

    Get-ADGroupMember 'Domain Admins' | Select Name -ExpandProperty Name | out-file Admins.txt
    
        3
  •  36
  •   Jérôme Verstrynge    14 年前

    如果使用“格式表”,则可以使用 -hidetableheaders

        4
  •  7
  •   Lyric Tropsed    7 年前

    -expandproperty不能用于多个对象。您可以使用这个:

    Select-Object Name | ForEach-Object {$_.Name}
    

    如果存在多个值,则:

    Select-Object Name, Country | ForEach-Object {$_.Name + " " + $Country}
    
        5
  •  6
  •   Dominic Caron    8 年前

    在选择对象之后添加参数-expandproperty,它将只返回没有标题的数据。

        6
  •  3
  •   Caleb Jares    14 年前

    Format-* 是供人食用的。如果要写入文件以供机器使用,可能需要使用 Export-*

    • Export-Csv -逗号分隔的值。当你知道这些专栏将会是什么的时候,这真是太棒了
    • Export-Clixml -可以导出整个对象和集合。这对于序列化非常有用。

    Import-Csv Import-Clixml . 我发现,比起发明自己的数据格式,我更喜欢这一点(另外,制作一个 Import-Ini 如果你喜欢的话)。

        7
  •  2
  •   maazza    9 年前

    首先,我们获取命令输出,然后包装它并选择它的一个属性。只有一个,它的“名字”就是我们想要的。因此,我们选择带有“.name”的groups属性,然后输出它。

    到文本文件

     (Get-ADGroupMember 'Domain Admins' |Select name).name | out-file Admins1.txt
    

    (Get-ADGroupMember 'Domain Admins' |Select name).name | export-csv -notypeinformation "Admins1.csv"
    
        8
  •  0
  •   Patrick Burwell    5 年前
    $server = ('*')+(Read-Host -prompt "What Server Context?")+'*'
    $Report = (Get-adcomputer -SearchBase "OU=serverou,DC=domain,DC=com" -filter {name -like $server} -SearchScope Subtree|select Name |Sort -Unique Name) 
    $report.Name | Out-File .\output\out.txt -Encoding ascii -Force
    $Report
    start notepad .\output\out.txt
    

    上面的服务器搜索库。 不确定 您的服务器OU是什么请尝试下面的此功能。。。

    #Function Get-OSCComputerOU($Computername)
    
    {
        $Filter = "(&(objectCategory=Computer)(Name=$ComputerName))"
    
        $DirectorySearcher = New-Object System.DirectoryServices.DirectorySearcher
        $DirectorySearcher.Filter = $Filter
        $SearcherPath = $DirectorySearcher.FindOne()
        $DistinguishedName = $SearcherPath.GetDirectoryEntry().DistinguishedName
    
        $OUName = ($DistinguishedName.Split(","))[1]
        $OUMainName = $OUName.SubString($OUName.IndexOf("=")+1)
        
    #    $Obj = New-Object -TypeName PSObject -Property @{"ComputerName" = $ComputerName
    #                                                     "BelongsToOU" = $OUMainName
    #                                                     "Full" = $DistinguishedName}
        $Obj = New-Object -TypeName PSObject -Property @{"Full" = $DistinguishedName}
    
    
        $Obj
    }
    

    Get-OSCComputerOU Servername 用一个 select -expandproperty Full 过滤器。 然后插入对Searchbase的响应。。。

    多亏了 http://www.jaapbrasser.com

    推荐文章