gpt4 book ai didi

arrays - 如何使此PowerShell函数返回纯字符串,但不返回字符串数组?

转载 作者:行者123 更新时间:2023-12-02 23:13:58 25 4
gpt4 key购买 nike

即使$logDir变量包含值"C:\Users\DEVELO~1\AppData\Local\Temp\logs"(从文本文件中获取),该代码也无法达到我的预期。它返回一个字符串数组,而不是单个字符串。

$LogFileName = "NoIP-update.log"
$ConfigSection = "NoIp"

function Log-Message ($MSG) {
$script:Logger += "$(get-date -format u) $MSG`n"
Write-Output $MSG
}

function Get-LogFileName ($config) {
$Local:logDir = $config["Section"]["LOGDIR"]
if ($Local:logDir -ne "") {
Log-Message "Testing for directory '$Local:logDir'"
if(!(Test-Path -Path $Local:logDir )){
New-Item -ItemType directory -Path $Local:logDir
Log-Message "Created directory '$Local:logDir'"
}
return "$Local:logDir\$LogFileName"
}
return $LogFileName
}

我可能缺少一些非常基本的东西,因为我希望函数返回1个字符串,而不是字符串数组,并记录一两行。

但是,它不会记录日志,并且:如果 $Local:logDir存在,则该函数返回2个字符串的数组,否则返回4个字符串的数组。
  • 为什么?
  • 如何使其返回1个字符串并仍然记录日志?

  • 我认为这与在过程和面向对象的编程语言中使用流水线隐喻和我的背景进行思考有关。非常感谢您的帮助(:

    2字符串数组:
    {Testing for directory 'C:\Users\DEVELO~1\AppData\Local\Temp\logs', C:\Users\DEVELO~1\AppData\Local\Temp\logs\NoIP-update.log}

    4字符串数组:
    {Testing for directory 'C:\Users\DEVELO~1\AppData\Local\Temp\logs', C:\Users\Developer\AppData\Local\Temp\logs, Created directory 'C:\Users\DEVELO~1\AppData\Local\Temp\logs', C:\Users\DEVELO~1\AppData\Local\Temp\logs\NoIP-update.log}

    笔记:
  • 我从PowerGUI内部运行,但是在PowerShell控制台中它具有相同的结果。
  • $PSVersionTable.PSVersion返回4.0
  • 最佳答案

    我的问题是Log-Message,特别是Write-Output行。

    当您在函数内部使用Write-Output时,它被视为从函数返回值的一种方式(即,它可以与Return互换使用)。因此,正在发生的是您的日志记录消息已包含在Return流中。

    如果您只想在屏幕上显示日志记录信息,请改用Write-Host。这将向主机显示信息,但不包含在Return流中。

    因此,解决方法是将Log-Message函数更改为:

    function Log-Message ($MSG) {
    $script:Logger += "$(get-date -format u) $MSG`n"
    Write-Host $MSG
    }

    关于arrays - 如何使此PowerShell函数返回纯字符串,但不返回字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24685014/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com