Hyper-V Server 2012创建脚本运行环境

一个PowerShell脚本其实就是一个简单的文本文件,这个文件包含了一系列PowerShell命令,每个命令显示为独立的一行,PowerShell脚本文件扩展名为.PS1。那么,是不是可以在PowerShell环境下直接可以运行.PS1文件?

clip_image002

我们可以看到,在PowerShell环境下,是不能直接运行.PS1文件的。这是为防止恶意脚本的执行,PowerShell的一个默认执行策略,这个执行策略被设为受限的(Restricted),意味着PowerShell脚本无法执行,它每次只能执行一行命令。

我们可以通过一个命令来查看当前的策略:

Get-ExecutionPolicy –List 

clip_image004

印证了上面的本地默认策略被设为受限的(Restricted),而其它 MachinePolicy;UserPolicy;Process;CurrentUser等没有定义。那么,用什么方法可以修改这个默认策略呢?我们又用到下面一条命令:

Set-ExecutionPolicy <policy name>    这个 <policy name>等于(Restricted;AllSigned;RemoteSigned;Unrestricted;Bypass;Undefined),下面是微软对这些<policy name>的定义:


WINDOWS POWERSHELL 执行策略 ————————————-    Windows PowerShell 执行策略如下:    “Restricted”是默认策略。        Restricted            – 默认执行策略。            – 允许单个命令运行,但不能运行脚本。            – 阻止所有脚本文件的运行,包括格式和配置文件 (.ps1xml)、模块脚本文件 (.psm1)               和 Windows PowerShell 配置文件 (.ps1)。            AllSigned            – 可以运行脚本。            – 要求所有脚本和配置文件由可信发布者签名,包括在本地计算机上编写的脚本。           – 在运行来自尚未分类为可信或不可信发布者的脚本之前进行提示。            – 运行来自 Internet 以外的源的未签名脚本及已签名但有恶意的脚本存在风险。              RemoteSigned            – 可以运行脚本。            – 要求可信发布者对从 Internet(包括电子邮件和即时消息程序)下载的脚本和配置文件 进行数字签名。           – 不要求对已经运行和已在本地计算机编写的脚本(不是从 Internet 下载的脚本)进行数 字签名。            – 面临运行已签名但有恶意的脚本带来的风险。        Unrestricted            – 可以运行未签名脚本。(面临运行恶意脚本所带来的风险。)            – 在运行从 Internet 下载的脚本和配置文件之前警告用户。        Bypass            – 不阻止任何执行项,不显示警告和提示。            – 此执行策略设计用于两种配置:一种是 Windows PowerShell 脚本内置于一个较大的 应用程序中;一种是 Windows PowerShell 成为拥有自身安全模型的某个程序的基础。        Undefined            – 当前作用域中未设置执行策略。            – 如果所有作用域中的执行策略为 Undefined,则有效执行策略为 Restricted,该策略 是默认执行策略。 注意:在不对通用命名约定 (UNC) 路径与 Internet 路径加以区分的系统上,可能无法使用           RemoteSigned 执行策略来允许运行由 UNC 路径标识的脚本。


一般情况下,如果您对自己所写的脚本文件的把握,可以执行下面命令:

    Set-ExecutionPolicyUnrestricted  

查看执行情况:

Get-ExecutionPolicyLocalMachine

clip_image006

我们可以用Windows Server 2012 自带的的PowerShell ISE编辑器来编辑一个.PS1文件来验证:

clip_image008