- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试执行一些简单的if语句,但是所有基于[Microsoft.Management.Infrastructure.CimInstance]的较新cmdlet似乎都没有公开.count方法?
$Disks = Get-Disk
$Disks.Count
[Array]$Disks = Get-Disk
$Disks.Count
(Get-Services).Count
$PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue}
Else If ($PageDisk.Count -gt 1) {Write-Host "Too many drives found, manually select it."}
Else If ($PageDisk.Count -eq 1) { Do X }
[Array]$PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue}
Else If ($PageDisk.Count -gt 1) {Write-Host "Too many drives found, manually select it."}
Else If ($PageDisk.Count -eq 1) { Do X }
$PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
If ($PageDisk[0] -eq $Null) {Write-Host "No suitable drives."; Continue}
Else If ($PageDisk[1] -ne $Null) {Write-Host "Too many drives found, manually select it."}
Else If (($PageDisk[0] -ne $Null) -and (PageDisk[1] -eq $Null)) { Do X }
$PageDisk = @(Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)})
If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue}
Else If ($PageDisk.Count -gt 1) {Write-Host "Too many drives found, manually select it."}
Else If ($PageDisk.Count -eq 1) { Do X }
最佳答案
在PSv3 +中,通过统一处理标量和集合,任何对象-甚至$null
-都应具有.Count
属性(并且,除了$null
之外,还应支持使用[0]
进行索引)。
如果出现任何不支持上述内容的对象,则应视为错误。
例如,未按这些规则播放的[pscustomobject]
实例就是known bug。
由于我不知道上述错误是否与[Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Disk]
输出的Get-Disk
实例有关,并且由于Get-Disk
(至少当前)仅在Windows PowerShell中可用,因此建议您在uservoice.com上提交单独的错误。
仅在必要时使用数组子表达式运算符@(...)
:
.Count
属性,则为
@(...)
而不是[Array] ...
/ [object[]] ...
-@()
是PowerShell惯用语,更加简洁,从语法上更简单。@()
技术上会创建现有数组的(浅)副本,因此在处理潜在的大型数组时,您可能更喜欢[Array]
。@(...)
和[Array] ...
通常不等同于,就像PetSerAl在对该问题的评论中的有用示例所示;改编他的例子之一:@($null)
返回一个单项数组,其唯一元素是$null
,而[Array] $null
不起作用(保持$null
)。@()
的这种行为与其目的一致(请参见下文):由于$null
不是数组,因此@()
将其包装为一个数组(结果是[System.Object[]]
实例,其中$null
作为唯一元素)。@()
与New-Object
创建的数组和集合的行为可能令人惊讶-参见下文。@(...)
的目的及其工作方式:@()
的用途array-subexpression operator 可以确保将表达式/命令的结果视为数组,即使它恰好是标量(单个对象)。
@()
不构造数组。相反,它保证结果为一;因此,
@( @( 1 ) )
例如与
@( 1 )
和
, 1
相同。
@()
的行为如下:向PetSerAl表示感谢。
,
,array constructor operator和构造一个数组,从而优化@()
到@(1, 2)
:1, 2
与@(, 1)
相同,而, 1
与,
相同。 System.Object[]
构造的数组-这会产生@( ..., ..., ...)
数组-此优化很有用,因为它节省了不必要的步骤:先展开该数组,然后重新打包(请参见下文)。@()
构造数组的广泛且先前效率低下的做法所引起的,这是由于错误地认为需要[int[]]
来构造数组而引起的。 @([int[]] (1, 2)).GetType().Name
(此行为已在 PowerShell [Core] 6+和更高版本中得到了纠正。较旧的Windows PowerShell版本不受影响();例如。,Int32[]
产生@()
。这是System.Object[]
返回除@([int[]] (1, 2))[-1] = 'foo'
之外的其他内容的唯一情况,并且假定它总是会导致意外错误和副作用;例如。:$a = [int[]] (1, 2); $b = @([int[]] $a)
中断。@(...)
意外地不会创建新数组-请参阅this GitHub issue。 [System.Object[]]
中的(第一个)语句是一个恰好是一个集合的表达式,则该集合被枚举;照原样收集命令的输出(通常是一对一的流);在这两种情况下,对象的最终计数决定了行为:@('foo').GetType().Name
的单元素/空数组中。Object[]
产生@('foo').Count
,而1
产生'foo'.Count
(尽管如上所述,在PSv3 +中,您可以直接使用@( & { } ).Count
)。0
产生[System.Management.Automation.Internal.AutomationNull]::Value
(执行一个空脚本块将输出“空集合”@()
)New-Object
调用的 @(New-Object System.Collections.ArrayList).Count
创建了一个数组/集合输出,该数组/集合输出包装在单元素外部数组中。1
产生System.Object[]
-空数组列表包装在单元素New-Object
实例中。 @()
由于是命令(例如cmdlet调用)而无法展开,因此@([system.collections.arraylist]::new()).Count
仅看到单个项目(恰好是数组/集合),因此将其包装单项数组。 0
产生@()
;表达式输出一个空集合,该集合将展开为不包含任何项目的结果,并将System.Object[]
重新打包为一个空(...)
数组。New-Object
)与New-Object
一起使用-将@((New-Object System.Collections.ArrayList)).Count
命令转换为表达式-会产生相同的结果:0
也产生[System.Object[]]
。 $arr = @(Get-ChildItem *.txt)
)返回;例如。:Get-ChildItem
在System.Object[]
数组$arr = [int[]] (1, 2); @($arr)
的一对一流输出[int[]]
枚举$arr
数组System.Object[]
,然后将元素重新打包为System.Object[]
数组。 [array]
类型的新数组中; 有效的替代方法是强制转换为[array] $result = ...
(也可用于命令):ojit_code 关于arrays - 没有 '.Count'属性的对象-使用@()(数组子表达式运算符)与[Array]类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45089739/
我正在用 yacc/bison 编写一个简单的计算器。 表达式的语法看起来有点像这样: expr : NUM | expr '+' expr { $$ = $1 + $3; } | expr '-'
我开始学习 lambda 表达式,并在以下情况下遇到了以下语句: interface MyNumber { double getValue(); } MyNumber number; nu
这两个 Linq 查询有什么区别: var result = ResultLists().Where( c=> c.code == "abc").FirstOrDefault(); // vs. va
如果我们查看 draft C++ standard 5.1.2 Lambda 表达式 段 2 说(强调我的 future ): The evaluation of a lambda-expressio
我使用的是 Mule 4.2.2 运行时、studio 7.5.1 和 Oracle JDK 1.8.0_251。 我在 java 代码中使用 Lambda 表达式,该表达式由 java Invoke
我是 XPath 的新手。我有网页的html源 http://london.craigslist.co.uk/com/1233708939.html 现在我想从上面的页面中提取以下数据 完整日期 电子
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我将如何编写一个 Cron 表达式以在每天上午 8 点和下午 3:30 触发?我了解如何创建每天触发一次的表达式,而不是在多个设定时间触发。提前致谢 最佳答案 你应该只使用两行。 0 8 * * *
这个问题已经有答案了: What do 3 dots next to a parameter type mean in Java? (9 个回答) varargs and the '...' argu
我是 python 新手,在阅读 BeautifulSoup 教程时,我不明白这个表达式“[x for x in titles if x.findChildren()][:-1]”我不明白?你能解释一
(?:) 这是一个有效的 ruby 正则表达式,谁能告诉我它是什么意思? 谢谢 最佳答案 正如其他人所说,它被用作正则表达式的非捕获语法,但是,它也是正则表达式之外的有效 ruby 语法。 在
这个问题在这里已经有了答案: Why does ++[[]][+[]]+[+[]] return the string "10"? (10 个答案) 关闭 8 年前。 谁能帮我处理这个 JavaSc
这个问题在这里已经有了答案: What is the "-->" operator in C++? (29 个答案) Java: Prefix/postfix of increment/decrem
这个问题在这里已经有了答案: List comprehension vs. lambda + filter (16 个答案) 关闭 10 个月前。 我不确定我是否需要 lambda 或其他东西。但是,
C 中的 assert() 函数工作原理对我来说就像一片黑暗的森林。根据这里的答案https://stackoverflow.com/a/1571360 ,您可以使用以下构造将自定义消息输出到您的断言
在this页,John Barnes 写道: If the conditional expression is the argument of a type conversion then effec
我必须创建一个调度程序,它必须每周从第一天上午 9 点到第二天晚上 11 点 59 分运行 2 天(星期四和星期五)。为此,我需要提供一个 cron 表达式。 0-0 0-0 9-23 ? * THU
我正在尝试编写一个 Linq 表达式来检查派生类中的属性,但该列表由来自基类的成员组成。下面的示例代码。以“var list”开头的 Process 方法的第二行无法编译,但我不确定应该使用什么语法来
此 sed 表达式将输入字符串转换为两行输出字符串。两条输出行中的每一行都由输入的子串组成。第一行需要转换成大写: s:random_stuff\(choice1\|choice2\){\([^}]*
我正在使用 Quartz.Net 在我的应用程序中安排我的工作。我只是想知道是否可以为以下场景构建 CRON 表达式: Every second between 2:15AM and 5:20AM 最
我是一名优秀的程序员,十分优秀!