powershell - 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
解决方案
这经常出现。您需要在调用命令的脚本块中对局部变量使用 using: 范围。
$a = 'hi'
invoke-command computer { $using:a }
推荐阅读
- c# - 如何生成均匀分布的游戏对象并沿圆形路径移动它们?
- cognos - 更改值提示显示值上的字体颜色
- r - 如何从另一个df的值子集制作新的df?
- python - 我的暂停语句不适用于 pygame 循环
- linux - Shell 脚本不退出到提示符
- postgresql - 删除触发器后,函数
- vba - Access 2010 组合框事件根本不会触发
- elisp - defalias 的嵌套宏不起作用,但 macroexpand 输出有效?- Emacs Elisp
- core-data - SwiftUI 预览画布和核心数据
- node.js - 如何最低限度地使用 Babel 在 Node 中使用“import {obj1, obj2} from 'my-location'” - 没有 NPM