在Windows的CMD提示符上面,我们可以执行一些外部命令。比如,输入notepad并回车,将打开记事本。输入ping www.baidu.com
并回车,将查看本地电脑和百度网站之间的连接情况。Powershell能够像CMD一样很好的执行外部命令,功能更强大。所有在CMD中可以运行的外部命令都可以在PowerShell中运行。
Powershell还能够执行批处理脚本(扩展名是.bat或.cmd文件),VBS脚本文件。当然了,肯定能执行PowerShell自身文件(扩展名是.ps1)。
执行外部命令
PowerShell能够执行的命令非常多,只介绍几个比较常用的。
通过netstat查看网络端口状态。
1
2
3
4
5
6
7
|
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
|
通过IPConfig查看自己的网络配置
1
2
3
4
5
6
7
8
9
10
11
|
PS C:\PS> ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . : www.mossfly.com
Link-local IPv6 Address . . . . . : fe80::b9dd:91e33:33f0:7885%10
IPv4 Address. . . . . . . . . . . : 192.168.140.100
Subnet Mask . . . . . . . . . . . : 255.255.252.0
Default Gateway . . . . . . . . . : 192.168.140.1
|
route print查看路由信息
1
2
3
4
5
6
7
8
9
10
|
PS C:\PS> route print
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.140.1 192.168.140.100 20
192.0.0.0 255.0.0.0 On-link 192.0.0.1 306
192.0.0.1 255.255.255.255 On-link 192.0.0.1 306
192.255.255.255 255.255.255.255 On-link 192.0.0.1 306
192.168.140.0 255.255.252.0 On-link 192.168.140.100 276
|
启动CMD控制台
键入cmd或者cmd.exe,退出cmd可以通过命令exit。
1
2
3
4
5
6
|
PS C:\PS> cmd
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\PS>exit
PS C:\PS>
|
启动外部程序记事本
键入notepad或者notepad.exe,即可打开Windows自带的记事本。
执行外部脚本文件
执行批处理文件
批处理是扩展名为”.bat”的文本文件,它可以包含任何cmd控制台能够处理的命令。当批处理文件被打开,Cmd控制台会逐行执行每条命令。那Powershell能够直接执行批处理吗?将下列命令保存为ping.bat
1
2
3
4
|
@echo off
echo batch File Test
pause
Dir %windir%/system
|
切换到ping.bat所在的目录,然后执行ping,结果如下。
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
|
执行VBS脚本文件
在powershell中执行VB脚本,需要使用cscript.exe。格式是cscript.exe VBS文件名
。
例如,将下列命令保存为test.vbs。
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
|
在powershell中执行test.vbs。test.vbs前面的.\表示是当前文件件路径。
1
|
PS C:\PS> cscript.exe .\test.vbs
|
执行本身脚本文件(powershell文件,扩展名为“.ps1”)
为了安全,PowerShell的默认安全设置(执行策略)禁用了执行脚本,如果执行脚本会提示错误。
现有PowerShell文件test.ps1,内容为查看dir别名关联的Cmdlet,并执行dir查看当前文件夹的构成。
在PowerShell命令行中执行ps1脚本比较简单,直接输入文件名就可以了。执行test.ps1的结果如下,
1
2
3
4
5
6
7
8
9
10
|
PS C:\Users\sso12\Desktop\temp> .\test.ps1
.\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\sso12\Desktop\temp\test.ps1 を読
み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を
参照してください。
発生場所 行:1 文字:1
+ .\test.ps1
+ ~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Users\sso12\Desktop\temp>
|
可以更改PowerShell的安全设置(执行策略)来允许其可以运行ps1文件。Get-ExecutionPolicy命令是查看当前的执行策略,Set-ExecutionPolicy命令是设置当前的执行策略。执行Set-ExecutionPolicy命令的用户必须具有管理员权限。
Windows 10默认的策略是Restricted,也就是不能执行脚本。将其修改为UnRestricted策略就可以。修改命令如下(请以管理员的方式运行PowerShell命令行)。会询问你是否修改策略,请输入Y来确认修改。
1
2
3
4
5
6
7
8
9
10
11
12
|
PS C:\Users\sso12\Desktop\temp> Get-ExecutionPolicy
Restricted
PS C:\Users\sso12\Desktop\temp> Set-ExecutionPolicy -ExecutionPolicy Unrestricted
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y
PS C:\Users\sso12\Desktop\temp> Get-ExecutionPolicy
Unrestricted
PS C:\Users\sso12\Desktop\temp>
|
修改完策略后,重新启动PowerShell命令行,然后再执行test.ps1,这次就可以正常执行了。
1
2
3
4
5
6
7
8
9
10
|
PS C:\Users\sso12\Desktop\temp> .\test.ps1
CommandType Name Version Source
----------- ---- ------- ------
Alias dir -> Get-ChildItem
LastWriteTime : 2019/09/26 15:32:07
Length : 13778
Name : a.txt
……
|
PowerShell的执行策略ExecutionPolicy共有7个。分别为AllSigned,Bypass,Default,RemoteSigned,Restricted,Undefined和Unrestricted。
参考资料:
https://www.pstips.net/powershell-invoking-files-and-scripts.html
转载请注明本网址。