$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:UserspmahoDropboxSAMPOWERSPORTSCustomChromerevision.txt'
}
我正在尝试将$info[$I].guosity、$info[$si].itemid的值写入文件。
这就是我的代码现在输出的内容修订,System.Data.DataRow System.Data.DataRow[2].数量,System.Data_DataRow System.Data.DataRow[2].itemid
我想说的是变量的实际值,我该怎么做?
编辑:
for($i=0; $i-le$changes; $i++) {
$text = $($info[$i].quantity) | Set-Content 'C:UserspmahoDropboxSAMPOWERSPORTSCustomChromerevision.txt'
}
上面没有打印任何内容。
for($i=0; $i-le$changes; $i++) {
$text = "$(Revise,$info[$i].quantity,$info[$i].itemid)" | Set-Content 'C:UserspmahoDropboxSAMPOWERSPORTSCustomChromerevision.txt'
}
$((只是告诉powershell解释括号中包含的表达式,您仍然需要引号来为变量分配字符串值。
您在这里遇到了字符串扩展的问题。
以这个属性为例:
$e = [psobject]@{Name='StackOverFlow';URL='http://stackoverflow.com'}
$e.URL
> http://stackoverflow.com
这正如预期的那样。然而,当我试图用引号来包装整个事情时,看看会发生什么:
"the URL of StackOverflow is $e.Url"
>the URL of StackOverflow is System.Collections.Hashtable.Url
注意到末尾附加的蹩脚的.Url
了吗?PowerShell正在为我进行字符串扩展,但它通过从左到右扫描并为我们插入变量值来实现这一点,但它不会检查我是否真的在使用属性或方法名。它只是认为I see $e, let me replace it with what I've got for $e
。烦人的
因此,解决这一问题的简单方法是使用操作顺序符号(请记住,对不起,亲爱的Sally阿姨?圆括号、指数、乘法、除法、加法、减法(,并将属性引用括在括号中。
在我的例子中,我会这样做。
"the URL of StackOverflow is $($e.Url)"
> the URL of StackOverflow is http://stackoverflow.com
回到你的问题,试试这个:
"Revise,$($info[$i].quantity),$($info[$i].itemid)" |
Set-Content 'C:UserspmahoDropboxSAMPOWERSPORTSCustomChromerevision.txt'