windows-运维-08 执行文件和脚本

windows-运维-08 执行文件和脚本

执行文件和脚本

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

关于脚本

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

执行批处理文件

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

1
2
3
4
@echo off
echo batch File Test
pause
Dir %windir%/system

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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脚本文件

1
2
3
4
5
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脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
……………………………………以下省略很多进程信息

执行powershell脚本

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

1
2
3
4
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

初次执行脚本时,可能会碰到一个异常:

1
2
3
4
5
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的默认安全设置禁用了执行脚本,要启用这个功能需要拥有管理员的权限。

欢迎打赏,谢谢
------ 本文结束------
0%