【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维

简介: 【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维

问题描述

编写PowerShell脚本,以多维(3维)数组中第二维度的值进行过滤,并打印出结果

#三维数组源数据
“A”, “11”, “Cheng Du”
“B”, “21”, “Chong Qing”
“C”, “31”, “Shang Hai”
“D”, “41”, “Bei Jing”
“E”, “51”, “Nan Jing”
#从地址中过滤以Chong开头的地区, 结果需要为
B, 21, Chong Qing

PowerShell脚本为:

$CityList = [System.Collections.ArrayList]::new()
$CityList.Add(@(“A”,“11”,“Cheng Du”)) | Out-Null
$CityList.Add(@(“B”,“21”,“Chong Qing”)) | Out-Null
$CityList.Add(@(“C”,“31”,“Shang Hai”)) | Out-Null
$CityList.Add(@(“D”,“41”,“Bei Jing”)) | Out-Null
$CityList.Add(@(“E”,“51”,“Nan Jing”)) | Out-Null
Write-Host "==== 开始过滤 Chong  ==== " -ForegroundColor DarkYellow
$FinalCityList = $CityList | Where-object -filterScript {$_[2] -like "Chong*"}
Write-Host "Final City List 类型" -ForegroundColor Green
$FinalCityList.GetType()
Write-Host "Final City 数量为: " $FinalCityList.Count -ForegroundColor Green
Write-Host ""
Write-Host "==== 循环打印List中所有元素结果 ==== "  -ForegroundColor DarkYellow
foreach( $aaa in $FinalCityList)
{
    Write-Host $aaa[0]','$aaa[1]','$aaa[2]
}
Write-Host ""
Write-Host "==== 直接输出对象的结果 ==== " -ForegroundColor red
$FinalCityList

输出结果 :当过滤结果大于1时,显示正常,当过滤结果为1时,结果显示异常。结果变成了一个一位数组,Count结果为3。

 

这是为什么呢?

 

问题分析

从 $FinalCityList 的打印结果分析,当 Where-Object 查看到结果只有一个的时候,就把结果对象进行了多维到一维的转换。所以结果变为了一个包含三行内容的一位数组。

问题解决

$FinalCityList = @($CityList | Where-object -filterScript {$_[2] -like "Chong*"})

把 Where-Object 方法用 @()  进行对象转换即可。

 

 

完整的PowerShell脚本为:

$CityList = [System.Collections.ArrayList]::new()
$CityList.Add(@(“A”,“11”,“Cheng Du”)) | Out-Null
$CityList.Add(@(“B”,“21”,“Chong Qing”)) | Out-Null
$CityList.Add(@(“C”,“31”,“Shang Hai”)) | Out-Null
$CityList.Add(@(“D”,“41”,“Bei Jing”)) | Out-Null
$CityList.Add(@(“E”,“51”,“Nan Jing”)) | Out-Null
foreach( $ccc in $CityList)
{
    Write-Host $ccc[0]','$ccc[1]','$ccc[2]
}
Write-Host "==== 开始过滤 CityList 中包含 Chong 的城市  ==== " -ForegroundColor Yellow
$FinalCityList = @($CityList | Where-object -filterScript {$_[2] -like "Chong*"})
Write-Host "Final City List 类型" -ForegroundColor Green
$FinalCityList.GetType()
Write-Host "Final City 数量为: " $FinalCityList.Count -ForegroundColor Green
Write-Host ""
Write-Host "==== 循环打印List中所有元素结果 ==== "  -ForegroundColor DarkYellow
foreach( $aaa in $FinalCityList)
{
    Write-Host $aaa[0]','$aaa[1]','$aaa[2]
}
Write-Host ""
Write-Host "==== 直接输出对象的结果 ==== " -ForegroundColor red
$FinalCityList

 

参考文档

数组子表达式运算符:  https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_arrays?view=powershell-7.2#the-array-sub-expression-operator

What does the "@" symbol do in PowerShell?:https://stackoverflow.com/questions/363884/what-does-the-symbol-do-in-powershell

 

 

相关文章
|
11天前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
44 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
11天前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
|
2月前
|
JavaScript 前端开发 开发者
讲述Vue框架中用于对象响应式变化的Object.defineProperty函数。
综上所述,Vue.js通过 `Object.defineProperty()`提供了强大的响应式能力,使得状态管理变得简洁高效。这种能力是Vue.js受到广大开发者青睐的重要原因之一。尽管Vue 3.x使用Proxy替代了该方法,但对于Vue 2.x及其之前版本,`Object.defineProperty()`是理解Vue.js内部工作机制不可或缺的一部分。
128 27
|
6月前
|
JSON 数据格式
【Azure Fabric Service】演示使用PowerShell命令部署SF应用程序(.NET)
本文详细介绍了在中国区微软云Azure上使用Service Fabrics服务时,通过PowerShell命令发布.NET应用的全过程。由于Visual Studio 2022无法直接发布应用,需借助PowerShell脚本完成部署。文章分三步讲解:首先在Visual Studio 2022中打包应用部署包,其次连接SF集群并上传部署包,最后注册应用类型、创建实例并启动服务。过程中涉及关键参数如服务器证书指纹和服务端证书指纹的获取,并附带图文说明,便于操作。参考官方文档,帮助用户成功部署并运行服务。
210 73
|
6月前
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
187 1
|
8月前
|
安全 Java
Object取值转java对象
通过本文的介绍,我们了解了几种将 `Object`类型转换为Java对象的方法,包括强制类型转换、使用 `instanceof`检查类型和泛型方法等。此外,还探讨了在集合、反射和序列化等常见场景中的应用。掌握这些方法和技巧,有助于编写更健壮和类型安全的Java代码。
459 17
|
6月前
|
前端开发 数据处理
对象数据的读取,看这一篇就够了!Object.keys()、Object.values()和Object.entries()用法详解;如何获取对象原型链上的属性
Object.keys()、Object.values()和Object.entries()都是利于对象操作的便捷方法,能有效提升数据处理的效率。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
10月前
|
JavaScript 前端开发
`Object.create()` 方法的参数
【10月更文挑战第29天】`Object.create()` 方法的参数提供了多种创建对象和控制对象属性及继承关系的方式,开发人员可以根据具体的需求灵活运用,以实现更高效、更符合设计要求的对象创建和继承机制。
|
10月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
401 4
|
10月前
|
设计模式
在实际开发中,什么时候应该使用 `new` 关键字,什么时候应该使用 `Object.create()` 方法?
【10月更文挑战第29天】`new` 关键字适用于创建具有特定类型和初始化逻辑的对象实例,以及实现基于原型链的继承;而 `Object.create()` 方法则适用于基于现有对象创建相似对象、避免构造函数的副作用、创建具有特定原型链的对象等场景。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象,以实现更高效、更灵活的代码结构。

热门文章

最新文章