0

这让我很困惑,想知道是否有人可以对此有所了解,也许还可以用这个例子回答两个部分?

我有一个 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$DBVersion不显示任何内容?

第二部分也是,为什么我必须使用:

$DBVersion.value

write-host ""引号之外?

非常感谢提前

4

1 回答 1

1

正如@abraham 在评论中所说。我所要做的就是让引号内的变量(我的问题2)是使用子表达式运算符$()来扩展引号内的值:Write-Host "Debug: $($DBVersion.value)". 你的Write-Information.

单独这样做也解决了我最初的问题,即为什么Write-Information没有将任何内容输出到事务日志中,并且我不需要更改 $InformationPreference。

于 2021-08-19T13:58:03.457 回答