首页 > 解决方案 > PowerShell 命令适用于显式路径,当路径来自变量时失败

问题描述

如果有人有过这种经历,我将非常感谢帮助。我对 PowerShell 有点陌生,但我认为这是一种奇怪的行为是对的。我正在查询远程计算机的注册表。我正在尝试为许多计算机编写一个脚本来执行此操作。在测试时,我找到了返回我想要的信息的语法。当我用包含完全相同路径的变量替换命令中的显式注册表路径时,我收到权限被拒绝。以下是 Powershell CLI 中的文本,所有三个命令都在同一个窗口中。

第一个命令失败,$PackageRegPath 包含路径字符串。

第二个命令显示并验证 $PackageRegPath 的值。

第三个命令以替换 $PackageRegPath 的值成功。

提前致谢!

大罗格NJ

PS C:\windows\system32>  Invoke-Command -ComputerName $PC -ScriptBlock {Set-Location HKLM:\; Get-ChildItem $PackageRegPath | where {$_.Name -like "*InstallProperties*"} | Get-ItemProperty | select Displayname}

不允许请求的注册表访问。

+ CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACHINE\SECURITY:String) [Get-ChildItem], SecurityException

+ FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.PowerShell.Commands.GetChildItemCommand

+ PSComputerName        : REDACTED



PS C:\windows\system32> $PackageRegPath

.\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\F6CBFF0C20913AA419158961F6D28ABB\



PS C:\windows\system32>  Invoke-Command -ComputerName $PC -ScriptBlock {Set-Location HKLM:\; Get-ChildItem .\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\F6CBFF0C20913AA419158961F6D28ABB\ | where {$_.Name -like "*InstallProperties*"} | Get-ItemProperty | select Displayname}

DisplayName PSComputerName RunspaceId

------------ -------------- ----------

SQL Server 2014 (x64) 的 Microsoft 系统 CLR 类型已编辑 89404d94-c1fd-4790-af88-d955a4c425b8

标签: powershell

解决方案


这经常出现。您需要在调用命令的脚本块中对局部变量使用 using: 范围。

$a = 'hi'
invoke-command computer { $using:a }

推荐阅读