我有这个简单的脚本,我想知道如何拆分 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
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
另一种方法是使用正则表达式。
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