[玩转系统] 另一个 PowerShell ToDo 工具
作者:精品下载站 日期:2024-12-14 07:50:07 浏览:15 分类:玩电脑
另一个 PowerShell ToDo 工具
最近,一位读者 Matt Penny 在我的一篇文章的评论中分享了一个技巧。他有一个简短的 PowerShell 函数,用于将 ToDo 命令插入到他的 Pester 测试脚本中。尽管您可以轻松地将它用于其他 PowerShell 工作。当然,我总是在寻找灵感,所以我接受了马特的想法,并对其进行了过度的研究。
Matt 最初的功能非常简单,这总是一件好事。
function todo {
param ([string]$TodoText)
write-host -foregroundcolor DarkYellow ” [o] Todo: $TodoText”
}
然后,在脚本或函数中,他所要做的就是添加调用该函数的行。假设此 ToDo 函数已加载,可能作为配置文件脚本的一部分。这是一个插入了几个 ToDo 命令的演示函数。这些表示需要编码的其他部分。
Function Demo {
[cmdletbinding()]
Param(
[Parameter(ValueFromPipeline)]
[int]$X = 1
)
Begin {
Write-Verbose "[BEGIN ] Starting: $($MyInvocation.Mycommand)"
ToDo "verbose PSBoundparameter data goes here"
} #begin
Process {
Write-Verbose "[PROCESS] Processing $X"
ToDo "calculate square root of X"
ToDo "calculate X^X"
#write a custom object to the pipeline
[pscustomobject]@{
Value = $X
Square = $X*$X
SquareRoot = 0
Power = 0
}
ToDo "add option to save output"
} #process
End {
ToDo "Display runtime"
ToDo "Clean up environment"
Write-Verbose "[END ] Ending: $($MyInvocation.Mycommand)"
} #end
}
当我运行该命令时,我会看到 ToDo 语句。
我喜欢。但我很好奇我还能用它做什么。当然,即使您不需要我版本的功能,我也希望您能学到新的东西。
我决定给每个待办事项编号。我认为对待办事项条目进行颜色编码也可能会很好,以帮助我确定首先要做什么的优先顺序。最后,当前的实现在管道表达式中运行某些内容时效果不佳。我的演示函数采用管道输入,因此如果我用 3 个数字对其进行测试,我将获得 3 个待办事项的副本,而我真正需要的只是一个。
保持计数相对简单。我可以初始化一个变量,然后使用 ++ 运算符来递增它。但挑战在于范围。当我调用我的 ToDo 函数版本时,我得到一个新的作用域,该作用域在函数退出时消失。而且我不想让我的主要剧本变得更难写。因此,我将在全局范围内创建一个变量并递增它。请注意,最佳实践是避免引用超出范围的项目,但总有例外。这是其中之一。通过使用 $global: 前缀,我告诉 PowerShell 我知道我在做什么。
另一个挑战是跟踪已显示的消息,因此我在管道操作期间减少了重复消息。我再次使用全局变量来跟踪消息历史记录。如果消息已经显示,则不要执行任何操作,否则显示它并将其添加到历史变量中。
if (-Not ($global:ToDoHistory -contains $ToDo)) {
$global:ToDoCounter++
#format the counter with 2 leading zeros.
$msg = "[$($global:ToDoCounter.ToString("00#"))] TO-DO: $ToDo"
Write-Host $msg -ForegroundColor $ForegroundColor
$global:TodoHistory+=$ToDo
}
这里演示的是我的演示函数的修改版本,它调用我的 ToDo 函数版本。我的版本采用消息参数和消息颜色的可选参数。默认为青色。
Function Demo {
[cmdletbinding()]
Param(
[Parameter(ValueFromPipeline)]
[int]$X = 1
)
Begin {
Write-Verbose "[BEGIN ] Starting: $($MyInvocation.Mycommand)"
ToDo "verbose PSBoundparameter data goes here" yellow
} #begin
Process {
Write-Verbose "[PROCESS] Processing $X"
ToDo "calculate square root of X" red
ToDo "calculate X^X"
#write a custom object to the pipeline
[pscustomobject]@{
Value = $X
Square = $X*$X
SquareRoot = 0
Power = 0
}
ToDo "add option to save output" green
} #process
End {
ToDo "Display runtime"
ToDo "Clean up environment" red
<#
force ToDo cleanup
This is optional. If you don't, you'll manually need to clear
$ToDoHistory and $ToDoCounter from the global scope before
running another script that uses ToDo.
#>
Remove-ToDoVariable
Write-Verbose "[END ] Ending: $($MyInvocation.Mycommand)"
} #end
}
当我完成待办事项时,我可以从函数中删除该行。我唯一添加的额外功能是在 End 块中添加一个附加函数,Remove-ToDoVariable,用于清理全局变量。否则,下次运行该函数时,全局变量将被重新使用,这没有什么帮助。您不必执行此步骤,您始终可以在再次测试之前手动重置变量。但现在我(也许)收到了一条更有用的待办事项消息。
流水线测试不会重复任何事情。
ToDo.ps1:
Function Write-ToDo {
[cmdletbinding()]
Param(
[Parameter(
Position=0,
Mandatory,
HelpMessage = "Enter a ToDo item")]
[string]$ToDo,
[Parameter(
Position = 1
)]
[ValidateNotNullorEmpty()]
#the default ToDo color
[consolecolor]$ForegroundColor = "Cyan"
)
Begin {
If (-Not $ToDoHistory) {
$global:ToDoHistory = @()
}
} #begin
Process {
#check ToDoHistory to make sure we haven't already displayed the item
#useful if the new function accepts pipeline input or when looping
if (-Not ($global:ToDoHistory -contains $ToDo)) {
$global:ToDoCounter++
#format the counter with 2 leading zeros
$msg = "[$($global:ToDoCounter.ToString("00#"))] TO-DO: $ToDo"
Write-Host $msg -ForegroundColor $ForegroundColor
$global:TodoHistory+=$ToDo
}
} #process
End {
#not used
} #end
} #Write-ToDo
Set-Alias -Name ToDo -Value Write-ToDo
Function Remove-ToDoVariable {
[cmdletbinding(SupportsShouldProcess)]
Param()
"ToDoCounter","ToDoHistory" | foreach {
#remove these variables from the global scope and ignore any errors
#for variables that don't exist
Remove-Variable -Name $_ -Scope global -ErrorAction SilentlyContinue
}
} #Remove-ToDoVariable
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag