1 Star 0 Fork 52

raingive / kasini3000

forked from chuanjiao10 / kasini3000 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
kl-rs2.ps1 4.06 KB
一键复制 编辑 原始数据 按行查看 历史
chuanjiao10 提交于 2023-05-15 17:33 . 更新:优化持续输出功能
#建议保存编码为:bom头 + utf8
param
(
[Alias("exit_after_n_min")][byte]$本脚本n分钟后退出 = 1,
[Alias("screen_refresh_interval_second")][byte]$屏幕输出间隔秒 = 4,
[ValidateRange(-20,0)]
[Alias("output_n_record_before")][int]$负偏移量 = 0
# [Alias("remark")][String]$备注,
# [Alias("ipaddress")][String]$被控机ip地址,
# [Alias("grep")][String]$标准输出包含,
# [Alias("begin_time")][String]$任务预定开始时间
# [Alias("end_time")][String]$任务实际结束时间 = (Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
)
if ($global:__kl_rs2 -eq $true)
{
exit
}
$global:__kl2_rs2 = $true
if ( ($IsWindows -eq $True) -or ($PSVersionTable.psversion.major -lt 6) ) #win
{
& 'c:\ProgramData\kasini3000\0k_source.ps1'
}
if ($IsLinux -eq $True)
{
& '/etc/kasini3000/0k_source.ps1'
}
$private:脚本结束时间 = (Get-Date).AddMinutes(${本脚本n分钟后退出})
Write-Warning "信息:本脚本将在 ${private:脚本结束时间} 后退出。"
Write-Warning "信息:屏幕每隔 ${屏幕输出间隔秒} 秒,循环输出。"
#已经完成任务,最大id。
$sqlite_sql = @"
SELECT MAX("不可重任务id") FROM "福报任务表rs" WHERE "任务状态"=1000
;
"@
$private:最后一条已完成任务旧 = & "${PSScriptRoot}/cmdb/invoke_福报表rs.ps1" -sqlite_sql语句 $sqlite_sql
[uint64]$private:已经输出完的id = $private:最后一条已完成任务旧['MAX("不可重任务id")'] + $负偏移量
Write-Verbose ("信息:福报rs表,最大id,初始值:{0}" -f ${private:已经输出完的id} )
[System.Collections.ArrayList]$private:已经输出任务的ids = @()
do
{
Start-Sleep -Seconds $屏幕输出间隔秒
$private:最后一条任务当前 = & "${PSScriptRoot}/cmdb/invoke_福报表rs.ps1" -sqlite_sql语句 $sqlite_sql
[uint64]$private:最后一条任务当前id = $private:最后一条任务当前['MAX("不可重任务id")']
Write-Verbose ( "信息:福报rs表,最大id,当前值: {0}" -f $private:最后一条任务当前id)
if ($private:最后一条任务当前id -le $private:已经输出完的id)
{
Write-Host '.' -ForegroundColor Yellow -NoNewline
continue
}
#输出完成状态的任务,条件大于初始id
$sqlite_sql2 = @"
SELECT * FROM "福报任务表rs" WHERE "任务状态"=1000 AND "不可重任务id">={0}
;
"@ -f $private:已经输出完的id
$private:所有完成状态的任务_条件大于初始id = & "${PSScriptRoot}/cmdb/invoke_福报表rs.ps1" -sqlite_sql语句 $sqlite_sql2
Write-Verbose ( "信息:所有完成状态的任务_条件大于初始id {0}" -f $private:所有完成状态的任务_条件大于初始id )
if ( ($null -eq $所有完成状态的任务_条件大于初始id) -or ($所有完成状态的任务_条件大于初始id -eq '') )
{
Write-Error '错误:所有完成状态的任务,条件大于初始id,输出为空'
continue
}
foreach ($private:i in $private:所有完成状态的任务_条件大于初始id)
{
[uint64]$private:iid = $private:i['不可重任务id']
if ($private:已经输出任务的ids.Contains($private:iid))
{
}
else
{
$null = $private:已经输出任务的ids.add($private:iid)
$private:i | Select-Object '被控机ip','标准输出' | Format-List
}
}
#$private:已经输出任务的ids.sort()
Write-Verbose ( "信息:福报rs表,最大id,从: {0}" -f $private:已经输出完的id)
do
{
$private:已经输出完的id++
}
while ($private:已经输出任务的ids.Contains($private:已经输出完的id))
Write-Verbose ( "信息:福报rs表,最大id,变更为: {0}" -f $private:已经输出完的id)
# '---'
# $private:已经输出完的id++
# $private:已经输出完的id
# $private:已经输出任务的ids
# $private:已经输出任务的ids.Contains($private:已经输出完的id)
# '+++'
$private:脚本结束时间 = $private:脚本结束时间.AddSeconds(10)
Write-Verbose "信息:本脚本将在 ${private:脚本结束时间} 后退出。"
}
while ($private:脚本结束时间 -gt (Get-Date))
Write-Verbose ($private:已经输出任务的ids -join '-')
$global:__kl2_rs2 = $false
exit 0
PowerShell
1
https://gitee.com/raingive/kasini3000.git
git@gitee.com:raingive/kasini3000.git
raingive
kasini3000
kasini3000
master

搜索帮助