【发布时间】:2015-12-30 13:45:36
【问题描述】:
我希望 PowerShell 在尝试选择不存在的属性时抛出错误,但我得到的是空列作为输出。示例:
$ErrorActionPreference=[System.Management.Automation.ActionPreference]::Stop;
Set-StrictMode -Version 'Latest'
Get-Process *ex* | Select-Object Id,ProcessName,xxx
Id ProcessName xxx
-- ----------- ---
9084 explorer
11404 procexp
我编写了一个脚本,该脚本通过Import-Csv 导入多个文本文件,但这些文件中的标题可能会更改,并且我最终会将空列加载到系统中。
编辑: 这就是我检查标题是否匹配的方式:
$csv = Import-Csv -Delimiter ';' -Path $file.FullName
$FileHeaders = @(($csv | Get-Member -MemberType NoteProperty).Name)
if (Compare-Object $ProperHeaders $FileHeaders) {'err'} else {'ok'}
我知道这就是 PowerShell 的工作方式,但正如 @Matt 所提到的,Set-StrictMode 文档对我来说确实有点误导。我只希望Select-Object 有某种“-NoNewImplicitProps”或“-ReadOnlyPipeline”开关可以为我完成这项工作:)。感谢您的回答。
【问题讨论】:
-
不要认为你可以这样做,因为这就是 Powershell 的设计方式。如果这成为可能,那么这将打破
$newobj = '' | Select-Object prop1,prop2
标签: powershell powershell-4.0 select-object