【问题标题】:How to run piece of code within main script then update main script with results from above code如何在主脚本中运行一段代码,然后使用上述代码的结果更新主脚本
【发布时间】:2022-08-02 11:03:07
【问题描述】:

我有以下代码,它们是大型主脚本的一部分,我正在生成用于显示的代码,因为日期是随机的,所以我不能提前编写显示格式。所以使用下面的代码来格式化显示。

$dates = (\"2022-07-29\",\"2022-07-28\",\"2022-07-27\")
    function display ($dates){
                $num = 1
                $beg = \'\"{0,-25}\'
                $end = \'\" -f \"Job_Name\"\'
                    ForEach ($dt in $dates){
                
                $ft += \" {$num,10}\"
                
                $dtt += \",\"\"$dt\"\"\"
                $num ++
                                                }
                \"$($beg) $($ft) $($end)$($dtt)\"
                                    }
                
               display $dates

当主脚本运行时,我得到如下输出,我想在主脚本中运行代码并使用输出更新脚本。 \"{0,-25} {1,10} {2,10} {3,10} \" -f \"Job_Name\",\"2022-07-29\",\"2022-07-28 \",\"2022-07-27\" 当主脚本运行显示应该是

职位名称 2022-07-29 2022-07-28 2022-07-27

  • 你是什​​么意思\"使用输出更新脚本。\"。displayfunction 的输出应该去哪里?到控制台?,一个变量?两个?,一个文件?什么有效,什么无效?你到底想要做什么非常令人困惑。你能显示(一部分)你的\"主脚本\"?

标签: powershell


【解决方案1】:

相对于您发布的内容,结果不是您显示的内容。

(除非您在脚本中的其他地方进行格式化,但您没有显示)

Clear-Host
$dates = ("2022-07-29","2022-07-28","2022-07-27")

function display ($dates)
{
    $num = 1
    $beg = '"{0,-25}'
    $end = '" -f "Job_Name"'

    ForEach ($dt in $dates)
    {         
        $ft  += " {$num,10}"     
        $dtt += ",""$dt"""
        $num ++
    }

    "$($beg) $($ft) $($end)$($dtt)"
}
    
display $dates
# Results
<#
"{0,-25}  {1,10} {2,10} {3,10} " -f "Job_Name","2022-07-29","2022-07-28","2022-07-27"  
#>  

您正在传递一个数组,因此应将响应作为数组处理。

Clear-Host
$dates | 
ForEach-Object {$PSItem}
2022-07-29
2022-07-28
2022-07-27

Clear-Host
$dates | 
ForEach{display -dates $PSitem}
# Results
<#
"{0,-25}  {1,10} " -f "Job_Name","2022-07-29"
"{0,-25}  {1,10} " -f "Job_Name","2022-07-28"
"{0,-25}  {1,10} " -f "Job_Name","2022-07-27"
#>

然后根据需要处理这些输出行。

然而,同上“@iRon”所说的话。

到目前为止,您的帖子仅发送到控制台,如果您需要在脚本的其他地方使用数据,那么您需要捕获它并以这种方式使用它。

您可以使用 PowerShell 变量压缩输出到屏幕并根据需要在变量中捕获以供使用。

Clear-Host
($DisplayRecords = $dates | 
ForEach{display -dates $PSitem})
# Results
<#
"{0,-25}  {1,10} " -f "Job_Name","2022-07-29"
"{0,-25}  {1,10} " -f "Job_Name","2022-07-28"
"{0,-25}  {1,10} " -f "Job_Name","2022-07-27"
#>

Clear-Host
$DisplayRecords
# Results
<#
"{0,-25}  {1,10} " -f "Job_Name","2022-07-29"
"{0,-25}  {1,10} " -f "Job_Name","2022-07-28"
"{0,-25}  {1,10} " -f "Job_Name","2022-07-27"
#>

然后你可以挑选你想要的任何一个:

Clear-Host
$DisplayRecords[0]
# Results
<#
"{0,-25}  {1,10} " -f "Job_Name","2022-07-29"
#>

Clear-Host
$DisplayRecords[1]
# Results
<#
"{0,-25}  {1,10} " -f "Job_Name","2022-07-28"
#>

Clear-Host
$DisplayRecords[2]
# Results
<#
"{0,-25}  {1,10} " -f "Job_Name","2022-07-27"
#>

更新 - 跟进我在下面的评论:

Clear-Host
$dates = ("2022-07-29","2022-07-28","2022-07-27")

function display ($dates)
{

    $end = 'Job_Name '

    ForEach ($dt in $dates)
    { $dtt += $dt }

    $end + $dtt
}
    
display $dates
# Results
<#
Job_Name 2022-07-292022-07-282022-07-27 
#>  

【讨论】:

  • 目前我正在关注 PS C:\anil\scripts> .\display_dates.ps1 "{0,-25} {1,10} {2,10} {3,10} " -f "Job_Name","2022- 07-29","2022-07-28","2022-07-27" 但预期如下图 PS C:\anil\scripts> .\display_dates.ps1 job_name 2022-07-29 2022-07-28 2022-07-27
  • '@raji'再次,我对您的第一反应是使用您发布的代码,未更改显示您现在正在交谈的内容,而不是您最初显示的内容。同样,日期是一个数组,必须以这种方式处理,正如我后面的代码 sn-p 所示。如果您说您想要的只是您在评论中显示的内容,那么为什么您的代码提供:"$($beg) $($ft) $($end)$($dtt)",你传递一个数组,而不是一个简单的字符串?$dates = ("2022-07-29 2022-07-28 2022-07-27"),以及您显示的所有其他格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多