Windows Powershell 执行文件和脚本

象运行可执行文件一样,Powershell运行文件和脚本,也必须使用绝对路径或者相对路径,或者要运行的文件必须定义在可受信任的环境变量中。

关于脚本
脚本和批处理都属于伪可执行文件,它们只是包含了若干命令行解释器能够解释和执行的命令行代码。

执行批处理文件
批处理是扩展名为”.bat”的文本文件,它可以包含任何cmd控制台能够处理的命令。当批处理文件被打开,Cmd控制台会逐行执行每条命令。那Powershell能够直接执行批处理吗?
将下列命令保存为ping.bat

@echo off
echo batch File Test
pause
Dir %windir%/system

然后执行ping
屏幕会打印ping命令帮助,说明调用的ping cmd 而不是ping.bat。
改为:

PS C:\PS> ./ping
batch File Test
Press any key to continue . . .
 Volume in drive C has no label.
 Volume Serial Number is 4E9B-D846

 Directory of C:Windowssystem

2009/06/11 05:21   69,584 avicap.dll
2009/06/11 05:21   109,456 avifile.dll
2009/07/14 05:41   32,816 COMMDLG.DLL
2009/07/14 05:41    2,000 keyboard.drv
2009/06/11 05:42    9,936 lzexpand.dll
2009/06/11 05:21   73,376 mciavi.drv
2009/06/11 05:21   25,264 mciseq.drv
2009/06/11 05:21   28,160 mciwave.drv
2009/07/14 05:41   68,992 MMSYSTEM.DLL
2009/07/14 05:41    1,152 mmtask.tsk
2009/07/14 05:41    2,032 mouse.drv
2009/06/11 05:21   126,912 msvideo.dll
2009/06/11 05:42   82,944 olecli.dll
2009/07/14 05:41   24,064 OLESVR.DLL
2009/07/14 05:41    5,120 SHELL.DLL
2009/07/14 05:41    1,744 sound.drv
2009/06/11 05:25    5,532 stdole.tlb
2009/07/14 05:41    3,360 system.drv
2009/07/14 05:41    4,048 TIMER.DRV
2009/06/11 05:42    9,008 ver.dll
2009/07/14 05:41    2,176 vga.drv
2009/07/14 05:41   12,704 WFWNET.DRV
    22 File(s)  700,380 bytes
    2 Dir(s) 75,927,420,928 bytes free

这时运行的是批处理。

通过cmd进入cmd控制台输入ping发现执行的不是ping命令,而是直接运行ping.bat ,也就是说可以通过.bat 覆盖cmd命令。这种机制很危险,如果有人侵入电脑,并将系统内部命令篡改成自己批处理,那就太悲剧了。 这种命令与脚本的混淆不会发生在powershell中,因为powershell有更安全的机制。

执行VB脚本文件
将下列命令保存为test.vbs

Set wmi = GetObject("winmgmts:")
Set collection = wmi.ExecQuery("select * from Win32_Process")
For Each process in collection
WScript.Echo process.getObjectText_
Next

执行 .\test.vbs 会遍历当前Win32进程,并把每个进程的详细信息通过窗口显示出来。
怎样让VB脚本的通过控制台输出呢?
Wscript //H:CScript
怎样还原VB脚本通过窗口输出呢?
WScript //H:WScript
在powershell中执行VB脚本

PS C:\PS> cscript.exe .test.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

instance of Win32_Process
{
  Caption = "System Idle Process";
  CreationClassName = "Win32_Process";
  CSCreationClassName = "Win32_ComputerSystem";
  CSName = "test-me-01";
  Description = "System Idle Process";
  Handle = "0";
  HandleCount = 0;
  KernelModeTime = "484113379271";
  Name = "System Idle Process";
  OSCreationClassName = "Win32_OperatingSystem";
  OSName = "Microsoft Windows 7 Enterprise |C:Windows|DeviceHarddisk0Partition2";
  OtherOperationCount = "0";
  OtherTransferCount = "0";
  PageFaults = 0;
  PageFileUsage = 0;
  ParentProcessId = 0;
  PeakPageFileUsage = 0;
  PeakVirtualSize = "0";
  PeakWorkingSetSize = 0;
  Priority = 0;
  PrivatePageCount = "0";
  ProcessId = 0;
  QuotaNonPagedPoolUsage = 0;
  QuotaPagedPoolUsage = 0;
  QuotaPeakNonPagedPoolUsage = 0;
  QuotaPeakPagedPoolUsage = 0;
  ReadOperationCount = "0";
  ReadTransferCount = "0";
  SessionId = 0;
  ThreadCount = 2;
  UserModeTime = "0";
  VirtualSize = "0";
  WindowsVersion = "6.1.7601";
  WorkingSetSize = "24576";
  WriteOperationCount = "0";
  WriteTransferCount = "0";
};

执行powershell脚本
Powershell拥有自己的脚本,扩展名为“.ps1”

PS C:\PS> echo "dir;Get-PSProvider;help dir" >test.ps1
PS C:\PS> Get-Content ./test.ps1
dir;Get-PSProvider;help dir
PS C:\PS> ./test.ps1初次执行脚本时,可能会碰到一个异常:
File ” C:\PS\test.ps1″ cannot be loaded because the
execution of scripts is disabled on this system. Please see
“get-help about_signing” for more details.
At line:1 char:10
+ .test.ps1 <<<<

这是powershell的默认安全设置禁用了执行脚本,要启用这个功能需要拥有管理员的权限。

开启:set-executionpolicy remotesigned

关闭:Set-ExecutionPolicy Restricted

Powershell调用入口的优先级
别名:控制台首先会寻找输入是否为一个别名,如果是,执行别名所指的命令。因此我们可以通过别名覆盖任意powershell命令,因为别名的优先级最高。

函数:如果没有找到别名,会继续寻找函数,函数类似别名,只不过它包含了更多的powershell命令。因此可以自定义函数扩充cmdlet 把常用的参数给固化进去。

命令:如果没有找到函数,控制台会继续寻找命令,即cmdlet,powershell的内部命令。

脚本:没有找到命令,继续寻找扩展名为“.ps1”的Powershell脚本。

文件:没有找到脚本,会继续寻找文件,如果没有可用的文件,控制台会抛出异常。

The term ‘now' is not recognized as the name of a cmdlet, function, script file, or operable program. Chec
g of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:4
+ now <<<<
+ CategoryInfo : ObjectNotFound: (now:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
(0)

相关推荐

  • Powershell实现编写和运行脚本

    一个Powershell仅仅是一个包含Powershell代码的文本文件.如果这个文本文件执行,Powershell解释器会逐行解释并执行它的的语句.Powershell脚本非常像以前CMD控制台上的批处理文件.您可以通过非常简单的文本编辑工具创建Powershell脚本. 通过重定向创建脚本 如果您的脚本不是很长,您甚至可以直接在控制台中要执行的语句重定向给一个脚本文件. PS E:> '"Hello,Powershell Script"' > MyScript.ps1

  • Windows PowerShell是啥?看完本文你就懂它了

    引子 一直很羡慕Linux的命令提示符(当然他们叫Shell).正则表达式,管道,各种神奇的命令,组合起来就能高效完成很多复杂的任务.效率实在是高.流了n年的哈喇子以后,终于有幸用上了Win7,邂逅了cmd的升级版:Windows PowerShell.从此暗爽无比,原来Windows下也有这样的利器呀~ 看看下面的Windows脚本,不到15行有效代码.在Win7下只要右击脚本文件,选择Run with PowerShell,就会自动找到最占内存的10个进程,然后将它们占用的内存画成一个三维饼

  • 25个常用PowerShell命令总结

    尽管Windows PowerShell已经出现一段时间了,习惯命令行的管理员可能对了解PowerShell功能的基础很感兴趣. 下面我们看看能由Windows PowerShell完成的最常见的25个任务.不止是这些任务很简单,显示语句的命令架构和其他PowerShell命令也很简单.掌握好这些基本命令是成为PowerShell专家的必经之路. 入门级别 1. 像文件系统那样操作Windows Registry--cd hkcu: 2. 在文件里递回地搜索某个字符串--dir –r | sel

  • PowerShell单行注释、多行注释、块注释的方法

    PowerShell的注释符分为行注释符和块注释符.行注释符使用井号(#)引起一行:块注释符使用"<#"和 "#>"来引起一段注释. 行注释符 举例如下: 复制代码 代码如下: # 定义一个计数变量 $i = 0 块注释符.多行注释 举例如下: 复制代码 代码如下: <# 文件:xxx.ps1 用途:用于测试的xxx功能脚本 创建:2013-03-27,jb51.net 修改:2013-09-04,jb51.net #> 这是小编每次写脚本之

  • 如何防范PowerShell代码注入漏洞绕过受限语言模式

    导语:受限语言模式是缓解PowerShell攻击的一种方式,能够阻止执行任意未签名的代码. 介绍 受限语言模式是缓解PowerShell攻击的一种方式,能够阻止执行任意未签名的代码.当Device Guard或者AppLocker处于强制模式时,它是最实际有效的强制安全措施,因为未被策略允许的任何脚本或者模块都位于受限语言模式下,这严重限制了攻击者执行未签名的代码.通过限制语言模式限制了Add-Type的调用.限制Add-Type明显是考虑到了它能编译并加载任意的C#代码到你的运行空间中去. 但

  • PowerShell脚本写的文件.ps1文件介绍

    .ps1文件是PowerShell写好的脚本文件.在Windows系统中,默认情况下是不允许执行.ps1文件的,那么怎么才能让系统允许执行.ps1文件呢? 什么是".ps1"文件? 这个是PowerShell写的脚本文本,你可以在记事本中写一段PowerShell代码,然后将其保存为"xxx.ps1",后面要使用它的时候,双击即可运行了.这有点像批处理的".bat"文件,也有点像VBScript的".vbs"文件.这些都是Wi

  • Windows Powershell 执行文件和脚本

    象运行可执行文件一样,Powershell运行文件和脚本,也必须使用绝对路径或者相对路径,或者要运行的文件必须定义在可受信任的环境变量中. 关于脚本 脚本和批处理都属于伪可执行文件,它们只是包含了若干命令行解释器能够解释和执行的命令行代码. 执行批处理文件 批处理是扩展名为".bat"的文本文件,它可以包含任何cmd控制台能够处理的命令.当批处理文件被打开,Cmd控制台会逐行执行每条命令.那Powershell能够直接执行批处理吗? 将下列命令保存为ping.bat @echo off

  • Windows Powershell 执行外部命令

    Powershell 能够像CMD一样很好的执行外部命令. 通过netstat查看网络端口状态 PS C:\PS> netstat Active Connections Proto Local Address Foreign Address State TCP 192.168.0.100:3049 192.168.0.88:7575 ESTABLISHED TCP 192.168.0.100:3052 192.168.0.88:7575 ESTABLISHED TCP 192.168.0.100

  • Windows自动执行python脚本操作步骤

    目录 运行Python脚本:.bat文件 python脚本 bat运行经验 定时在Windows中触发.bat文件 上一篇自动在Windows中运行Python脚本并定时触发功能实现传送门链接 运行Python脚本:.bat文件 在Windows中,.bat文件是批处理文件,是与Linux中.sh(shell)文件很像的东西. 如果,我们想在Windows中运行一个Python脚本,我们可以通过CMD,首先进入python文件所在的目录,之后运行. 但是这样很麻烦,每次都要打开CMD,进入文件夹

  • PowerShell包含另一个脚本文件和获取当前脚本所在目录的方法例子

    本文介绍在PowerShell脚本中,如何获取脚本文件(.ps1文件)所在的目录.本文介绍在方法适用于PowerShell 3.0. 在PowerShell 3.0中,有一个变量可以很方便的获取脚本所在的目录.我们在e:\ps\script1.ps1和script2.ps1,内容分别如下: script1.ps1内容: 复制代码 代码如下: Write-Host "This is script1.ps1" Write-Host "Let me call script2.ps1

  • Windows和Linux下定时删除某天前的文件的脚本

    以前做到最多的定时我们就是定时备份功能了,我们常用利用定时功能来备份网站数据或备份数据库了,下面我来给(www.jb51.net)大家介绍几个Linux与Windows中定时删除某天前的文件方法,这个与备份有点区别,但大同小义了. Windows下bat文件内容如下: 复制代码 代码如下: @echo off forfiles -p "D:\servers\apache2.2\logs" -s -m *.log -d -15 -c "cmd /c del @path"

  • MySQL执行外部sql脚本文件的命令

    目录 1.创建包含sql命令的sql脚本文件 2.执行sql脚本文件(介绍三种方式) sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为"sql脚本文件"),然后通过相关的命令执行这个sql脚本文件. 1.创建包含sql命令的sql脚本文件 在D盘根目录下新建一个文本文档,并改名为day01.sql(名字自己取,最好不要有中文,特殊符号,以.sql结尾)   day01.sql文件中包含一些列的sql语句,每条语句最后以;结尾,文件内

  • Windows Powershell 自动化变量

    Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量. 这些变量一般存放的内容包括 用户信息:例如用户的根目录$home 配置信息:例如powershell控制台的大小,颜色,背景等. 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等. PS> $HOME C:\Users\test PS> $currentProcessID=$pid PS> $currentProcessID 5356 PS> Get-Process -Id $pid H

  • Windows Powershell 环境变量

    传统的控制台一般没有象Powershell这么高级的变量系统.它们都是依赖于机器本身的环境变量,进行操作 .环境变量对于powershell显得很重要,因为它涵盖了许多操作系统的细节信息.此外,powershell中的变量只存在于powershell内部的会话中,一旦powershell关闭,这些变量就会自生自灭.但是如果环境变量被更新了,它会继续保存在操作系统中,即使其它程序也可以调用它. 读取特殊的环境变量 通过环境变量读取Windows操作系统的安装路径,和默认应用程序的安装路径. PS>

  • linux和windows下的自动ftp脚本(shell bat)

    一.先来看linux下的: 复制代码 代码如下: #! /bin/bashcd /ftp/CURRENTDATE=` date +%Y%m%d `YESTERDAY=` date -d yesterday +%Y%m%d `THREEDAYAGO=` date -d '3 days ago' +%Y%m%d `#echo $TWODAYAGOftp -n -i 34.97.34.3 << !user ftpuser ftpuserbinmput $YESTERDAY.*delete $THRE

随机推荐