这个让我很困惑,我想知道是否有人能解释一下这个问题,也许也可以用这个例子回答两个部分?
我有一个Powershell脚本,我像一个批处理文件一样运行,我有它的输出值,它从一个单独的文件中捕获到日志。这个特定的部分没有输出到我得到数据库的DB版本的成绩单中。我已经尝试了"
的不同位置,使用$DBVersion
自己,这是一个简单的方法来显示我有什么麻烦。例如:
## Read the DBs Extended properties
Function Get-DB_Version {
Param (
$SQLInstance,
$DBName
)
Invoke-Sqlcmd -ServerInstance $SQLInstance -Database $DBName -Query "SELECT value FROM fn_listextendedproperty(default, default, default, default, default, default, default) WHERE name = 'version'"
}
**Other Variables used are also pre-set above here **
## Get DB version
$DBVersion = Get-DB_Version -SQLInstance $SQLInstance -DBName $DBName
Start-Transcript -Path "$LogOutput$LogName" -IncludeInvocationHeader -Append
Write-Information "
**** DEBUG INFO ****
Write-Host "Debug:"$DBVersion.value
Write-Information "Debug:"$DBVersion.value
Read-Host -Prompt "PAUSE" # This is so I can visually see the console seeing only the write-host is there as expected.
Stop-Transcript
在我的日志文件中,我得到输出:
调试:2.16.51443.5147
INFO:调试:
这告诉我,变量包含一个值作为write-host输出它,但是当使用Write-Information
时,它在日志中不显示任何东西,我使用的所有其他变量都显示,为什么$DBVersion.value
或$DBVersion
不显示任何东西?
第二部分是,为什么我必须使用:
$DBVersion.value
在write-host ""
引号之外?
Many thank in Advance
正如@abraham在评论中所说。我所要做的就是让引号内的变量(我的问题2)使用子表达式操作符$()
展开引号内的值:Write-Host "Debug: $($DBVersion.value)"
。这同样适用于您的Write-Information
。
这样做也解决了我原来的问题,为什么Write-Information
没有输出任何东西到事务日志,我不需要改变$InformationPreference。