什么是事务
大家在学习SQL时,应当听过“事务”一说,就是将多条SQL命令看作一个原子操作,统一执行,如果其中有某条SQL语句出错,可以选择回滚和提交。今天发现PowerShell中也支持事务处理。在PowerShell 中自然是将多条命令当作一个原子操作。
支持事务的命令
把一个人的腿打折了,伤筋动骨100天,有可能恢复。但是你把人杀了,神仙也不能让他起死回生。同样的并不是所有的PowerShell 命令都支持事务处理。一般支持事务处理的命令带有-UseTransaction 参数。
从这些命令的分布来看,我暂且认为支持事务的命令主要集中文件,注册表,路径和驱动器方面。
事务处理的关键参数
- -Independent 启用一个独立的事务。如果不指定,默认会添加到正在执行的事务中。
- -RollbackPreference回滚的条件,默认为Error,可选Terminating error(终端错误,自动回滚),Never(不自动回滚)
- -Timeout 事务出错的超时时间,单位为分钟
测试用例
那我就用New-Item命令先测试一下:
提供程序不支持事务。请在不使用 -UseTransaction 参数的情况下再次执行该操作。
写到这里,得给自己张嘴了。显然,即使命令支持事务处理,提供程序不支持,也没辙。
那到底哪些提供程序支持事务呢?这里会用到PSProvider的属性:Capabilities :
PS> Get-PSProvider | Where-Object { $_.capabilities -match 'transactions'} Name Capabilities Drives ---- ------------ ------ Registry ShouldProcess, Transactions {HKLM, HKCU}
也就是说暂时,只有注册表操作支持事务了。
下面的例子,先基于事务给注册表添加键和值,在没有确认提交时,数据的更改不会生效。
结语:仅限于注册表的事务操作难免简陋,但是有总比没有强吧。
本文链接: https://www.pstips.net/transaction.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!