2015年10月9日

PowerShell入门系列2:cmdlet

什么是cmdlet

  • PowerShell里可以执行内置的命令和用户定义的内容(函数、脚本、别名、过滤器),还有可执行程序。
    其中内置的命令就叫做cmdlet,换个说法就是系统命令,也是继续学习PowerShell的基础。
  • cmdlet的特殊之处在于,每一个cmdlet都是一个.net object,运行于PowerShell进程里。
  • cmdlet的格式是动词-名词,不区分大小写,很清晰很长很恶心,但你可以自定义别名来缩短,这个后面还会讲。

两条基础cmdlet

  • Get-Command,我们直接在PowerShell里执行Get-Command,结果如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PS C:\Users\Woody> Get-Command
CommandType Name Definition
----------- ---- ----------
Alias % ForEach-Object
Alias ac Add-Content
Alias asnp Add-PSSnapIn
Alias clc Clear-Content
Alias cli Clear-Item
Alias clp Clear-ItemProperty
Alias clv Clear-Variable
Alias compare Compare-Object
Alias cpi Copy-Item
Alias cpp Copy-ItemProperty
Alias cvpa Convert-Path
Alias dbp Disable-PSBreakpoin
Alias diff Compare-Object
Alias ebp Enable-PSBreakpoint
Alias epal Export-Alias
Alias epcsv Export-Csv
Alias fc Format-Custom
……

Get-Command不加任何的参数时,作用是显示当前作用域/当前会话支持的所有命令(不仅限于Cmdlet)

那如果想只查看Cmdlet命令呢,以传统cmd的处理方式就是用|管道符传递给findstr然后过滤,如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PS C:\Users\Woody> Get-Command|findstr "Cmdlet"
Cmdlet Add-ComputerAdd-Computer [-DomainName] <...
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
Cmdlet Add-Member Add-Member [-MemberType] <PS...
Cmdlet Add-PSSnapinAdd-PSSnapin [-Name] <String...
Cmdlet Add-TypeAdd-Type [-TypeDefinition] <...
Cmdlet Checkpoint-Computer Checkpoint-Computer [-Descri...
Cmdlet Clear-Content Clear-Content [-Path] <Strin...
Cmdlet Clear-EventLog Clear-EventLog [-LogName] <S...
Cmdlet Clear-History Clear-History [[-Id] <Int32[...
Cmdlet Clear-Item Clear-Item [-Path] <String[]...
Cmdlet Clear-ItemProperty Clear-ItemProperty [-Path] <...
Cmdlet Clear-Variable Clear-Variable [-Name] <Stri...
……
……

我们可以用Get-Command findstr来查看具体命令的属性

1
2
3
4
5
PS C:\Users\Woody> Get-Command findstr

CommandType Name Definition
----------- ---- ----------
Application findstr.exe C:\Windows\system32\findstr.exe

从CommandType我们可以发现 ,findstr并不是一个Cmdlet,而是一个可执行程序。那怎么用Cmdlet的方式来实现呢?引入下一个Cmdlet:Get-Help

  • Get-Help,执行Get-Help Get-Command,结果如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS C:\Users\Woody> Get-Help Get-Command

名称
Get-Command

摘要
获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的基本信息。

语法

Get-Command [[-Name] <string[]>] [-CommandType {Alias | Function | Filter |
Cmdlet | ExternalScript | Application | Script | All}] [[-ArgumentList] <O
bject[]>] [-Module <string[]>] [-Syntax] [-TotalCount <int>] [<CommonParame
ters>]


Get-Command [-Noun <string[]>] [-Verb <string[]>] [[-ArgumentList] <Object[
]>]
[-Module <string[]>] [-Syntax] [-TotalCount <int>] [<CommonParameters>]

说明
    Get-Command cmdlet 获取会话中 Windows PowerShell 命令的 cmdlet 及其他元素(
    例如,别名、函数、筛选器、脚本和应用程序)的基本信息。

    Get-Command 直接从 cmdlet、函数、脚本或别名的代码中获取其数据,而不像 Get-H
    elp 那样从帮助主题文件中获取其信息。

    如果不使用参数,“Get-Command”将获取当前会话中的所有 cmdlet 和函数。“Get-
    Command *”获取所有 Windows PowerShell 元素以及 Path 环境变量 ($env:path)
    中的所有非 Windows-PowerShell 文件。它将这些文件归入“Application”命令类型
    。

    可以使用 Get-Command 的 Module 参数查找通过添加 Windows PowerShell 管理单元
    或导入模块而添加到会话中的命令。
    ……
    ……

Get-Help的用法很简单,就是Get-Help 命令,结果里会详细的把各种信息都罗列出来。从结果我们可以看到Get-Command的其他参数,所以我们可以用Get-Command -CommandTpye cmdlet 来实现上面的功能,结果是一样的。

有了这两个命令,其他命令就可以遇到再自食其力解决了。

2015年9月21日

Skill List

2016年前该读完

  • 《Javascript高级编程》
  • 《Python灰帽子编程》
  • 《现代操作系统》

要熟练什么

  • LinuxBash
  • PowerShell
  • Python爬虫
  • PHP、JS常用操作

接下来做出什么

  • 维护好博客
  • 一个靠谱爬虫项目
  • 保持提交漏洞
  • leetcode
2015年9月11日

PowerShell入门系列1:介绍和快速开始

PowerShell简介

PowerShell是什么?

PowerShell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。
相比Linux里的shell,Windows自带的cmd命令提示符显得有些简陋,所以从Windows 7之后微软提供了cmd的超级升级版——PowerShell。

2015年9月8日

深入理解JS笔记 1:数据类型Tips

备注:为了方便阅读《Javascript高级程序设计》 以下简称为 《J高》,笔记会引用很多该书内容,同时非常感谢笨蛋的座右铭的《理解Javascript》一系列文章。

引用数据类型和原始数据类型

  • ECMA-262 把类型(type)定义为值的集合,每种原始类型定义了包含它的值的范围及其字面量表示形式
  • 5种原始数据类型:Null、Boolean、Number、String
  • 引用类型就是类(class),引用值就是对象,所以引用类型变量typeof的运算结果一定是一个object
  • 原始数据类型其值存在栈中,引用数据类型值存在堆中
  • 也就是说原始类型的值直接存在变量访问的位置,而引用类型存在变量处的值是一个指向堆的指针
  • String类型比较特殊,它是唯一没有固定大小的原始类型,不过它还是存在栈中……
  • 每一个基础类型都有其对应的引用类型number Number,string String,boolean Boolean,推测结论:基本数据类型是对应引用数据类型的子类,为了提高效率,将基础类型放在了栈内存中,所以undefined继承自null(存疑)
  • 因此所有原始类型也都是伪类,都拥有toString()等object的方法
  • object
2015年8月26日

Python+PowerShell 一句话远控脚本思路

简介

从Win7开始,Windows全部自带极其强大的Powershell,Windows的新利器!我之后会陆续写一些关于Powershell应用的文章。

这是用Python写服务端,PowerShell写客户端,基于Socket的一个远控脚本。
其实Powershell也可以写服务端,选Python写服务端主要是为了在Linux服务器上也能跑。

1%