这是我的powershell脚本;我认为意图非常明显:
import-csv .\CdmCodeList.csv | select-object -first 3 {
$id = $_.ItemDescription.Replace("'", "''");
$mn = $_.ManufacturerName.Replace("'", "''");
$mc = $_.ManufacturerCode.Replace("'", "''");
"insert into @codes values ('$($_.ItemCode)', '$id', '$mn', '$mc')";
}
这符合我的期望,输出到主机:
insert into @codes values ('37025012', 'SAW BLADE PROFIX', '', '')
insert into @codes values ('37067808', 'ROD SUPER FLEX DANEK', '', '')
insert into @codes values ('52600200', 'GENERATOR PRECISION SCS ADVANCED BIONICS', '', '')
现在,如果我想通过将其添加到最后一行将其转储到文件中:
| set-content -path "my.sql"
my.sql的结果内容不是我想要的,对我来说非常惊讶:
@{
$id = $_.ItemDescription.Replace("'", "''");
$mn = $_.ManufacturerName.Replace("'", "''");
$mc = $_.ManufacturerCode.Replace("'", "''");
"insert into @codes values ('$($_.ItemCode)', '$id', '$mn', '$mc')";
=insert into @codes values ('37025012', 'SAW BLADE PROFIX', '', '')}
@{
$id = $_.ItemDescription.Replace("'", "''");
$mn = $_.ManufacturerName.Replace("'", "''");
$mc = $_.ManufacturerCode.Replace("'", "''");
"insert into @codes values ('$($_.ItemCode)', '$id', '$mn', '$mc')";
=insert into @codes values ('37067808', 'ROD SUPER FLEX DANEK', '', '')}
...etc...
两个问题:1。PowerShell在做什么? 2.如何让文件输出看起来像主机输出?
答案 0 :(得分:2)
Select-Object
生成对象。对于您的脚本,它正在生成脚本块。当您输出到主机时,它正在执行脚本块以生成输出,但Set-Content
正在编写实际的脚本块。
如果您更改脚本的一小部分以将Select-Object
的输出传递给Foreach-Object
(使用脚本块作为foreach
的正文),它将生成您想要的输出。改变第一行的这一部分:
select-object -first 3 {
对此:
select-object -first 3 | foreach {
您的最终脚本应如下所示:
import-csv .\CdmCodeList.csv | select-object -first 3 | foreach {
$id = $_.ItemDescription.Replace("'", "''");
$mn = $_.ManufacturerName.Replace("'", "''");
$mc = $_.ManufacturerCode.Replace("'", "''");
"insert into @codes values ('$($_.ItemCode)', '$id', '$mn', '$mc')";
} | set-content -path "my.sql"