Powershell脚本无法调用它自己,因为“在此系统上禁用运行脚本”

问题描述:

我对powershell脚本编程(以及编程/一般脚本编程)非常陌生,这是我的第一个powershell脚本。我正在尝试编写一个将Linux子系统安装到PC上的脚本。下面是代码Powershell脚本无法调用它自己,因为“在此系统上禁用运行脚本”

function Get-ScriptDirectory { #Gets scripts full path 
Split-Path -parent $PSCommandPath 
} 
If (-NOT ([Security.Principal.WindowsPrincipal] 
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` 
[Security.Principal.WindowsBuiltInRole] "Administrator")) #checks if script is being run as admin 
{ 
Set-Location -Path $PSScriptRoot 
PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& 
{Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy 
Unrestricted -File ""Get-ScriptDirectory""' -Verb RunAs}"; #starts 
#Powershell with admin permissions and executes this script 
Break 
} 
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Installs WSL 

我不得不采取if语句如果脚本正在与管理员privliges(似乎无法再找到它)运行的检查。我也在Fedora主机上的一个虚拟机内运行它。我认为它不能称之为自己的事实,因为“在这个系统上禁用运行脚本”非常奇怪。我拿出了if语句,一切运行良好,并安装WSL。

“运行脚本被禁用......”几乎可以肯定 - PowerShell执行策略设置为“受限制”。请参阅Get-Help about_Execution_Policies

要启用运行脚本,您需要以管理员身份运行PowerShell会话,并在该会话中执行一个执行策略,该策略将(a)为您提供足够的安全以满足您的需求,并且(b)允许您执行你感觉舒适的脚本是安全的。见Get-Help Set-ExecutionPolicy