【问题标题】:PowerShell Isn't Parsing Data as Expected // Basic PowerShell Operator QuestionPowerShell 未按预期解析数据 // 基本 PowerShell 运算符问题
【发布时间】:2022-01-05 23:30:38
【问题描述】:

关于某些运算符的正确使用,我有一个非常棘手的问题。

我正在编写一个从 CSV 中提取数据的脚本。该脚本要求用户输入位置#,然后应该输出其服务器的 IP。

脚本按预期工作,除了位置编号还包含其他文本(如数字或特殊字符)的行。

这是一个示例 CSV 来说明我的问题:

Loc#,State,Server IP
1,NY,10.0.0.1
2,CA,10.0.0.2
3,WA,10.0.0.3
4 (inp),KY,10.0.0.4

我的脚本看起来像这样:

$CSV = import-csv C:\users\Self\MyProject.csv

$location = read-host "enter the location #"

foreach( $row in $CSV){

if($row.loc# -eq $location)
{
write-host $row.'Server IP'
}

现在,除非用户选择位置 4,否则此脚本将按预期工作。如果用户选择位置 4,则 $location 变量留空。

好的,这有点道理,因为我使用的是 -eq 运算符。但即使我使用 -contains 运算符,我也会得到相同的结果。

这是显示我的问题的另一种方式:

$number = "10 ten"

 if ($number -contains "10"){ (Write-Host "true")} else{ write-host "false"}

false

现在,既然 $number 变量确实包含“10”,为什么输出不显示为“true”?

非常感谢任何帮助, 谢谢

【问题讨论】:

  • 尝试使用-match 运算符
  • 如果你选择-match,那么我会选择-match “^$location”
  • 我愿意-match "^$location\b"
  • 谢谢大家! -match 运算符成功了。

标签: powershell csv operators


【解决方案1】:

看起来,Location 可以有一个随机值,而不仅仅是数字,通常你可以使用-match,正如Mahmoud Moawad 在他的评论中指出的那样,但这也可能会给你带来问题,因为没有可以遵循的特定模式也没有明确的方法可以过滤特定值。我个人会做的是给用户一个列表,他可以在其中通过 Index 选择 Location

$csv = Import-Csv C:\users\Self\MyProject.csv
$csv.foreach({
    begin
    {
        '- Choose a location:'
        $i = 0
        $map = @{}
    }
    process
    {
        $map[(++$i)] = $_
        "[$i] - {0}" -f $_.'Loc#'
    }
})
$question = { Read-Host 'Index' }
while($true)
{
    $index = (& $question) -as [int]
    if($index -ge 1 -and $index -le $csv.Count)
    {
        break
    }
    'Input must be between 1 and {0}!!' -f $csv.Count
}
$map[$index].'Server IP'

至于为什么-contains 没有根据你的情况向你显示$true收容操作员会寻找元素的完全匹配

'10 ten' -contains '10'               # => False
'10 ten' -contains '10 ten'           # => True
'9 nine', '10 ten' -contains '10 ten' # => True

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多