调用命令路径为空?

时间:2018-09-07 19:24:10

标签: powershell

我正在使用此命令,以便在我需要测试某些内容时能够远程查看和编辑已注册域上计算机的注册表项。在这种情况下,我正在查看Excel的“ vbawarninsg”键。这样就可以了。

cls
$computername = Read-Host "Enter computer name..."
Invoke-Command -ComputerName $computername {Get-ItemProperty -Path 'REGISTRY::HKEY_USERS\xxxxxxx\Software\Policies\Microsoft\office\16.0\excel\security' } | 
Select-Object PSComputerName, vbawarnings, PSParentPath | fl
$name = "vbawarnings"

下一部分是使用New-ItemProperty为“ vbawarnings”键设置新值。当我为-Path名称分配变量时,它给我一个错误“由于参数'Path'为空,因此无法将其绑定到参数'Path'。”

这是给我一个错误的脚本

cls
$computername = Read-Host "Enter computer name..."
$registryPath = 'REGISTRY::HKEY_USERS\xxxxxxx\Software\Policies\Microsoft\office\16.0\excel\security'
Invoke-Command -ComputerName $computername {Get-ItemProperty -Path $registryPath } | 
Select-Object PSComputerName, vbawarnings, PSParentPath | fl
$name = "vbawarnings"

$value = Read-Host "To modify...Enter a value"
New-ItemProperty -Path $registryPath -Name $name -Value $value `
-PropertyType DWORD -Force -Verbose | Out-Null

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

为了远程使用变量(例如Invoke-Command的情况),您需要使用$using:变量范围:

Invoke-Command -ComputerName $cn {
    Get-ItemProperty -Path $using:regPath
}

或将其作为参数传递

Invoke-Command -ComputerName $cn {
    param($path)

    Get-ItemProperty -Path $path
} -ArgumentList '-path', $regPath

See this article

答案 1 :(得分:-1)

执行Invoke-Command时,该脚本块将发送到远程服务器。

Invoke-Command -ComputerName $computername {Get-ItemProperty -Path $registryPath }

在远程服务器上,即使您的脚本中本地有$ registryPath,它也为空。

因此,只需硬编码注册表路径:

Invoke-Command -ComputerName $computername {Get-ItemProperty -Path 'REGISTRY::HKEY_USERS\xxxxxxx\Software\Policies\Microsoft\office\16.0\excel\security' }