使用Variable的远程计算机上的Set-Execution策略

时间:2019-02-15 13:59:24

标签: powershell execution

我在使用变量恢复远程计算机上的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>手动设置为整数变量。

我的方法有什么问题?

2 个答案:

答案 0 :(得分:2)

您有两个问题要解决:

  1. 执行策略不是字符串;它们是单独的枚举类型[Microsoft.PowerShell.ExecutionPolicy]。您必须将它们按原样分配给变量:

    $RestrykcjaNowa = [Microsoft.PowerShell.ExecutionPolicy]::Bypass
    
  2. 脚本块外的变量需要使用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