前言

上一篇博文,我介绍了一下powershell和cmd的对比。通过学习,我发现powershell的确比cmd更加power,也更加适应现在的使用场景。

那么本文将继续介绍一个powershell的另一个特性,执行策略。

execution policy描述

首先我们看看官网是怎么描述execution policy的:

PowerShell's execution policy is a safety feature that controls the conditions under which PowerShell loads configuration files and runs scripts. This feature helps prevent the execution of malicious scripts.

On a Windows computer you can set an execution policy for the local computer, for the current user, or for a particular session. You can also use a Group Policy setting to set execution policies for computers and users.

Execution policies for the local computer and current user are stored in the registry. You don't need to set execution policies in your PowerShell profile. The execution policy for a particular session is stored only in memory and is lost when the session is closed.

The execution policy isn't a security system that restricts user actions. For example, users can easily bypass a policy by typing the script contents at the command line when they cannot run a script. Instead, the execution policy helps users to set basic rules and prevents them from violating them unintentionally.

On non-Windows computers, the default execution policy is Unrestricted and cannot be changed. The Set-ExecutionPolicy cmdlet is available, but PowerShell displays a console message that it's not supported. While Get-ExecutionPolicy returns Unrestricted on non-Windows platforms, the behavior really matches Bypass because those platforms do not implement the Windows Security Zones.

我们总结一下,这段文字中提到了几个要点:

  1. powershell的执行策略是种安全特性,保证不会什么猫狗脚本都执行,对于操作系统是种保护。
  2. windows的执行策略执行粒度分3种:本机、当前用户、特定会话。本机和当前用户的策略会存进注册表,当前会话的执行策略只会进内存,会话一断就会消失。
  3. 执行策略并不会限制用户操作,只是给了用户一把安全锁,可用可不用。
  4. 对于非windows机器,不会有执行策略的设置,因此会建议windows机器来做设置。

常见的执行策略

明白了上面的几个要点,我们来看windows提供了哪些执行策略供我们使用。

  1. ByPass

    任何脚本都可以执行,且没有任何提示。

  2. Undefined

    没有设置脚本执行策略。

  3. Unrestricted

    允许运行未签名的脚本,但是会有安全性提示。

  4. Default

    默认策略,对客户端是Restricted,对服务端是RemoteSigned

  5. RemoteSigned

    Windows Server 2012 R2 之后的默认策略

    如果从网络下载的脚本会有限制,需要添加数字签名;如果是本地创建的脚本,则不需要数字签名可以运行。

但是问题来了,真的会有老哥从网络上下载到本地运行,而不是复制粘贴到本地,自己创建的文件里?

不会吧,不会吧?

  1. AllSigned

    本策略只允许运行具有数字签名的脚本。

  2. Restricted

    本策略允许运行命令,但无法运行脚本。

运行范围

上面也讲了,powershell有3种范围:本机、当前用户、当前会话。

可使用Scope选项进行设置。

PS C:\Windows\system32> Get-ExecutionPolicy -Scope LocalMachine
RemoteSigned
PS C:\Windows\system32> Get-ExecutionPolicy -Scope CurrentUser
Undefined
PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned -Scope CurrentUserc
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): A
PS C:\Windows\system32> Get-ExecutionPolicy -Scope CurrentUser
RemoteSigned

cmd调用powershell

由于powershell和cmd是不同的命令行,而且powershell有执行策略的限制,如果我们想使用cmd去运行powershell脚本,除了需要设置powershell的策略,还需要使用cmd设置ps1脚本默认的运行方式。

默认方式是打开/编辑,而不是运行。

设置成运行:

ftype Microsoft.PowerShellScript.1="%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" "%1"

设置成编辑:

ftype Microsoft.PowerShellScript.1="%SystemRoot%\system32\notepad.exe" "%1"

鸣谢

官网

powershell脚本执行策略

CMD命令行修改.ps1文件(powershell脚本)的默认打开方式

powershell 执行策略的更多相关文章

  1. 绕过PowerShell执行策略方法总结

    默认情况下,PowerShell配置为阻止Windows系统上执行PowerShell脚本.对于渗透测试人员,系统管理员和开发人员而言,这可能是一个障碍,但并非必须如此. 什么是PowerShell执 ...

  2. Win powershell执行策略配置

    参考连接:https://blog.csdn.net/jeffxu_lib/article/details/84710386 参考连接:http://www.cragsman.org/index.ph ...

  3. PowerShell~执行策略的介绍

    首先看一下无法加载ps1脚本的解决方法 事实上也是由于策略导致的  解决方法主是开启对应的策略 set-ExecutionPolicy RemoteSigned 执行策略更改 执行策略可以防止您执行不 ...

  4. 【原创】NuGet 出现“无法初始化 PowerShell 主机,如果将你的 PowerShell 执行策略设置设置为 AllSigned ,请先打开程序包管理控制台以初始化该主机” 错误的解决方法

    现象: 网上的设置 AllSigned 等方法都无效..后来考虑可能跟命令行版本兼容性有关系,然后在注册表命令行配置里发现一 ForceV2 设置项,抱着试一试的心态改了下,果然解决了! 解决方法:修 ...

  5. PowerShell 脚本执行策略

    为防止恶意脚本的执行,PowerShell 中设计了一个叫做执行策略(Execution Policy)的东西(我更倾向于把它叫做脚本执行策略).我们可以在不同的应用场景中设置不同的策略来防止恶意脚本 ...

  6. python虚拟环境virtualenv、virtualenv下运行IDLE、powershell 运行脚本由执行策略引起的问题

    一.为什么要创建虚拟环境: 应为在开发中会有同时对一个包不同版本的需求,创建多个开发环境就能解决这个问题.或许也会有对python不同版本的需求,这就需要使用程序来管理不同的版本,virtualenv ...

  7. Powershell ExecutionPolicy 执行策略

    简单说明 powershell对于脚本的执行有着严格的安全限制 Get-ExecutionPolicy -List #查看当前的执行策略 Set-ExecutionPolicy -Scope Curr ...

  8. Powershell 执行外部命令

    Powershell 执行外部命令 724 11月, 2011  在 Powershell  tagged Powershell教程 / 程序 by Mooser Lee本文索引[隐藏]1通过nets ...

  9. PowerShell执行脚本时“系统上禁止运行脚本”问题解决

    PowerShell执行脚本策略错误 错误信息:PowerShell运行脚本错误--"系统上禁止运行脚本" 原因:默认执行策略为Restricted 解决:执行Set-Execut ...

随机推荐

  1. python读取csv、excel、mysql内容

    前提:导入扩展包 import pandas as pd import pymysql ①读取csv文件 fpath='/test.csv'ratings=pd.read_csv(fpath)prin ...

  2. MySQL之SQL语句优化

    语句优化 即优化器利用自身的优化器来对我们写的SQL进行优化,然后再将其放入InnoDB引擎中执行. 条件简化 移除不必要的括号 select * from x where ((a = 5)); 上面 ...

  3. T1创世纪(原创)

    创世纪 这是我的第一道原创题 题解: 这道题的核心算法是:加维度的最短路+贪心 状态:\(dis[i][j][t][a]\)表示在 \(t\) 时,到达 \((i,j)\) ,当前共造\(a\)只&q ...

  4. Win10 LTSC 2021 安装及相关bug解决

    Win10 LTSC 2021 安装及相关bug解决 目录 Win10 LTSC 2021 安装及相关bug解决 准备文件 系统安装 系统激活 修复CPU占用高和输入法显示bug 安装微软应用商店 推 ...

  5. 关于python导入数据库excel数据时出现102, b"Incorrect syntax near '.15562'.DB-Lib error message 20018, severity 1的问题总结

    1.对于在使用python导入sqlsever时,出现102, b"Incorrect syntax near '.15562'.DB-Lib error message 20018, se ...

  6. HtmlParse:一款超轻量级的HTML文件解析和爬取工具

    HtmlParse 是一款基于windwos平台的HTML文档解析工具,可快速构建DOM树,从而轻松实现网页元素的爬取工作.DOM树就是一个HTML文档的节点树,每个节点由:标签(Tag).属性(At ...

  7. 聊聊 C# 方法重载的底层玩法

    最近在看 C++ 的方法重载,我就在想 C# 中的重载底层是怎么玩的,很多朋友应该知道 C 是不支持重载的,比如下面的代码就会报错. #include <stdio.h> int say( ...

  8. 5种在TypeScript中使用的类型保护

    摘要:在本文中,回顾了TypeScript中几个最有用的类型保护,并通过几个例子来了解它们的实际应用. 本文分享自华为云社区<如何在TypeScript中使用类型保护>,作者:Ocean2 ...

  9. Elasticsearch学习系列四(聚合搜索)

    聚合分析 聚合分析是数据库中重要的功能特性,完成对一个查询的集中数据的聚合计算.如:最大值.最小值.求和.平均值等等.对一个数据集求和,算最大最小值等等,在ES中称为指标聚合,而对数据做类似关系型数据 ...

  10. CompletableFuture的入门

    runAsync 和 supplyAsync runAsync接受一个Runable的实现,无返回值 CompletableFuture.runAsync(()->System.out.prin ...