PowerShell 默认执行不区分大小写的比较,因此要回答您问题的第一部分,您需要进行区分大小写的比较,即-ceq。
$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests'
($Type -ceq 'MY' -or $Type -ceq 'OLD' -or $Type -ceq 'NEWTest' -or $Type -ceq 'Old_Tests')
虽然一个更简单的解决方案是使用区分大小写的 contains -ccontains:
('MY', 'OLD', 'NEWTest', 'Old_Tests' -ccontains $Type)
您可以通过以下方式纠正此情况:
$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests'
If ('MY', 'OLD', 'NEWTest', 'Old_Tests' -cnotcontains $Type){
If ('MY', 'OLD', 'NEWTest', 'Old_Tests' -contains $Type){
$TextInfo = (Get-Culture).TextInfo
$Type = Switch ($Type) {
{$_ -in 'MY','OLD'} { $Type.ToUpper() }
'NEWTest' { $Type.Substring(0,4).ToUpper() + $Type.Substring(4,3).ToLower() }
'Old_Tests' { $TextInfo.ToTitleCase($Type) }
}
} Else {
Write-Warning 'You didnt enter one of: MY, OLD, NEWTest, Old_Tests'
}
}
Write-Output $Type
说明:
首先我们测试四个允许单词的大小写是否正确(-cnotcontainsCase Sensitive Not Contains),如果是,我们什么也不做。如果大小写不正确,那么我们测试文本是否正确(不关心区分大小写-contains)。
如果文本是正确的,那么我们使用 Switch 语句来处理我们想要调整案例的不同场景:
第一个 switch 测试匹配前两个单词,并使用 ToUpper() 字符串方法简单地将它们大写。
第二个 switch 测试使用字符串方法SubString 来获取从第一个字符 (0) 开始、长度为 4 个字符的字符串子集。我们使用 ToUpper 将其大写,然后添加字符串的下 3 个字符,从第 4 个字符开始,我们使用 ToLower() 强制将其变为小写。
我们使用从 get-culture cmdlet 获取的 .NET 方法处理的最终切换测试,该方法允许我们对字符串进行标题大小写(将每个单词的第一个字母大写)。
如果输入的文本与我们使用的选项之一不匹配 write-warning(可能需要 PowerShell 4 或更高版本,如果您没有此设置,请将其更改为 write-host)向控制台打印警告。
最后,无论输入什么,我们都会使用Write-Output 发送到标准输出。