将命令的结果传递到另一个命令

问题描述

我正在尝试输出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-000005c230db}”转换为“ System.Nullable`1 [System.Guid]”。错误:“无法处理 参数,因为参数“ obj”的值为空。将参数“ obj”的值更改为非空值。”

现在,我非常确定这是因为GUID是字符串。我尝试使用以下方法将其转换为GUID:

[guid]d$

仍然无济于事。

我可能使这个复杂化了。我想要该脚本的原因不仅是为了获取用户名,而且还希望将来从tenantID获得其他全部流程。

解决方法

目前我无法对其进行测试,但是乍一看,您似乎只需要扩展该属性即可。

您有$pten=Get-MsolPartnerContract -All | Select-Object TenantId

请改为$pten=Get-MsolPartnerContract -All | Select-Object -ExpandProperty TenantId

,

使用Select-Object Property时,最终会得到一个具有该属性名称的对象。在这种情况下,您有两个选择。首先,正如powershellguy所指出的那样,扩展属性以获取值。

$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"}
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...