如何在 PowerShell 中导出到 csv 之前进行拆分

问题描述 投票:0回答:2

我有这个简单的脚本,我想知道如何拆分 WebUrl 值,添加一个名为“UserID”的新列并将其添加到其中。

现在看起来像这样

DisplayName      WebUrl
John Smit        http://www.web.com/personal/klmno_gmail_com

我正在尝试在分割 WebUrl 后添加一个像这样的新列。 URL 格式将始终保持一致。任何帮助或建议将非常感激。

DisplayName      WebUrl                                UserID
John Smit        http://www.web.com/personal/KLMNO_gmail_com    KLMNO

        $AllSites = Get-MGSite -All
        $odSites = $AllSites |?{$_.Weburl.contains("/personal/")}
        $odSites | Select-Object -Property DisplayName, WebUrl | export-csv $Global:Export -NoTypeInformation

powershell split azure-powershell powershell-4.0
2个回答
1
投票

Select-Object 接受特殊格式的哈希,可以在管道对象上动态形成新属性。

这是一个快速而肮脏的例子。

PS> $odSites | Select-Object DisplayName, WebUrl, @{label="UserID";expression={$_.WebUrl.split('/')[3].split('_')[0]}}

DisplayName WebUrl                             UserID
----------- ------                             ------
John Smit   http://www.web.com/klmno_gmail_com klmno

您还可以使用 Add-Member -MemberType ScriptProperty

PS> $odSites | Add-Member -MemberType ScriptProperty -Name UserID -Value {$this.WebUrl.split('/')[3].split('_')[0]}

PS> $odSites

DisplayName WebUrl                             UserID
----------- ------                             ------
John Smit   http://www.web.com/klmno_gmail_com klmno

0
投票

另一种方法是使用正则表达式。

PS C:\> $odsites = [PSCustomObject]@{DisplayName = 'John Smit'; WebUrl = 'http://www.web.com/personal/KLMNO_gmail_com'}
PS C:\> $odsites | Select-Object -Property DisplayName,WebUrl,@{n='UserId';e={$_.WebUrl -replace '^.*/(.+?)_.*','$1'}}

DisplayName WebUrl                                      UserId
----------- ------                                      ------
John Smit   http://www.web.com/personal/KLMNO_gmail_com KLMNO
© www.soinside.com 2019 - 2024. All rights reserved.