与子串,修剪,trimend的麻烦

时间:2016-11-30 19:10:27

标签: powershell exchange-server

我试图获取一系列电子邮件地址(以username@company.com的形式),该地址来自:

$users = get-MSOLUser -All | where {$_.isLicensed -eq "TRUE" -and $_.Licenses.AccountSKUID -eq "my_license"} | select userprincipalname

只获取每个用户名。我从username@company.com开始,希望最终得到username。我已尝试过使用子字符串,Trim,TrimEnd等的各种方法,并且无法使其中任何一个工作。

$username = $users | %{$_.substring(0,$users.length - 12)}
$users | %{$_.trimend("@company.com")}
$users | %{$_.trimend(12)}

上述所有错误都包含以下两个错误。

方法调用失败,因为[Selected.Microsoft.Online.Administration.User]没有 包含名为substring的方法。

方法调用失败,因为[Selected.Microsoft.Online.Administration.User]没有 包含名为trimend的方法。

我在语法上做错了什么,或者还有别的东西,比如我没有导入的模块,或者我的语法是如何尝试使用数组的?

2 个答案:

答案 0 :(得分:3)

这将返回一个符合您条件的所有用户名(没有域名)的列表:

$users = Get-MSOLUser -All | 
    Where-Object {$_.isLicensed -eq "TRUE" -and $_.Licenses.AccountSKUID -eq "my_license"} | 
    ForEach-Object { $_.userprincipalname -replace '@.*' }

答案 1 :(得分:1)

嗯,你需要使用属性,而不是对象,所以你可能想要做类似的事情:

select -expandproperty userprincipalname

但这将创建一个userprincipalnames数组,因此没有其他属性。

当你运行get-MSOLUser时,你会收到一个带有一堆属性的对象。当你执行select -expandproperty时,你只返回某些属性,而不是对象本身。您将返回system.string个对象。该对象具有您尝试调用的所有方法。