在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自带的记事本。

1
PS C:\PS> notepad

执行外部脚本文件

执行批处理文件

批处理是扩展名为”.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查看当前文件夹的构成。

1
2
get-alias dir
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

转载请注明本网址。