002_PowerShell交互

TOC

003_PowerShell交互

参考:

数学运算

我们可以把powershell当成一个计算器。像键入命令行那样输入数学表达式,回车,powershell会自动计算并把结果输出。

  • 加减乘除模(+,-,*,/,%)运算和小括号表达式
PS F:\test1\ddtest2>  1+2+3
6
PS F:\test1\ddtest2> 3.14*10*10
314
PS F:\test1\ddtest2> 1+3-(2.4-5)*(7.899-4.444)
12.983
  • 进制转换
PS F:\test1\ddtest2> 0xABCD  # 16进制转10进制
43981
  • 自动识别计算机容量单位,包括KB,MB,GB,TB,PB,计算
PS C:\pstest> 1pb/1tb
1024
PS C:\pstest> 1tb/1gb
1024
PS C:\pstest> 1gb/1kb
1048576
PS C:\pstest> 1gb/20mb*10kb
524288
PS C:\pstest> 80kb*800*30/1gb #假如一个网站每个页面大小为80kb,统计显示每天的PV操作为800,1个月下来占用的带宽
1.8310546875
PS C:pstest> 10GB/(80KB*5)/30 #假如一个网站的每天人均PV操作为5,页面大小为80Kb,主机提供商限制的总流量为10G,那平均每天的最大访客数
873.813333333333

执行外部命令

Powershell 能够像CMD一样很好的执行外部命令。

通过netstat查看网络端口状态

PS F:\test1\ddtest2> netstat

活动连接

  协议  本地地址          外部地址        状态
  TCP    127.0.0.1:1894         DESKTOP-TPFM5VI:1895   ESTABLISHED
  TCP    127.0.0.1:1895         DESKTOP-TPFM5VI:1894   ESTABLISHED
  TCP    127.0.0.1:1896         DESKTOP-TPFM5VI:1897   ESTABLISHED
  TCP    127.0.0.1:1897         DESKTOP-TPFM5VI:1896   ESTABLISHED
  TCP    127.0.0.1:1898         DESKTOP-TPFM5VI:1899   ESTABLISHED

通过IPConfig查看自己的网络配置

PS F:\test1\ddtest2> ipconfig

Windows IP 配置


以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::c0b4:ca38:a5b8:9a9d%16
   IPv4 地址 . . . . . . . . . . . . : 192.168.3.48
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.1.1

以太网适配器 VMware Network Adapter VMnet1:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::508:59c2:9a0:7de7%14
   IPv4 地址 . . . . . . . . . . . . : 192.168.134.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::2d0e:1af3:1d78:5657%4
   IPv4 地址 . . . . . . . . . . . . : 192.168.179.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0

route print查看路由信息

PS F:\test1\ddtest2> route print
===========================================================================
接口列表
16...40 b0 34 3d 71 41 ......Intel(R) Ethernet Connection (2) I219-LM
14...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
  4...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.3.48    291
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
      192.168.3.0    255.255.255.0            在链路上      192.168.3.48    291
     192.168.3.48  255.255.255.255            在链路上      192.168.3.48    291
    192.168.3.255  255.255.255.255            在链路上      192.168.3.48    291
    192.168.134.0    255.255.255.0            在链路上     192.168.134.1    291
    192.168.134.1  255.255.255.255            在链路上     192.168.134.1    291
  192.168.134.255  255.255.255.255            在链路上     192.168.134.1    291
    192.168.179.0    255.255.255.0            在链路上     192.168.179.1    291
    192.168.179.1  255.255.255.255            在链路上     192.168.179.1    291
  192.168.179.255  255.255.255.255            在链路上     192.168.179.1    291
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    331
        224.0.0.0        240.0.0.0            在链路上     192.168.134.1    291
        224.0.0.0        240.0.0.0            在链路上     192.168.179.1    291
        224.0.0.0        240.0.0.0            在链路上      192.168.3.48    291
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
  255.255.255.255  255.255.255.255            在链路上     192.168.134.1    291
  255.255.255.255  255.255.255.255            在链路上     192.168.179.1    291
  255.255.255.255  255.255.255.255            在链路上      192.168.3.48    291
===========================================================================
永久路由:
  网络地址          网络掩码  网关地址  跃点数
          0.0.0.0          0.0.0.0      192.168.1.1     默认
===========================================================================

IPv6 路由表
===========================================================================
活动路由:
 接口跃点数网络目标                网关
  1    331 ::1/128                  在链路上
 14    291 fe80::/64                在链路上
  4    291 fe80::/64                在链路上
 16    291 fe80::/64                在链路上
 14    291 fe80::508:59c2:9a0:7de7/128
                                    在链路上
  4    291 fe80::2d0e:1af3:1d78:5657/128
                                    在链路上
 16    291 fe80::c0b4:ca38:a5b8:9a9d/128
                                    在链路上
  1    331 ff00::/8                 在链路上
 14    291 ff00::/8                 在链路上
  4    291 ff00::/8                 在链路上
 16    291 ff00::/8                 在链路上
===========================================================================
永久路由:
  无

启动CMD控制台

启动CMD控制台键入cmd或者cmd.exe,退出cmd可以通过命令exit。

cmd的开头是 盘符:的路径

powershell的开头是 PS

PS F:\test1\ddtest2> cmd
Microsoft Windows [版本 10.0.18363.592]
(c) 2019 Microsoft Corporation。保留所有权利。

F:\test1\ddtest2>echo 现在是cmd的操作
现在是cmd的操作

F:\test1\ddtest2>exit

查找可用的Cmd控制台命令

Cmd.exe 通过 /c 来接收命令参数,在Cmd中help可以查看可用的命令,所以可以通过Cmd /c help 查找可用的Cmd控制台命令

PS F:\test1\ddtest2> cmd /c help
有关某个命令的详细信息,请键入 HELP 命令名
ASSOC          显示或修改文件扩展名关联。
ATTRIB         显示或更改文件属性。
BREAK          设置或清除扩展式 CTRL+C 检查。
BCDEDIT        设置启动数据库中的属性以控制启动加载。
CACLS          显示或修改文件的访问控制列表(ACL)。
CALL           从另一个批处理程序调用这一个。
CD             显示当前目录的名称或将其更改。
CHCP           显示或设置活动代码页数。
CHDIR          显示当前目录的名称或将其更改。
CHKDSK         检查磁盘并显示状态报告。
CHKNTFS        显示或修改启动时间磁盘检查。
CLS            清除屏幕。
CMD            打开另一个 Windows 命令解释程序窗口。
COLOR          设置默认控制台前景和背景颜色。
COMP           比较两个或两套文件的内容。
COMPACT        显示或更改 NTFS 分区上文件的压缩。
CONVERT        将 FAT 卷转换成 NTFS。你不能转换
               当前驱动器。
COPY           将至少一个文件复制到另一个位置。
DATE           显示或设置日期。
DEL            删除至少一个文件。
DIR            显示一个目录中的文件和子目录。
DISKPART       显示或配置磁盘分区属性。
DOSKEY         编辑命令行、撤回 Windows 命令并
               创建宏。
DRIVERQUERY    显示当前设备驱动程序状态和属性。
ECHO           显示消息,或将命令回显打开或关闭。
ENDLOCAL       结束批文件中环境更改的本地化。
ERASE          删除一个或多个文件。
EXIT           退出 CMD.EXE 程序(命令解释程序)。
FC             比较两个文件或两个文件集并显示
               它们之间的不同。
FIND           在一个或多个文件中搜索一个文本字符串。
FINDSTR        在多个文件中搜索字符串。
FOR            为一组文件中的每个文件运行一个指定的命令。
FORMAT         格式化磁盘,以便用于 Windows。
FSUTIL         显示或配置文件系统属性。
FTYPE          显示或修改在文件扩展名关联中使用的文件
               类型。
GOTO           将 Windows 命令解释程序定向到批处理程序
               中某个带标签的行。
GPRESULT       显示计算机或用户的组策略信息。
GRAFTABL       使 Windows 在图形模式下显示扩展
               字符集。
HELP           提供 Windows 命令的帮助信息。
ICACLS         显示、修改、备份或还原文件和
               目录的 ACL。
IF             在批处理程序中执行有条件的处理操作。
LABEL          创建、更改或删除磁盘的卷标。
MD             创建一个目录。
MKDIR          创建一个目录。
MKLINK         创建符号链接和硬链接
MODE           配置系统设备。
MORE           逐屏显示输出。
MOVE           将一个或多个文件从一个目录移动到另一个
               目录。
OPENFILES      显示远程用户为了文件共享而打开的文件。
PATH           为可执行文件显示或设置搜索路径。
PAUSE          暂停批处理文件的处理并显示消息。
POPD           还原通过 PUSHD 保存的当前目录的上一个
               值。
PRINT          打印一个文本文件。
PROMPT         更改 Windows 命令提示。
PUSHD          保存当前目录,然后对其进行更改。
RD             删除目录。
RECOVER        从损坏的或有缺陷的磁盘中恢复可读信息。
REM            记录批处理文件或 CONFIG.SYS 中的注释(批注)。
REN            重命名文件。
RENAME         重命名文件。
REPLACE        替换文件。
RMDIR          删除目录。
ROBOCOPY       复制文件和目录树的高级实用工具
SET            显示、设置或删除 Windows 环境变量。
SETLOCAL       开始本地化批处理文件中的环境更改。
SC             显示或配置服务(后台进程)。
SCHTASKS       安排在一台计算机上运行命令和程序。
SHIFT          调整批处理文件中可替换参数的位置。
SHUTDOWN       允许通过本地或远程方式正确关闭计算机。
SORT           对输入排序。
START          启动单独的窗口以运行指定的程序或命令。
SUBST          将路径与驱动器号关联。
SYSTEMINFO     显示计算机的特定属性和配置。
TASKLIST       显示包括服务在内的所有当前运行的任务。
TASKKILL       中止或停止正在运行的进程或应用程序。
TIME           显示或设置系统时间。
TITLE          设置 CMD.EXE 会话的窗口标题。
TREE           以图形方式显示驱动程序或路径的目录
               结构。
TYPE           显示文本文件的内容。
VER            显示 Windows 的版本。
VERIFY         告诉 Windows 是否进行验证,以确保文件
               正确写入磁盘。
VOL            显示磁盘卷标和序列号。
XCOPY          复制文件和目录树。
WMIC           在交互式命令 shell 中显示 WMI 信息。

查看Powershell的环境变量

PS F:\test1\ddtest2> $env:Path
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\software\jdk\bin;E:\software\node\;E:\software\mysql-5.7.27-winx64\bin;E:\software\SqlServer\SqlServer(x86)\110\Tools\Binn\;E:\software\SqlServer\SqlServer\110\Tools\Binn\;E:\software\SqlServer\SqlServer\110\DTS\Binn\;E:\software\SqlServer\SqlServer(x86)\110\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\;E:\software\SqlServer\SqlServer(x86)\110\DTS\Binn\;C:\Program Files (x86)\VanDyke Software\Clients\;C:\Program Files\Git\cmd;C:\Program Files\dotnet\;E:\software\SqlServer\SqlServer\130\Tools\Binn\;E:\software\zookeeper-3.4.12\bin;C:\Program Files\erl9.2\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.6\sbin;E:\software\apache-tomcat-8.5.41\bin;C:\Program Files\MongoDB\Server\4.0\bin;E:\software\protoc-3.9.0-win32;E:\software\protoc-3.9.0-win32\bin;E:\software\apache-maven-3.3.9\bin;E:\software\gradle6.5\bin;E:\software\gradle5.6.3\bin;E:\software\mysql-5.7.27-winx64\bin;E:\software\dartdev\Dart\dart-sdk\bin;E:\software\flutter_windows_v1.12.13\flutter\bin;E:\software\Android_sdk_idea\tools;E:\software\Android_sdk_idea\platform-tools;E:\software\Android_sdk_idea;E:\software\Android_sdk_idea\build-tools;E:\software\Android_sdk_idea\cmdline-tools;E:\software\Android_sdk_idea\docs;E:\software\Android_sdk_idea\emulator;E:\software\apache-maven-3.3.9\bin;E:\software\TortoiseSVN\bin;C:\Users\jsy1\AppData\Local\Programs\Python\Python38\Scripts\;C:\Users\jsy1\AppData\Local\Programs\Python\;C:\Users\jsy1\AppData\Local\Programs\Python\Python38\Scripts\;C:\Users\jsy1\AppData\Local\Programs\Python\Python38\;C:\Users\jsy1\AppData\Local\Microsoft\WindowsApps;C:\Users\jsy1\AppData\Roaming\npm;C:\Program Files (x86)\VanDyke Software\Clients\;C:\software\idea\bin;;;E:\software\vscode\bin;E:\software\Bandizip\

设置Powershell的环境变量

$env:Path=$env:Path+"新增的变量"

启动外部程序&

为什么可以通过notpad打开记事本,不能通过wordpad打开写字板?
因为notepad.exe位于C:Windows\system32 这个目录,而这个目录已经默认被包含在Powershell的环境变量$env:Path中。

而wordpad.exe 所在的“%ProgramFiles%\Windows NT\Accessories\wordpad.exe“目录却没有包含,可以先进入这个目录,再运行wordpad,或者将wordpad所在的目录加入到环境变量中,$env:Path=$env:Path+"%ProgramFiles%\Windows NT\Accessories"

默认键入一个字符串,powershell会将它原样输出,如果该字符串是一个命令或者启动程序,在字符串前加‘&’可以执行命令,或者启动程序。

注意:字符串需要加上""

PS F:\test1\ddtest2> 你好  # 没有引号,报错
你好 : 无法将“你好”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试
一次。
所在位置 行:1 字符: 1
+ 你好
+ ~~
    + CategoryInfo          : ObjectNotFound: (你好:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

PS F:\test1\ddtest2> "你好"
你好
PS F:\test1\ddtest2> "ls"
ls
PS F:\test1\ddtest2> & "ls"


    目录: F:\test1\ddtest2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2020/8/13      9:07           3598 h.txt
-a----        2020/8/13     10:21            122 test.txt
-a----        2020/8/13      8:51              2 text1.txt

命令

具体命令位于: https://www.cnblogs.com/ziyue7575/p/6b42ca7ea3947b7ec9178400ef4f843a.html ,这里只是写了基础

命令类型

PowerShell命令有四种命令类型:cmdlet,Alias,Function,Application

Windows PowerShell命令类型

  • cmdlet:内置命令
  • Alias:别名,可以用来缩短常见的较长的cmdlet,部分DOS命令会被解释为别名
  • Function:内置功能函数,用于简化cmdlet功能组合,也有部分DOS命令会被解释为函数
  • Application:应用程序,用来打开Windows的应用程序,也有部分DOS命令被解释为应用程序

内置命令cmdlet

内置的命令很多,比如Get-Help;

定义:

  • Windows PowerShell的命令行
  • 管理的最小单位
  • 可以单独使用,也可以组合使用

构成:

  • “动词-名词”结构,

    比如Get-Command中: 动词:Get,名词:Command

  • tab键补齐机制

查询:(使用Get-Command)

由于动词数量比名词少,所以通常情况下可以按照动词来获取命令.

比如:

# 查看动词为get的所有命令
Get-Command -Verb Get或者get # 动词不区分大小写

类型:
cmdlet的类型名为System.Management.Automation.CmdletInfo,包含下列属性和方法

cmdlet的属性和方法

运行这个命令,其中的CmdletInfo就是cmdlet的属性和方法

Get-Command -CommandType Cmdlet | Get-Member # 获取所有命令--| 获取属性,

cmdlet的命令

获取所有命令

Get-Command

别名

cmdlet 的名称由一个动词和一个名词组成,其功能对用户来讲一目了然。但是对于一个经常使用powershell命令的人每天敲那么多命令也很麻烦啊。能不能把命令缩短一点呢?于是“别名”就应运而生了。Powershell内部也实现了很多常用命令的别名。例如Get-ChildItem,列出当前的子文件或目录。它有两个别名:ls 和 dir,这两个别名来源于unix 的shell和windows的cmd。
因此别名有两个作用:

  • 继承:继承unix-shell和windows-cmd。
  • 方便:方便用户使用。

根据别名获取命令

语法:

Get-Alias -name 别名

比如:

PS C:\Users\jsy1> Get-Alias -name ls

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           ls -> Get-ChildItem

PS C:\Users\jsy1>  Get-Alias -name dir

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           dir -> Get-ChildItem

查看可用的别名

 ls alias:    获取所有别名(冒号不能去掉)
 Get-Alias  获取所有别名

比如:

  • 查看所有以Remove打头的cmdlet的命令的别名
dir alias: | where {$_.Definition.Startswith("Remove")}

说明:dir alias:获取的是别名的数组,通过where对数组元素进行遍历,$_代表当前元素,alias的Definition为String类型,因为powershell支持.net,.net中的string类有一个方法Startswith。通过where过滤集合在powershell中使用非常广泛。

  • 查看所有别名和指向cmdlet的别名的个数。
ls alias: | Group-Object definition | sort -Descending Count

Count Name                      Group
----- ----                      -----
    6 Remove-Item               {del, erase, rd, ri...}
    3 Get-ChildItem             {dir, gci, ls}
    3 Get-History               {ghy, h, history}
    3 Copy-Item                 {copy, cp, cpi}
    3 Invoke-WebRequest         {curl, iwr, wget}
    3 Set-Location              {cd, chdir, sl}
    3 Get-Content               {cat, gc, type}
    3 Move-Item                 {mi, move, mv}
    2 Invoke-History            {ihy, r}
    2 Get-Process               {gps, ps}
    2 Rename-Item               {ren, rni}
    2 New-PSDrive               {mount, ndr}

创建自己的别名Set-Alias

给记事本创建一个别名(Edit),并查看该别名;

PS C:\PS> Set-Alias -Name Edit -Value notepad
PS C:\PS> Edit
PS C:\PS> $alias:Edit
notepad

删除自己的别名del alias:

别名不用删除,自定义的别名在powershell退出时会自动清除。但是请放心,powershell内置别名(诸如ls,dir,fl等)不会清除。如果你非得手工删除别名。请使用

del alias:Edit

导出别名Export-Alias

Export-Alias 文件名   #比如 xxx.ps1

导入别名Import-Alias

Import-Alias 文件名
强制导入 # 若是别名存在了,需要强制导入
Import-Alias -Force 文件名

保存自己的别名

可以使用Export-Alias将别名导出到文件,需要时再通过Import-Alias导入。但是导入时可能会有异常,提示别名已经存在无法导入:

通过函数扩展别名

在Powershell中设置别名的确方便快捷,但是在设置别名的过程中并设置参数的相关信息。尽管别名会自动识别参数,但是如何把经常使用的参数默认设定在别名里面呢?例如Test-Connection -Count 2 -ComputerName,让-Count 2 固化在别名中。

这时简单的别名无法完成上述需求,可以通过函数来完成它,并且一旦把函数拉过来,定义别名会变得更加灵活。

PS C:\Users\jsy1> function test-conn { Test-Connection  -Count 2 -ComputerName $args}
PS C:\Users\jsy1> Set-Alias tc test-conn
PS C:\Users\jsy1> tc localhost

Source        Destination     IPV4Address      IPV6Address    Bytes    Time(ms)
------        -----------     -----------      -----------    -----    --------
DESKTOP-TP... localhost       127.0.0.1        ::1            32       0
DESKTOP-TP... localhost       127.0.0.1        ::1            32       0





posted @ 2020-08-17 15:05  紫月java  阅读(362)  评论(0编辑  收藏  举报