powershell - Powershell - 加入多个命令
问题描述
Get-MsolSubscription 为我提供了许可证总数
$Result=""
$Results=@()
$Subscriptions= Get-MsolSubscription | foreach{
$SubscriptionName=$_.SKUPartNumber
$SubscribedOn=$_.DateCreated
$ExpiryDate=$_.NextLifeCycleDate
$Status=$_.Status
$TotalLicenses=$_.TotalLicenses
$Result=@{'Subscription Name'=$SubscriptionName;'Total Licenses'=$TotalLicenses}
$Results+= New-Object PSObject -Property $Result
}
上面的代码工作正常,现在我想将上面命令的输出与 Get-MsolAccountSku 的输出结合起来,因为该命令给了我实际使用的许可证的数量
所以我修改了代码如下:
$Result=""
$Results=@()
$Subscriptions= Get-MsolSubscription | foreach{
$SubscriptionName=$_.SKUPartNumber
$SubscribedOn=$_.DateCreated
$ExpiryDate=$_.NextLifeCycleDate
$Status=$_.Status
$TotalLicenses=$_.TotalLicenses
$consumedLicences = Get-MsolAccountSku | foreach {
$consumed = $_.ConsumedUnits
$name = $_.SkuPartNumber
} | where {$_.name -like $SubscriptionName }
$Result=@{'Subscription Name'=$SubscriptionName;'Total Licenses'=$TotalLicenses;'Used'=$consumed}
$Results+= New-Object PSObject -Property $Result
}
问题是对于所有许可证,我都为已使用的列获得相同的值
Total Licenses Subscription Name Used
-------------- ----------------- ----
48 VISIOCLIENT 9
16 VISIOCLIENT 9
10000 STREAM 9
50 EMSPREMIUM 9
10000 POWERAPPS_INDIVIDUAL_USER 9
解决方案
你的foreach
块Get-MsolAccountSku
永远不会输出任何东西,但它总是$consumed
在每次迭代时覆盖 - 因此重复计数。
将其更改为:
$Results = Get-MsolSubscription | ForEach-Object {
# Get the part number and total licenses
$SubscriptionName = $_.SKUPartNumber
$TotalLicenses = $_.TotalLicenses
# Count used licenses
$consumedLicences = Get-MsolAccountSku | Where-Object {
$_.SKUPartNumber -like $SubscriptionName
} | ForEach-Object {
$_.ConsumedUnits
} |Measure-Object -Sum |Select-Object -Expand Sum
# Output resulting object
[PSCustomObject]@{
'Subscription Name' = $SubscriptionName
'Total Licenses' = $TotalLicenses
'Used' = $consumedLicences
}
}
我冒昧地在这个过程中稍微简化了你的代码,但它的实质是这样的:
$consumedLicences = Get-MsolAccountSku | Where-Object {
$_.SKUPartNumber -like $SubscriptionName
} | ForEach-Object {
$_.ConsumedUnits
} |Measure-Object -Sum |Select-Object -Expand Sum
Where-Object
在这里,我们在执行任何其他操作之前应用过滤- 而来自的每个输出对象Get-MsolAccountSku
仍然具有完整的属性。然后我们ForEach-Object
用来提取 的值ConsumedUnits
,最后我们用来Measure-Object
对所有计数求和(我不清楚是否Get-MsolAccountSku |Where-Object ...
会导致多个匹配)。
如果只有一个,您可以保持原样(一个值的总和就是它自己的值),或者您可以ForEach-Object { ... }
完全删除所有内容:
$consumedLicences = Get-MsolAccountSku | Where-Object {
$_.SKUPartNumber -like $SubscriptionName
} | ForEach-Object {
$_.ConsumedUnits
}
推荐阅读
- javascript - 当我使用 passport-auth0-openidconnect 时,为什么 ensureLogin 不起作用?
- go - 在结构中使用通用切片字段
- excel - 在 word 中运行 VBA 宏以点击下一个记录按钮
- node.js - 从nodeJS文件(使用mongoose从mongodb获取)打印数据到ejs页面
- node.js - 在 Kubernetes 集群上部署的 Nodejs 应用程序上的 502 Bad gateway
- javascript - 反应轮播预览
- autodesk-forge - 如何使用所有 AutoCAD DLL 在设计自动化中使用 accoreconsole.exe 加载自定义 .net dll
- visual-studio-code - VScode C调试问题,找不到对应的c文件
- r - 如何在 R 中增加或减少 MODIS 栅格的分辨率?
- javascript - 在带有 BrowserRouter 的 React JS 中使用字符串列表作为路径创建动态路由