PowerShell脚本无法调用自身,因为“在此系统上禁用了运行脚本”

时间:2017-12-27 11:55:10

标签: powershell scripting

我正在尝试编写一个将Linux子系统安装到PC上的脚本。这是代码:

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语句检查脚本是否以系统管理员权限运行(似乎无法再找到它)。我也是在Fedora主机上的VM中运行它。我认为它不能自称因为“在这个系统上禁用运行脚本”这一事实非常奇怪。我拿出了if语句,一切运行正常,它安装了WSL。

1 个答案:

答案 0 :(得分:0)

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

要启用运行脚本,您需要以管理员身份运行PowerShell会话,并在该会话中Set-ExecutionPolicy执行一项执行策略,该策略将(a)为您提供足够的安全性以满足您的需求,以及(b)允许您执行您认为安全的脚本。请参阅Get-Help Set-ExecutionPolicy