winexec函数 执行powershell 脚本_浅剖PowerShell命令语法

705cfe79a9f76c5df9013bab6b7f083d.png

前言

刚接触PowerShell的时候,只是给它的管道命令所吸引;其管道命令是面向对象,也就是说针对对象进行操作处理,不像cmd是针对文本操作处理。而且大部分cmd命令在PowerShell中也得到保留,正确来讲是PowerShell命令是cmd命令的超集;还有命令输入输出重定向,微软在设计PowerShell也提出注重保留用户操作习惯,支持命令别名;命令的可扩展性,拥有庞大的.Net框架支持,近乎无敌。没有看过入门级的小伙伴,可以点击下方链接进行回看。

莫名的墨迹:初探PowerShell命令入门级​zhuanlan.zhihu.com
b4a19f461dba8b48fa235e587b92c280.png

PowerShell命令语法解释

  • cmdlet命令 -命令参数 命令参数值 -命令参数 命令参数值(多个) -开关参数(无参数值,作标识物;SwitchParameter)
  • 命令解析时,命令参数与命令参数值的联系是在赋值绑定时进行关联
  • 命令发现:在命令调用前,PowerShell 会预先推断该命令的类型分别有四种:Alias(别名)、Function(函数)、Cmdlet(命令)和Script(脚本文件)或是Application(可执行程序);当一个命令被调用时,PowerShell先查询cmdlet表,是否与表中某项匹配;匹配成功就读取表中的元数据以用于参数绑定和命令调用
  • 默认参数:默认参数是在你给了指定的命令参数值,却没有给出命令参数时,PowerShell 首选默认参数与命令参数值进行赋值绑定。
<#
get-alias[gal] -name[-definittion] -exclude -scope
-name: 别名,通过cmdlet别名查找cmdlet命令的全称
-definition: 定义,查找cmdlet命令全称的别名定义
-exclude: 不包含,过滤一些不在查询范围的元素
-scope: 范围,设置查询的范围局部还是全局
注:使用PowerShell版本必需是5.1
#>
gal ls,dir,cd,del,move # [ls,dir,cd,del,move]参数值会与[-name]默认参数进行赋值绑定
gal -name ls,dir,cd,del,move # 这与上一句代码是一样的
<#
若你不小心输入了错误的命令拼写,它就会报错
xxx : 无法将“xxx”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再
试一次。
这样就好理解在命令调用前它会预先推断命令是否包含在cmdlet、函数、脚本或可运行程序中
#>

开关参数 [<SwitchParameter>] (注意:以Windows PowerShell实战指南 第三版为准,且powershell版本要求5.1以上)

<#
当开发者对PowerShell某个命令,它的语法不解或是不知道参数值是什么数据类型时
可以向PowerShell寻求帮助用 get-help(cmdlet) 或 help(function)
get-help[help] cmdlet
还可以像cmd命令"/?" 获取文本帮助,PowerShell这里"/"改为破折号"-"
cmdlet -?
结尾会出现备注内容:
备注
    若要查看示例,请键入: "get-help Get-Command -examples".
    有关详细信息,请键入: "get-help Get-Command -detailed".
    若要获取技术信息,请键入: "get-help Get-Command -full".
    有关在线帮助,请键入: "get-help Get-Command -online"

-examples -detailed -full -online 后面没有参数值……嗯,真相只有一个,它们是开关参数

-examples: 例子
-detailed: 详情
-full: 全部
-online: 在线
#>

get-help get-command -full

<#
我们可以发现 get-command 有四个开关参数
-All[<SwitchParameter>]
-ListImported[<SwitchParameter>]
-ShowCommandInfo[<SwitchParameter>]
-Syntax[<SwitchParameter>]
#>

get-help get-command -full | where {$_ -like "*switch*"} 
#用where过滤,直接提取我们想要的开关参数

res :

-All[<SwitchParameter>]
-ListImported[<SwitchParameter>]
-ShowCommandInfo[<SwitchParameter>]
-Syntax[<SwitchParameter>]

<# 但有些命令是没有开关参数的 #>

help gal -full | ? {$_ -like "*switch*"}

res :

#啥也没有

管道命令 (连接命令)

  • input output -> input
  • 将上一条命令的输出内容作为下一条命令的输入
  • 管道的处理模式:顺序模式和流模式
  • 顺序模式(较慢):在顺序模式中管道中同一时间只执行一条命令,只有当前一条命令的所有执行完毕,才会把所有结果交付给下一条 命令。这种模式速度慢并且耗内存,因为必须需要很多次分配空间存储中间结果。
  • 流模式(较快):流模式会立即执行所有命令,同一时间可能在执行多条命令。前一条命令可能会产生多个结果,但是一旦产生其中一个结果,就会立即交付给下一条命令处理。这样的流模式节省比较节省内存,可能管道的某个任务还在执行,但是已经有部分结果输出了。减少了中间结果的保存
<#
查看进程中与谷歌(chrome)浏览器应用相关的进程,并对序号(Id)进行降序操作
输出序号(Id)、进程名称(ProcessName)、句柄(Handles)等内容
#>
gps | ? {$_.processname -like "chrome*"} | select id,processname,handles | sort -property id -descending

res :

   Id ProcessName Handles
   -- ----------- -------
12116 chrome          548
11964 chrome          244
11904 chrome         2076
11888 chrome          314
11524 chrome          207
11484 chrome          310
11416 chrome          207
11044 chrome          322
10888 chrome          216
10872 chrome          385
10868 chrome          218
10348 chrome          197
10092 chrome          175
 9092 chrome          268
 8852 chrome          222
 8784 chrome          207
 8652 chrome          887
 8216 chrome          216
 7740 chrome          245
 7320 chrome          557
 6704 chrome          248
 6480 chrome          609
 6472 chrome          431
 3216 chrome          320
 2372 chrome          212

重定向

  • 将命令的输出信息输出到指定的文件,即打印脚本日志
  • 重定向运算符的数字有1,2,3,4,5各对应相关的参数
  • 1:Output/Success(输出信息或成功执行的信息)
  • 2:Error(错误信息)
  • 3:Warning(警告信息)
  • 4:Verbose(详细信息)
  • 5:Debug(调试信息)
<#
> --- 将输出发送到指定的文件
>> --- 将输出追加到指定的文件
2> --- 将输出中的错误发送到指定文件
2>> --- 将输出中的错误追加到指定的文件(注:使用频率最高)
2>&1 --- 将错误发送到成功输出流(注:命令执行成功的信息会显示,但是错误的信息是不会显示)
3> --- 将警告信息重定向到指定的文件
4>> --- 将输出的详细信息追加到指定的文件
5>&1 --- 将调试信息输出到成功流(注:命令执行成功的信息会显示 Debug信息是不会显示 )
*> --- 将所有信息(5种)重定向到指定的文件
#>

<# 将get-process输出写入process.txt文本中,再查看其内容#>
gps > process.txt
gc process.txt

#其他的重定向运算符,有兴趣自己可以试试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值