子串问题,trim,trimend

Troubles with substring, trim, trimend

我正在尝试获取一组电子邮件地址(以用户名@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.

的方法

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

好吧,您需要使用 属性,而不是对象,因此您可能想要执行以下操作:

select -expandproperty userprincipalname

但这会创建一个用户主体名称数组,因此没有其他属性。

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

这将return您列出满足您条件的所有用户名(不带域):

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