PowerShell 将 Int 转换为 Hex 并将信息写入文本文件

问题描述 投票:0回答:1

我正在开发 PowerShell 模块库,我们希望在我们的环境中使用它来简化一些编码。 我有一个读取注册表值的小模块,我想执行以下操作 模块读取 DWORD 值,但它不仅应该显示十进制值,还应该显示十六进制值

Log "Operating System UBR: $(GetDWORDValue "HKLM" "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "UBR" "64")"

Log "Operating System UBR (hex): ($(GetDWORDValue "HKLM" "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "UBR" "64")).ToString('X')"

输出 [06/21/2024 14:15:34 - TemplateScript.ps1] 操作系统 UBR:3737 [06/21/2024 14:15:34 - TemplateScript.ps1] 操作系统 UBR(十六进制):(3737).ToString('X') 粗体项目不正确,应显示“E99”

我尝试过各种组合:

  • 在我看来尝试使用单独的变量是可行的
  • 使用 {0} -f $ubrvalue.ToString('X') 也不起作用,当使用日志模块时,如果我创建单独的变量,它确实可以工作,并且当从控制台尝试时,我也可以让它工作尝试使用日志功能时则不然。

这基本上是使用 Add-Content 的模块,并将我传递的文本作为参数。

日志模块

function Log {
    param (
        [string]$sText
    )

    $logFolderPath = "C:\Logs"
    if ($sAppName -eq $null) {
          $sAppName = $scriptName
        }
    $logFilePath = Join-Path -Path $logFolderPath -ChildPath "$sAppName.log"

    if (-not (Test-Path -Path $logFolderPath)) {
        New-Item -Path $logFolderPath -ItemType Directory
    }

    $sCurTime = Get-Date -Format "MM/dd/yyyy HH:mm:ss"
    $logEntry = "[$sCurTime - $scriptName] $sText"

    Add-Content -Path $logFilePath -Value $logEntry
}

欢迎任何想法/建议 谢谢!

powershell hex
1个回答
0
投票

您需要将整个

(...).ToString('X')
调用包含在子表达式中
$(...)
:

Log "Operating System UBR (hex): $((GetDWORDValue "HKLM" "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "UBR" "64").ToString('X'))"

© www.soinside.com 2019 - 2024. All rights reserved.