Windows PowerShell脚本可以节省你大量的时间。PowerShell提供自动化能力,通过命令行可以管理一切微软基础设施。PowerShell脚本可以是简单的,比如用来列举一组文件或注册表键。另外,数百行的PowerShell脚本可以产生一个色彩鲜明、格式适当的,详尽的服务器库存报告。
在具体操作中,PowerShell会读取各种配置项。PowerShell并不改变什么,它只是报告当前状态。这些操作通常由cmdlet完成。 PowerShell也可以执行各种添加、删除和修改操作。
Cmdlet通过New、New和Set等动词来代表这些操作。如果你有较高的权限级别,使用PowerShel……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
Windows PowerShell脚本可以节省你大量的时间。PowerShell提供自动化能力,通过命令行可以管理一切微软基础设施。PowerShell脚本可以是简单的,比如用来列举一组文件或注册表键。另外,数百行的PowerShell脚本可以产生一个色彩鲜明、格式适当的,详尽的服务器库存报告。在具体操作中,PowerShell会读取各种配置项。PowerShell并不改变什么,它只是报告当前状态。这些操作通常由cmdlet完成。
PowerShell也可以执行各种添加、删除和修改操作。Cmdlet通过New、New和Set等动词来代表这些操作。如果你有较高的权限级别,使用PowerShell自动化操作可以帮助你节省大量的时间——或产生问题——当自动化出错的时候。有一句话说“自动化是造成大规模失败的最佳方式”,这简直不能再真实了。幸运的是,巧用PowerShell参数可以防止发生更改脚本意外。
在本文中,我们将介绍如何构建功能并生成相应报表。这叫做WhatIf支持。我们还将讨论如何创建Windows PowerShell功能提示,询问你是否确定执行某些操作。
PowerShell功能函数实例
这里以删除一台虚构的虚拟机(VM)为例。假设你已经建立了这样的功能:删除一台VM并完成清理工作。
以参数名$VMName代表这台虚拟机的名称。当你运行Remove-MyVM –VMName VM123,将立即删除该虚拟机,并且如你所愿进行清理。
Function Remove-MyVM
{
[CmdletBinding()]
param(
[Parameter()]
[string]$VMName
)
Remove-VM –VM $VMName
}
有一天,你不小心输入了错误的VM名称,并且在来不及思考前按下了回车:
Remove-MyVM –VMName SUPERIMPORTANTVM
待你反应过来,这台VM已经不见了。这种悲剧能避免吗?当然,而且我们有两种不同的方法。
使用WhatIf支持
第一种方法是建立WhatIf支持。有两个要求:在功能函数中添加关键字SupportsShouldProcess;添加if/then声明,以确定是否执行该任务或者产生行为报告。
Function Remove-MyVM
{
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter()]
[string]$VMName
)
if ($PSCmdlet.ShouldProcess("VM $VMName",'Remove')) {
Remove-VM –VM $VMName
}
}
通过合并这两个功能,你现在有能力使用–WhatIf参数提前知道将会发生什么变化。
图1. 在做任何更改之前,WhatIf参数会给出提示
可以看到,简单地使用–WhatIf参数就能提供下一步的动作信息。Remove和VM MYVM字符串均是ShouldProcess()函数中的PowerShell参数。
Remove-MyVM –Confirm
还有一道安全保障:当使用SupportsShouldProcess时,PowerShell能够支持–Confirm参数。不用更改上述功能函数,我们就可以使用Confirm参数。
图2. Confirm参数提示将要执行的操作
Confirm参数会每次给出提示,但一定要记住使用该参数。如果你不相信自己,想每次再确认?你可以设置函数的可能性影响,然后对比当前的阈值。
要做到这一点,你的功能函数必须使用$ConfirmPreferences变量来设置可能性结果。如果大于该结果,将自动提示;如果低于当前结果,则继续通过。
你可以看到,我把$ConfirmPreferences变量设置成High。
图3. 通过设置ConfirmPreference变量设置自动提示
这意味着我的函数必须是High才会自动提示。这时可以使用ConfirmImpact关键字,并将其设置为High。
Function Remove-MyVM
{
[CmdletBinding(SupportsShouldProcess,ConfirmImpact = 'High')]
param(
[Parameter()]
[string]$VMName
)
if ($PSCmdlet.ShouldProcess("VM $VMName",'Remove')) {
Remove-VM –VM $VMName
}
}
现在,运行该参数,出现自动提示。
图4. 运行Remove-MyVM函数
这是因为我的功能函数设置的值等于或高于$ConfirmPreference变量中的值,所以会出现自动提示。
正如你所看到的,WhatIf和Confirm PowerShell参数可以拯救你所犯下的错误。你只需要记得提前将这些参数添加到PowerShell功能中。当然,WhatIf和Confirm还有更多的使用方法等待你去发现和学习。
相关推荐
-
管理员常用Windows PowerShell命令Top25
即使Windows PowerShell已经由来已久,但很多管理员并不愿意主动熟悉PowerShell cmdlet命令行。随着微软扩展了PowerShell的功能,管理员应该对其功能及使用烂熟于心……
-
免遭勒索软件侵害必备技能之:两种方式解除恶意密码加密
本文为第二部分,更多专家将介绍防止Windows用户数据被恶意加密的两种方式以及企业级PowerShell环境对勒索软件产生的影响。
-
PowerShell脚本授权最佳实践
只有当具有合适的权限时,PowerShell脚本才能运行,管理员需要对脚本进行授权,使其具备正确的权限。
-
什么?你的管理员还不了解PowerShell常量和只读变量!
程序语言中的变量通常是为某值预留的存放位置。对于PowerShell变量的子集被称为常量和只读变量。管理员应该对PowerShell常量和只读变量有所了解。