管道中的PowerShell引用对象

时间:2019-10-17 15:15:56

标签: powershell

我正在努力在管道中传递对象。 我一直在解决将它们转换为字符串的问题,但这并不是最有效的处理方式。

$mapi = (Get-CASMailbox -Identity $user | fl mapiEnabled | Out-String ).Split(':')[-1]
if ($mapi -match "True") {
   Set-CASMailbox -Identity $User -MAPIEnabled $false
}   

我真的很想直接访问返回的布尔值,而不是将其转换为字符串

类似地,我一直在使用下面的方法来进行for循环:

$groups = (Get-DistributionGroup | fl name | Out-String -Stream ).Replace("Name : ", "")
foreach ($group in $groups) {
    echo $group
}

两个示例均来自Exchange Online,下面是另一个通用示例:

if (((Get-NetIPInterface -InterfaceAlias $adapters -AddressFamily Ipv4 | fl dhcp | Out-String -Stream ).Trim() -ne "").Replace("Dhcp : ","") -match "Disabled") {
    echo disabled
}

1 个答案:

答案 0 :(得分:4)

我只是想花点时间看看我是否可以帮助您了解管道中正在发生的事情以及@ mathiasR.Jessen和@AdminOfThings注释为什么会对您有所帮助。

$mapi = (Get-CASMailbox -Identity $user | fl mapiEnabled | Out-String ).Split(':')[-1]

破坏了这一行代码的作用:

Get-CASMailbox将返回具有多个属性的对象。 Format-List(fl)仍将返回一个对象,但是现在它已被格式化,因此它的延展性较小。 Out-String将把格式化的列表转换为单个字符串。将这些命令放在括号中可以运行它们,并允许您在生成的字符串对象上执行方法。

使用相同的概念,我们可以使用括号执行Get-CASMailbox命令并获取您要查找的单个属性:

$mapi = (Get-CASMailbox -Identity $user).mapiEnabled

现在,我们将$ mapi设置为命令返回的mapiEnabled属性的值。

希望这会有所帮助!