将值从变量写入文件

时间:2016-08-02 18:06:05

标签: file powershell variables

$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'
}

上面什么都没打印。

2 个答案:

答案 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