使用变量在远程计算机上设置执行策略

Set-Execution policy on remote computer using Variable

我在使用变量恢复远程计算机上的 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

但是我得到一个错误

Cannot bind argument to parameter 'ExecutionPolicy' because it is null

当我在最后一个命令中用值 Bypass 替换变量 $RestrykcjaNowa 时,它进行得很顺利。

我注意到在代码的第 2 行调用时变量 $RestrykcjaZastana 没有显示在屏幕上并且类型为 int 但我无法赋值手动绕过到整数变量。

我的方法有什么问题?

定义 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

您有两个问题需要解决:

  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