我在使用变量恢复远程计算机上的Powershell执行策略时遇到问题。
$RestrykcjaNowa = 'Bypass'
$RestrykcjaZastana = Invoke-Command -ComputerName $Komputer -ScriptBlock { Get-ExecutionPolicy }
$RestrykcjaZastana
Invoke-Command -ComputerName $Komputer -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy $RestrykcjaNowa -Scope LocalMachine -Force } | Out-Null
但是我遇到了错误
无法将参数绑定到参数'ExecutionPolicy',因为它为空
当我在上一条命令中将变量$RestrykcjaNowa
替换为值 Bypass 时,它运行顺利。
我注意到在代码的第二行中调用变量$RestrykcjaZastana
时,它没有显示在屏幕上,并且类型为 int ,但是我无法分配值 Bypass < / em>手动设置为整数变量。
我的方法有什么问题?
答案 0 :(得分:2)
您有两个问题要解决:
执行策略不是字符串;它们是单独的枚举类型[Microsoft.PowerShell.ExecutionPolicy]
。您必须将它们按原样分配给变量:
$RestrykcjaNowa = [Microsoft.PowerShell.ExecutionPolicy]::Bypass
脚本块外的变量需要使用using:
从脚本块内引用:
Invoke-Command -ComputerName $Komputer -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy $using:RestrykcjaNowa -Scope LocalMachine -Force } | Out-Null
答案 1 :(得分:0)
定义脚本块时不评估变量。 但是,对于您的情况,您可以使用以下代码,通过该代码可以将变量作为参数传递给scriptblock:
$RestrykcjaNowa = 'Bypass'
$Komputer = '<Computername>'
$RestrykcjaZastana = Invoke-Command -ComputerName $Komputer -ScriptBlock { Get-ExecutionPolicy }
$RestrykcjaZastana
Invoke-Command -ComputerName $Komputer -ScriptBlock {param($RestrykcjaNowa) Set-ExecutionPolicy -ExecutionPolicy $RestrykcjaNowa -Scope LocalMachine -Force } -ArgumentList $RestrykcjaNowa | Out-Null