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

问题描述 投票:1回答:2

我有一个问题是使用变量在远程计算机上恢复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',因为它为null

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

我注意到,当在代码的第二行中调用时,变量$RestrykcjaZastana没有显示在屏幕上,并且类型为int但是我不能手动将值Bypass赋值给整数变量。

我的做法有什么问题?

powershell execution
2个回答
2
投票

您有两个问题需要解决:

  1. 执行政策不是字符串;它们是一个单独的枚举类型,[Microsoft.PowerShell.ExecutionPolicy]。您必须将它们分配给您的变量: $RestrykcjaNowa = [Microsoft.PowerShell.ExecutionPolicy]::Bypass
  2. 需要使用using:在脚本块中引用scriptblocks之外的变量: Invoke-Command -ComputerName $Komputer -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy $using:RestrykcjaNowa -Scope LocalMachine -Force } | Out-Null

0
投票

定义Scriptblock时不评估变量。但是对于您的情况,您可以使用下面的代码,您可以将变量作为参数传递给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
© www.soinside.com 2019 - 2024. All rights reserved.