PowerShell:将对象转换为字符串

PowerShell:将对象转换为字符串,powershell,Powershell,我们有以UsersA-B、UsersC-D等开头的Exchange信息存储,还有一些是在命名约定之外的 $allIS = Get-MailboxDatabase | Where { $_.name -notlike "*Users*" } | Select Identity 我将查找当前用户的信息存储,然后尝试在$allIS数组上进行比较。如果匹配,请执行一些操作 例如,当我输出$allIS[0]的值时,它返回@{Identity=MSCCR

我们有以UsersA-B、UsersC-D等开头的Exchange信息存储,还有一些是在命名约定之外的

$allIS = Get-MailboxDatabase |
             Where { $_.name -notlike "*Users*" } |
             Select Identity
我将查找当前用户的信息存储,然后尝试在$allIS数组上进行比较。如果匹配,请执行一些操作

例如,当我输出$allIS[0]的值时,它返回
@{Identity=MSCCR\CEO\CEO}

我想将这些转换后的字符串放入不同的数组中,然后进行比较。这将是一个动态的信息存储列表来进行比较。但也许这不是最好、最有效的方法。做这个比较最好的方法是什么,因为现在我在这里比较苹果和橙子?

PowerShelly方法 它使用
%
将输出传输到
foreach
循环

更加程序化的方式
这将为您提供一个只包含信息存储名称的简单数组,作为字符串而不是对象。

如果不查看第二部分,很难判断是否可以对其进行优化

但是很容易得到一组简单的身份。在选择时使用
-ExpandProperty
,或使用
foreach{$\.Identity}
而不是选择:

$allIS = Get-MailboxDatabase | ? { $_.name -notlike "*Users*" } | select -expand Identity
$allIS = Get-MailboxDatabase | ? { $_.Name -notlike '*Users*' | foreach { $_.Identity}
当您尝试对不是数组类成员的属性使用“属性取消引用运算符”.”时,它将取消对数组的每个元素的引用

$allIS = (Get-MailboxDatabase | ? { $_.name -notlike "*Users*" }).Identity

我在$allIS变量上做了一个拆分路径,并且能够进行串联来进行字符串比较。这可能不是一种优雅的方法,但它可以工作。此
$allIS |%{[string]$\uuz.Identity}
将数组中的所有对象转换为字符串。那是你想要的吗?是的,那也是!谢谢Gebb!我发誓我以前已经试过这两种方法了,但是现在一切都好了。谢谢你!
$allIS = Get-MailboxDatabase | ? { $_.name -notlike "*Users*" } | select -expand Identity
$allIS = Get-MailboxDatabase | ? { $_.Name -notlike '*Users*' | foreach { $_.Identity}
$allIS = (Get-MailboxDatabase | ? { $_.name -notlike "*Users*" }).Identity