提供程序不支持事务。

事务处理


什么是事务

大家在学习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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注