如何解决将命令的结果传递到另一个命令
我正在尝试输出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"}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。