直接引用Powershell2.0中的属性 [英] Directly Referencing Properties in Powershell 2.0

查看:8
本文介绍了直接引用Powershell2.0中的属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在今天早上编写的脚本中遇到了一个错误,在该脚本中,我没有从选择字符串表达式获得输出。经过一段时间的尝试后,我意识到这个表达式不会在v2.0中返回匹配的值,而会在我最初编写它的v4.0中返回。

($log | Select-String "[CIsoCreator] Creating iso file" -AllMatches | Select-Object -ExpandProperty line -Last 1 | Select-String "([A-Z]:)(.*\)*.*.iso").matches.value

在尝试了几种方法后,我最终得到了它,它确实按预期返回。

($log | Select-String "[CIsoCreator] Creating iso file" -AllMatches | Select-Object -ExpandProperty line -Last 1 | Select-String "([A-Z]:)(.*\)*.*.iso").matches | select -expandproperty value

在我看来,v2.0中有一些不同的规则来管理何时可以直接引用属性,但我一直找不到提到这一点的地方。

有没有人知道这在不同版本之间是如何工作的?

推荐答案

这是由于PowerShell3.0版中引入的语言行为更改-从"What's new in PowerShell 3.0" release notes

Windows PowerShell语言增强

Windows PowerShell3.0包括许多旨在简化其语言的功能, 更容易使用,并避免常见错误。改进措施包括 属性枚举,标量对象上的计数和长度属性, 新的重定向操作符、$Using Scope修饰符、PSItem Automatic 变量、灵活的脚本格式、变量的属性 简化的属性参数、数字命令名称、 停止解析运算符、改进的数组溅射、新的位运算符 有序词典、PSCustomObject强制转换和改进 基于注释的帮助。

(我添加的重点)

属性枚举允许.引用运算符解析数组表达式的各个成员的属性,即使数组本身没有这样的属性:

$Things = 1..3 |%{ New-Object psobject -Property @{Prop = $_} }
$Things.Prop   # Starting with version 3.0, this outputs the array 1,2,3 
               # In PowerShell version 2.0, this will throw an error 
               # because [Object[]] ($Things) has no such property

这篇关于直接引用Powershell2.0中的属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆