使用变量在远程计算机上设置执行策略
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
您有两个问题需要解决:
执行策略不是字符串;它们是单独的枚举类型,[Microsoft.PowerShell.ExecutionPolicy]
。您必须将它们分配给您的变量:
$RestrykcjaNowa = [Microsoft.PowerShell.ExecutionPolicy]::Bypass
脚本块外的变量需要在脚本块内引用 using:
:
Invoke-Command -ComputerName $Komputer -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy $using:RestrykcjaNowa -Scope LocalMachine -Force } | Out-Null
我在使用变量恢复远程计算机上的 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
您有两个问题需要解决:
执行策略不是字符串;它们是单独的枚举类型,
[Microsoft.PowerShell.ExecutionPolicy]
。您必须将它们分配给您的变量:$RestrykcjaNowa = [Microsoft.PowerShell.ExecutionPolicy]::Bypass
脚本块外的变量需要在脚本块内引用
using:
:Invoke-Command -ComputerName $Komputer -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy $using:RestrykcjaNowa -Scope LocalMachine -Force } | Out-Null