如何解决PowerShell Where-Object - 没有返回 - 我一定做错了什么
我运行以下命令并没有收到任何回报 - 我查看了 reg 并验证了显示名称是否存在。知道我做错了什么吗?
$OfficeYearsToLookFor = @(
'2010','2013','2016','2019')
$status = (Get-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' |
Where-Object {(($_.DisplayName -contains 'Office') -and ($_.DisplayName -contains 'Microsoft') -and ( $OfficeYearsToLookFor -contains $_.DisplayName )) } |
Select-Object DisplayName,DisplayVersion,UninstallString )
$status
Write-Output "Status: $status"
解决方法
您可能使这个用例过于复杂。只需使用简单的 RegEx 匹配即可。 Where-Object
语句并不是真正需要的。例如:
RegEx 匹配获取所有匹配字符串和数字模式的内容
(Get-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*') -match '.*Microsoft.*Office.*\d{4}.*' |
Select-Object -Property DisplayName,DisplayVersion,UninstallString
# Results
<#
DisplayName DisplayVersion UninstallString
----------- -------------- ---------------
Microsoft Project - en-us 16.0.13801.20360 "C:\Program Files\...
Microsoft Office Professional Plus 2016 - en-us 16.0.13801.20360 "C:\Program Files\...
...
Office 16 Click-to-Run Licensing Component 16.0.13801.20360 MsiExec.exe /...
...
#>
RegEx 匹配以获取与字符串和数字模式匹配的所有内容,并仅选择所需的属性和年份字符串匹配的行
((Get-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*') -match '.*Microsoft.*Office.*\d{4}.*' |
Select-Object -Property DisplayName,UninstallString ) -match '2010|2013|2016|2019'
# Results
<#
DisplayName DisplayVersion UninstallString
----------- -------------- ---------------
Microsoft Office Professional Plus 2016 - en-us 16.0.13801.20360 "C:\Program Files\...
#>
,
或者你可以使用 get-package:
public async Task<IActionResult> OnPostDeleteHourLineAsync(int? id)
{
return new RedirectToPageResult("Index");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。