【发布时间】:2019-10-17 15:15:56
【问题描述】:
我正在努力在管道中传递对象。 我一直在解决将它们转换为字符串的问题,但这并不是最有效的处理方式。
$mapi = (Get-CASMailbox -Identity $user | fl mapiEnabled | Out-String ).Split(':')[-1]
if ($mapi -match "True") {
Set-CASMailbox -Identity $User -MAPIEnabled $false
}
我真的很想直接访问返回的 bool 而不是将其转换为字符串
同样,我一直在使用下面做一个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
}
【问题讨论】:
-
停止使用
fl(改用select,或者只是......什么都没有),你所有的问题都会消失:) -
为什么不直接使用
(Get-CASMailbox -Identity $user).mapiEnabled?您可以使用取消引用运算符 (.) 来访问对象属性的值。Get-CASMailbox返回这些对象。或者只是使用@MathiasR.Jessen 建议的Select-Object代替Format-List。
标签: powershell