Arrays 将命令的结果管道化到另一个命令中

Arrays 将命令的结果管道化到另一个命令中,arrays,powershell,guid,Arrays,Powershell,Guid,我正在尝试输出powershell命令的结果(租户的Nameley GUID),然后基于此显示结果 目前我有以下代码 function get-tenantusers{ begin { $pten=@() $pten=Get-MsolPartnerContract -All | Select-Object TenantId $pten } process { write-host "processstart" foreach ($d in $

我正在尝试输出powershell命令的结果(租户的Nameley GUID),然后基于此显示结果

目前我有以下代码

function get-tenantusers{

begin {
$pten=@()
$pten=Get-MsolPartnerContract -All | Select-Object TenantId
        $pten }
process {
    write-host "processstart"
    foreach ($d in $pten){
        get-Msoluser -TenantId $d
    }

        }
end { write-host "end"}
}
当我运行函数时,我得到输出:

Get-MsolUser:无法绑定参数“TenantId”。无法将值“@{TenantId=000000-9e1c-0000-8305-00000 5C230DB}”转换为类型“System.Nullable`1[System.Guid]”。错误:“无法处理 参数,因为参数“obj”的值为null。请将参数“obj”的值更改为非null值。“

现在我很确定这是因为GUID是一个字符串。我已尝试使用以下命令将其转换为GUID:

[guid]d$
还是没有用


我可能把事情复杂化了。我想要这个脚本的原因不仅仅是为了获取用户名,而且是为了将来从tenantID获得一大堆其他进程。

我现在无法测试它,但乍一看,您似乎只需要扩展属性

您有
$pten=Get MsolPartnerContract-All |选择对象TenantId


改为执行此操作
$pten=Get MsolPartnerContract-All | Select Object-ExpandProperty TenantId

当您使用
选择对象属性
时,您将得到一个具有该属性名称的对象。在这种情况下,您有两种选择。首先,如前所述,展开属性以获取值

$pten=Get-MsolPartnerContract -All | Select-Object -ExpandProperty TenantId
这将把$d变量中的实际值放入循环中。另一个选项是仅通过属性名再次引用该值

function get-tenantusers{

begin {
$pten=@()
$pten=Get-MsolPartnerContract -All | Select-Object TenantId
        $pten }
process {
    write-host "processstart"
    foreach ($d in $pten){
        get-Msoluser -TenantId $d.TenantId
    }

        }
end { write-host "end"}
}