我遇到PowerShell 3.0的问题,这在PowerShell 2.0中没有出现。当我执行此代码时,将记录导入$_
后,我输出CSV文件中的字段。没关系。当它调用函数以前使用Switch语句执行相同的操作时,它在$_
变量中不再可用。如果我删除该函数并将Switch语句放在ForEach和Write-Host中,它输出就好了。有没有人对此有任何见解,以及如何解决这个问题?谢谢!
Function print {
Switch -regex ("m") {
"[a-b]" { $x = "ab"; break }
"[c-d]" { $x = "cd"; break }
"[e-f]" { $x = "ef"; break }
"[g-h]" { $x = "gh"; break }
"[i-j]" { $x = "ij"; break }
"[k-l]" { $x = "kl"; break }
"[m-n]" { $x = "mn"; break }
"[o-p]" { $x = "op"; break }
"[q-r]" { $x = "qr"; break }
"[s-t]" { $x = "st"; break }
"[u-v]" { $x = "uv"; break }
"[w-x]" { $x = "wx"; break }
"[y-z]" { $x = "yz"; break }
}
Write-Host $_.givenname
Write-Host $_.surname
Write-Host $_.username
}
Import-Csv -Delimiter "`t" ("D:\alphabet.csv") | `
Foreach {
Write-Host $_.givenname
Write-Host $_.surname
Write-Host $_.username
print
}
答案 0 :(得分:0)
为什么不直接将$_
值传递给print
函数?首先定义print
函数以获取参数
Function print {
param ($value)
Switch -regex ("m") {
...
}
Write-Host $value.givenname
Write-Host $value.surname
Write-Host $value.username
}
然后将其传递给函数
Import-Csv -Delimiter "`t" ("D:\alphabet.csv") | `
Foreach {
Write-Host $_.givenname
Write-Host $_.surname
Write-Host $_.username
print $_
}
注意我不确定为什么这两个版本之间发生了变化。我的猜测是2.0中的行为只是实施的意外而不一定是环境意图。