设为首页 收藏本站
查看: 1467|回复: 0

PowerShell 2.0 实践(五)管理Windows注册表

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2018-9-3 07:22:16 | 显示全部楼层 |阅读模式
  上一次我们对Windows进程进行了简单的管理操作,涉及到获取本地及远程进程,开始、结束进程等操作。最后练习了改变进程的优先级等重要操作,在实际的工作过程中,还是很常用的。本次我们来深入窥探一下Windows的配置核心:注册表。注册表保存了Windows系统诸多的配置信息,如安装软件的位置,每种文件类型的默认打开程序,系统启动时执行的程序等,其重要性不言而喻。
  警告,对注册表的操作须十分小心,在编辑之前请先备份。
  测试脚本下载
  本系列所有脚本均在Windows Server 2008 R2 DataCenter (PowerShell 2.0) + PowerGUI Script Editor Free Edition x64中测试通过。
  1、PowerShell中涉及到注册表相关的命令有如下一些:
  Get-Item
  Get-ItemProperty
  Set-Item
  Set-ItemProperty
  New-Item
  New-ItemProperty
  Copy-Item
  Copy-ItemProperty
  Rename—Item
  Rename-ItemProperty
  Remove-Item
  Remove-ItemProperty
  Clear-Item
  Clear-ItemProperty
  其中第一列的命令在操作文件系统时我们就已经在使用了,现在它们被赋予了新的意义,对注册表项进行管理。那么第二列的作用是什么呢?它们负责管理注册表项下面的值:

  即 *-Item管理"文件夹",*-ItemProperty管理"文件"。这里我使用的是Registry Workshop,一款功能强大的注册表编辑软件,支持Windows 7及64位,可以在这里下载试用版。
  2、PowerShell提供了多种"驱动器"实体:
  Get-PSDrive
  执行结果:

  不同于传统的Windows磁盘驱动器,这里的PSDrive是广义的驱动器,包含了文件系统、别名、证书、环境变量、注册表、变量等。其中关于注册表的有两个:HKCU和HKLM,而Windows注册表项一共有5个:

  那么能不能用PowerShell也操作其他三个呢?答案是肯定的,可以先转到注册表的根部:
  Set-Location-PathMicrosoft.PowerShell.Core\Registry::
  Get-ChildItem–Recurse
  运行结果:

  Microsoft.PowerShell.Core\Registry:: 是一个特殊的路径,表示注册表的根路径。有了根路径,就已随意转到一个注册表路径了:
  Push-Location HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
  Pop-Location
  我们经常在别的驱动器中进行操作(如文件系统),这是突然需要访问注册表,则可以使用Push-Location暂时转到注册表的驱动器,操作完成后使用Pop-Location回到原来的驱动器。这是一种推荐做法,可以方便的在不同驱动器之间切换。
  3、读取注册表。
  Push-Location HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
  Get-ItemPropertyOptionalComponents
  运行结果:

  可以看到,返回了对应注册表项下的值的信息:

  4、写入注册表。
  在指定位置新建一个注册表项:
  Pop-Location
  New-Item-Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run-Name"PS"–Force
  运行结果:

  在注册表中可以看到创建的这个项:

  下面创建一个值:
  给 Windows添加一个启动项:VS2010,添加启动项这种操作是众多中小软件的一贯做法,往往出现在安装向导的最后一步:)
  New-ItemProperty-Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run-Name"VS2010"-Value"E:\Dotnet\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"-PropertyTypestring–Force
  运行结果:


  在msconfig中也可以看到添加的启动项:

  其中-PropertyType的值必须是下列枚举值之一:
  PropertyType 值
  含义
  Binary
  二进制数据
  DWord
  一个有效的 UInt32 数字
  ExpandString
  一个可以包含动态扩展的环境变量的字符串
  MultiString
  多行字符串
  String
  任何字符串值
  QWord
  8 字节二进制数据
  不要真的添加VS2010启动项,否则每次开机会让你崩溃:)
  5、更改注册表的值。
  Set-Item-Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\PS-Value"PSV2"-Force-PassThru
  Set-ItemProperty-Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run-Name"VS2010"-Value"E:\"–PassThru
  运行结果:



  6、清空注册表的值。
  Clear-Item-Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\PS
  Clear-ItemProperty-PathHKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run-Name"VS2010"–PassThru
  运行结果:



  7、删除注册表项。
  Remove-Item-Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\PS-Force
  Remove-ItemProperty-PathHKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run-Name"VS2010"
  运行结果:

  8、远程管理注册表。
  借助于.NET类库,可以用PowerShell远程管理注册表。
  如图所示,虚拟机的IP为:192.168.200.132:

  $MachineName='192.168.200.132'
  $reg= [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $MachineName)
  #以编辑模式打开注册表键
  $regKey=$reg.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion",$true)
  $regkey.GetValueNames()
  运行结果:

  注意:$true表示以编辑模式打开远程注册表,忽略该参数或设置为$false则会以只读模式打开。
  远程修改注册表:
  $MachineName='192.168.200.132'
  $reg= [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $MachineName)
  #以编辑模式打开注册表键
  $regKey=$reg.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run",$true)
  $regkey.GetValueNames()
  $regKey.CreateSubKey("VS2010")
  运行结果:

  注意,远程修改注册表需要将远程计算机上的【Remote Registry】服务启动,否则会遇到错误:


  小结:
  本次对Windows注册表做了一番测试,重在理解"项"、"值"的概念,这样才会用正确的方法来管理注册表。此外,同样可以远程管理注册表,可以看到,在PowerShell 2.0发布后,远程管理被提到了核心高度,后续篇章我们会看到更多的命令添加了远程管理功能。下一次将练习管理Windows日志。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561769-1-1.html 上篇帖子: PowerShell 2.0 实践(四)管理Windows进程 下篇帖子: powershell取前一天系统失败日志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表