在 PowerShell 中获取远程计算机上的注册表
-
PowerShell 中的
Invoke-Expression
-
在 PowerShell 中使用
Get-ItemProperty
获取注册表 -
在 PowerShell 中使用 Invoke-Expression 和
Get-ItemProperty
获取远程计算机上的注册表
在本文中,我们将讨论如何在远程计算机上调用表达式、获取注册表值,以及如何将它们结合起来在远程计算机上获取注册表值。
PowerShell 中的 Invoke-Expression
根据微软官方描述,Invoke-Expression
命令运行或评估特定字符串作为命令并导出命令或表达式的结果。
换句话说,它可以帮助调用脚本中的代码或构建稍后执行的命令。但是,我们也可以通过用户提供的输入谨慎地使用它。
使用 Invoke-Expression
的最基本语法是定义一个脚本并将该字符串传递给 Command
参数。Invoke-Expression
然后执行该字符串。
$Command = 'Get-Process'
Invoke-Expression -Command $Command
#Execute a script via Invoke-Expression
$MyScript = '.\MyScript.ps1'
Invoke-Expression -Command $MyScript
但是,如果我们将路径项括在单引号或双引号中,Invoke-Expression
将按预期执行脚本。将此视为最佳实践,因为某些路径中有空格。
$MyScript = "C:\'Folder Path'\MyScript.ps1"
Invoke-Expression $MyScript
Invoke-Expression
命令的唯一参数是 -Command
参数。没有其他传统方法可以使用 Invoke-Expression
传递参数。
但是,你可以将它们包含在你提供给 Command
参数的字符串中。
也许我们有一个带有两个参数的脚本,称为 Path
和 Force
。除了通过 Invoke-Expression
使用特定参数外,你还可以像通常通过控制台一样将参数传递给该脚本。
$scriptPath = 'C:\Scripts\MyScript.ps1'
$params = '-Path "C:\file.txt" -Force'
Invoke-Expression "$scriptPath $params"
# or
$string = 'C:\Scripts\MyScript.ps1 -Path "C:\file.txt" -Force'
Invoke-Expression $string
在 PowerShell 中使用 Get-ItemProperty
获取注册表
Get-ItemProperty
是一个 PowerShell 命令,用于以更易读的格式导出注册表项和值。我们还可以使用 Get-ItemProperty
cmdlet 获取特定注册表项的值。
示例代码:
Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
输出:
ProgramFilesDir
CommonFilesDir
ProgramFilesDir (x86)
CommonFilesDir (x86)
CommonW6432Dir
DevicePath
MediaPathUnexpanded
ProgramFilesPath
ProgramW6432Dir
SM_ConfigureProgramsName
SM_GamesName
在 PowerShell 中使用 Invoke-Expression 和 Get-ItemProperty
获取远程计算机上的注册表
现在,假设我们结合了在远程计算机上调用命令和获取注册表项值这两个概念。在这种情况下,我们现在可以创建一个命令片段,用于获取远程计算机中的注册表值。
示例代码:
Invoke-Command -Computer RemoteComputer01 {
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\run
}
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn