下面的代码是大主脚本的一部分,因为日期是随机的,所以我不能预先编写显示格式,所以我正在生成显示代码。所以使用下面的代码来格式化显示。
$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“在主脚本运行时显示为
Job_name 2022-07-29 2022-07-28 2022-07-27
实际上,下面是我的主要代码,在这里,我在代码中手动编写日期以获得输出。但是我想要这件自动的,知道我能做什么吗?
[CmdletBinding()]
param (
[Parameter(Mandatory = $True)][string]$vip,
[Parameter(Mandatory = $True)][string]$username,
[Parameter()][string]$domain = 'local',
[Parameter(Mandatory = $True)][array]$jobNames, # job to run
[Parameter()][int]$Days
)
### source the cohesity-api helper code
. ./cohesity-api
### authenticate
apiauth -vip $vip -username $username -domain $domain
$dayusec = [int64](((Get-Date).ToUniversalTime())-([datetime]"1970-01-01 00:00:00")).TotalSeconds*1000000
$TB = 1024*1024*1024*1024
$dateString = (get-date).ToString().Replace(' ','_').Replace('/','-').Replace(':','-')
$outfileName = "RunStats-$dateString.csv"
"JobName,Job start Time,Status,RunType,Duration in Min, ReadGBytes, writeGBytes" | Out-File -FilePath $outfileName
$endtime = $dayusec
$data = @{}
$jobs = api get protectionJobs?isDeleted=false
$dates =@()
for ($day=1;$day -lt $days -or $day -eq $days;$day ++){
$dates += ((get-date).AddDays(-$day)).ToString('yyyy-MM-dd')
}
foreach ($jobname in $jobNames){ ###1
$endtime = $dayusec
for ($day=1;$day -lt $days -or $day -eq $days;$day ++){ ###2
$starttime = [int64](((Get-Date).ToUniversalTime())-([datetime]"1970-01-01 00:00:00")).TotalSeconds*1000000 - ($day * 86400000000)
if ($jobname -notin $data.keys){
$data[$jobname]=@{}
}
foreach ($job in $jobs){ # starts jobs loop
if ( $jobname -eq $job.name){
$jobId = $job.id
#$starttime = $usec
$runs = api get "protectionRuns?jobId=$($job.id)&startTimeUsecs=$starttime&endTimeUsecs=$endtime&runTypes=kRegular"
}
}
foreach ($run in $runs){
$nowTime = dateToUsecs (get-date)
$7thday = (dateToUsecs ((Get-Date).AddDays(-7)))
$startTime = $run.copyRun[0].runStartTimeUsecs
$date = (usecsToDate $starttime).ToString('yyyy-MM-dd’)
if ($run.backupRun.runType.substring(1) -eq "Regular"){ # starts last day
$readMBytes = [math]::Round($run.backupRun.stats.totalBytesReadFromSource / $TB, 3)
$data[$jobname][$date]=$readMBytes
#"$($jobName) $($readMBytes) $($date)"
}
}
$endtime = $starttime
} ###2
} ###1
"{0,-25} {1,10} {2,10} {3,10} {4,10} {5,10} {6,10} {7,10} {8,10} {9,10} {10,10} {11,10} {12,10} {13,10} {14,10}" -f "Job Name","2022-07-28","2022-07-27","2022-07-26","2022-07-25","2022-07-24","2022-07-23","2022-07-22","2022-07-21","2022-07-20","2022-07-19","2022-07-18","2022-07-17","2022-07-16","2022-07-15"
"==============================================================================================================="
$data.GetEnumerator()|ForEach-Object {
"{0,-20} {1,10} {2,10} {3,10} {4,10} {5,10} {6,10} {7,10} {8,10} {9,10} {10,10} {11,10} {12,10} {13,10} {14,10}" -f $_.name,$_.value."2022-07-28",$_.value."2022-07-27",$_.value."2022-07-26",$_.value."2022-07-25",$_.value."2022-07-24",$_.value."2022-07-23",$_.value."2022-07-22",$_.value."2022-07-21",$_.value."2022-07-20",$_.value."2022-07-19",$_.value."2022-07-18",$_.value."2022-07-17",$_.value."2022-07-16",$_.value."2022-07-15"
}如果您先将日期放在预期的输出上,然后将$days的值从14更改为任何其他值,则必须再次用日期更新上述代码,以获得所需的输出。我想要显示得到调整值的$days变化。
发布于 2022-07-30 21:43:30
相对于您发布的内容,结果并不是您所显示的结果。
(除非您正在脚本的其他地方进行格式化,而您没有显示)
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
#> https://stackoverflow.com/questions/73177623
复制相似问题