【发布时间】:2021-08-19 22:00:47
【问题描述】:
这让我很困惑,想知道是否有人可以对此有所了解,也许也可以用这个例子回答两部分?
我有一个 Powershell 脚本,我像批处理文件一样运行,我将它从单独的文件中捕获的值输出到日志中。这个特定部分没有在我获得数据库版本的成绩单中输出。我尝试了" 的不同位置,单独使用$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
信息:调试:
这表明该变量包含一个值作为写入主机输出它,但是当使用Write-Information 时它不会在日志中显示任何内容,我使用的所有其他变量都会显示,为什么$DBVersion.value 或@ 987654326@什么都不显示好吗?
还有第二部分,我为什么要使用:
$DBVersion.value
在write-host "" 引号之外?
非常感谢提前
【问题讨论】:
-
简单地说,它被解读为 2 个单独的命令,而不仅仅是一个。因此,它首先运行
Write-Host "....",然后运行$DBVersion.Value。如果您希望它在同一行中,则需要将变量 inside 引号,然后使用子表达式运算符$()扩展引号内的值:Write-Host "Debug: $($DBVersion.value)"。您的Write-Information也是如此。 -
除了 Abraham 的有用评论,您不需要这些 cmdlet,但无论如何,
Write-Information本身不会产生任何输出,您需要将$InformationPreference = 'Continue'设置为脚本顶部或使用-InformationAction Continue参数。
标签: powershell logging write-host