我有一个问题是使用变量在远程计算机上恢复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赋值给整数变量。
我的做法有什么问题?
您有两个问题需要解决:
[Microsoft.PowerShell.ExecutionPolicy]
。您必须将它们分配给您的变量:
$RestrykcjaNowa = [Microsoft.PowerShell.ExecutionPolicy]::Bypass
using:
在脚本块中引用scriptblocks之外的变量:
Invoke-Command -ComputerName $Komputer -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy $using:RestrykcjaNowa -Scope LocalMachine -Force } | Out-Null
定义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