zoukankan      html  css  js  c++  java
  • 002_PowerShell交互

    TOC

    003_PowerShell交互

    参考:

    数学运算

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

    • 加减乘除模(+,-,*,/,%)运算和小括号表达式
    PS F:	est1ddtest2>  1+2+3
    6
    PS F:	est1ddtest2> 3.14*10*10
    314
    PS F:	est1ddtest2> 1+3-(2.4-5)*(7.899-4.444)
    12.983
    • 进制转换
    PS F:	est1ddtest2> 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:	est1ddtest2> 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:	est1ddtest2> 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:	est1ddtest2> 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:	est1ddtest2> cmd
    Microsoft Windows [版本 10.0.18363.592]
    (c) 2019 Microsoft Corporation。保留所有权利。
    
    F:	est1ddtest2>echo 现在是cmd的操作
    现在是cmd的操作
    
    F:	est1ddtest2>exit

    查找可用的Cmd控制台命令

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

    PS F:	est1ddtest2> 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:	est1ddtest2> $env:Path
    C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;C:Program Files (x86)ATI TechnologiesATI.ACECore-Static;C:softwarejdkin;E:software
    ode;E:softwaremysql-5.7.27-winx64in;E:softwareSqlServerSqlServer(x86)110ToolsBinn;E:softwareSqlServerSqlServer110ToolsBinn;E:softwareSqlServerSqlServer110DTSBinn;E:softwareSqlServerSqlServer(x86)110ToolsBinnManagementStudio;C:Program Files (x86)Microsoft Visual Studio 10.0Common7IDEPrivateAssemblies;E:softwareSqlServerSqlServer(x86)110DTSBinn;C:Program Files (x86)VanDyke SoftwareClients;C:Program FilesGitcmd;C:Program Filesdotnet;E:softwareSqlServerSqlServer130ToolsBinn;E:softwarezookeeper-3.4.12in;C:Program Fileserl9.2in;C:Program FilesRabbitMQ Server
    abbitmq_server-3.7.6sbin;E:softwareapache-tomcat-8.5.41in;C:Program FilesMongoDBServer4.0in;E:softwareprotoc-3.9.0-win32;E:softwareprotoc-3.9.0-win32in;E:softwareapache-maven-3.3.9in;E:softwaregradle6.5in;E:softwaregradle5.6.3in;E:softwaremysql-5.7.27-winx64in;E:softwaredartdevDartdart-sdkin;E:softwareflutter_windows_v1.12.13flutterin;E:softwareAndroid_sdk_idea	ools;E:softwareAndroid_sdk_ideaplatform-tools;E:softwareAndroid_sdk_idea;E:softwareAndroid_sdk_ideauild-tools;E:softwareAndroid_sdk_ideacmdline-tools;E:softwareAndroid_sdk_ideadocs;E:softwareAndroid_sdk_ideaemulator;E:softwareapache-maven-3.3.9in;E:softwareTortoiseSVNin;C:Usersjsy1AppDataLocalProgramsPythonPython38Scripts;C:Usersjsy1AppDataLocalProgramsPython;C:Usersjsy1AppDataLocalProgramsPythonPython38Scripts;C:Usersjsy1AppDataLocalProgramsPythonPython38;C:Usersjsy1AppDataLocalMicrosoftWindowsApps;C:Usersjsy1AppDataRoaming
    pm;C:Program Files (x86)VanDyke SoftwareClients;C:softwareideain;;;E:softwarevscodein;E:softwareBandizip

    设置Powershell的环境变量

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

    启动外部程序&

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

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

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

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

    PS F:	est1ddtest2> 你好  # 没有引号,报错
    你好 : 无法将“你好”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试
    一次。
    所在位置 行:1 字符: 1
    + 你好
    + ~~
        + CategoryInfo          : ObjectNotFound: (你好:String) [], CommandNotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException
    
    PS F:	est1ddtest2> "你好"
    你好
    PS F:	est1ddtest2> "ls"
    ls
    PS F:	est1ddtest2> & "ls"
    
    
        目录: F:	est1ddtest2
    
    
    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:Usersjsy1> Get-Alias -name ls
    
    CommandType     Name                                               Version    Source
    -----------     ----                                               -------    ------
    Alias           ls -> Get-ChildItem
    
    PS C:Usersjsy1>  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:Usersjsy1> function test-conn { Test-Connection  -Count 2 -ComputerName $args}
    PS C:Usersjsy1> Set-Alias tc test-conn
    PS C:Usersjsy1> 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





  • 相关阅读:
    Hibernate Validation注解列表
    Java_Shell多线程
    Lua读写文件
    shell导出和导入redis
    大文件读写
    Java_Hbase优化
    控制语句if
    字典(DICT)
    元组Tuple
    Session 会话
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/7a79772206c62ec04ea828fe37443aba.html
Copyright © 2011-2022 走看看