$info = Invoke-SQLCmd -ServerInstance $Server -Database $Database -inputfile "$queriespath/compare_quantity.sql"
$changes = $info.length
for($i=0; $i-le$changes; $i++) {
$text = "Revise,$info[$i].quantity,$info[$i].itemid" | Set-Content 'C:\Users\pmaho\Dropbox\SAMPOWERSPORTS\CustomChrome\revision.txt'
}
我试图将$ info [$ i] .quantity,$ info [$ i] .itemid的值写入文件。
这是我的代码现在输出的内容 修改,System.Data.DataRow System.Data.DataRow [2] .quantity,System.Data.DataRow System.Data.DataRow [2] .itemid
我希望它能说出变数的实际价值我该怎么做?
编辑:
for($i=0; $i-le$changes; $i++) {
$text = $($info[$i].quantity) | Set-Content 'C:\Users\pmaho\Dropbox\SAMPOWERSPORTS\CustomChrome\revision.txt'
}
上面什么都没打印。
答案 0 :(得分:0)
for($i=0; $i-le$changes; $i++) {
$text = "$(Revise,$info[$i].quantity,$info[$i].itemid)" | Set-Content 'C:\Users\pmaho\Dropbox\SAMPOWERSPORTS\CustomChrome\revision.txt'
}
$()只是告诉powershell解释括号中包含的表达式,你仍然需要引号来为变量赋值。
答案 1 :(得分:0)
你在这里遇到了String Expansion的问题。
以此属性为例:
context.Entry(student).Collection(s => s.StudentGrades)
.Query().Where(sg => sg.Grade.Status == "A")
.Load();
这符合预期。但是,当我尝试用引号包装整个内容时,看看会发生什么:
$e = [psobject]@{Name='StackOverFlow';URL='http://stackoverflow.com'}
$e.URL
> http://stackoverflow.com
注意那里附有蹩脚的'lil "the URL of StackOverflow is $e.Url"
>the URL of StackOverflow is System.Collections.Hashtable.Url
? PowerShell正在为我做字符串扩展,但它通过从左到右扫描并为我们删除变量值来实现这一点,但它不会检查我是否真的在属性或方法名称之后。它只是认为.Url
。讨厌!
所以解决这个问题的简单方法是使用Order of Operation符号(请记住Please-Excuse-My-Dear-Aunt-Sally?括号,指数,乘法,除法,加法,减法),然后将属性引用包装在插入语。
在我的例子中,我会这样做。
I see $e, let me replace it with what I've got for $e
回到你的问题,试试这个:
"the URL of StackOverflow is $($e.Url)"
> the URL of StackOverflow is http://stackoverflow.com