首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正在为CSV文件添加标头

正在为CSV文件添加标头
EN

Stack Overflow用户
提问于 2020-08-08 07:42:38
回答 2查看 83关注 0票数 2

我正在导出传输规则中的域,但输出不包含报头,因此无法正确导出为CSV。

尝试以下代码:

代码语言:javascript
运行
复制
$CurrentDomains = (Get-TransportRule "domain block").SenderDomainIs

这将输出以下内容:

代码语言:javascript
运行
复制
PS C:\Users\user> $CurrentDomains
chess.com
jen.com
bob.com
joe.com
irish.com
ND.com
goirish.com
fieldnotes.com

正如您所看到的,没有"title“,所以当我运行export-csv时,它只是显示为数字:

代码语言:javascript
运行
复制
$currentdomains | export-csv c:\temp\domains.csv -notype

CSV的输出如下所示:

代码语言:javascript
运行
复制
Length
9
7
7
7
7
9
6
11
14

我需要以Domain作为标题的输出如下所示:

代码语言:javascript
运行
复制
Domain
chess.com
domain2.com
domain3.com
domain4.com
fieldnotes.com
goirish.com
mydomain.com

我怎样才能做到这一点呢?

EN

回答 2

Stack Overflow用户

发布于 2020-08-08 08:27:51

Olaf的评论应该已经很好地解决了这个问题。这是另一种方式,只是做他建议的不同的方式。

代码语言:javascript
运行
复制
Get-TransportRule -Identity 'domain block' | 
    select-Object -ExpandProperty SenderDomainIs | 
        Foreach {
            [pscustomobject]@{'Domain' = $_}
        } | Export-Csv c:\temp\domains.csv -notype

CSV内容

代码语言:javascript
运行
复制
get-content C:\temp\domains.csv

"Domain"
"chess.com"
"jen.com"
"bob.com"
"joe.com"
"irish.com"
"ND.com"
"goirish.com"
"fieldnotes.com"
票数 2
EN

Stack Overflow用户

发布于 2020-08-08 08:35:21

按如下方式导出:

代码语言:javascript
运行
复制
$currentdomains | 
    ForEach-Object { return [PSCustomObject]@{Domain = $_}} | 
    Export-Csv ...

说明:Export-Csv导出对象的属性,而不是对象本身。

因为您的$currentdomainsSystem.String的列表,而System.String只包含Length属性,所以会将其导出。

因此,要导出字符串值,您必须导出一些对象,这些对象具有属性Domain (或您想要任何其他属性),并且该属性的值是感兴趣的字符串。

在PowerShell中创建此对象的最简单方法是使用从System.Hashtable (也称为键值集合@{ })到PSCustomObject的转换。键成为PSCustomObject的属性,值成为它的属性的值。

因此,使用ForEach-Object { return [PSCustomObject]@{Domain = $_}}将字符串包装到PSCustomObject对象中,该对象具有单个(在其他情况下可能是多个)属性Domain

Export-Csv枚举PSCustomObject的属性,根据它们的名称创建列(在本例中,您只有Domain属性,所以CSV中只有一个列Domain ),并且作为一个值,它使用属性的.ToString()方法。

您的Domain属性的类型为System.String,因此System.String::ToString()返回string本身。

另一种方式:

代码语言:javascript
运行
复制
(Get-TransportRule "domain block") | 
    ForEach-Object { return [PSCustomObject]@{Domain = $_.SenderDomainIs}} | 
    Export-Csv ...

另一种方式:

代码语言:javascript
运行
复制
(Get-TransportRule "domain block") | 
    Select-Object -Property @( 
        @{ 
            Label = 'Domain'
            Expression = { return $_.SenderDomainIs }
        },
        'SenderDomainIs' # This line is for example:
        # There can be other properties from Get-TransportRule, by their name, like "SenderDomainIs" or by Label-Expression conversion
        ) | 
    Export-Csv ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63310423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档