我试图获取一系列电子邮件地址(以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
的方法。
我在语法上做错了什么,或者还有别的东西,比如我没有导入的模块,或者我的语法是如何尝试使用数组的?
答案 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
个对象。该对象具有您尝试调用的所有方法。