Home powershell cookbook
Post
Cancel

powershell cookbook

1.使用指南

1.1运行脚本(调用操作:命令名中包含空格)

1
2
& 'C:\Program Files\Program.exe' arguments
当前目录下:.\Program.exe arguments

1.3配置文件

1
Prompt()函数

1.4帮助

1
Get-Command/Get-Help

1.7命令转化为Base64编码

1
2
3
$commands = '1..10' | % { "Powershell Rocks" }'
$bytes = [System.Text.Encoding]::Unicode.GetByte($commands)
$encodedString = [Convert]::ToBase64String($bytes)

2.管道

2.2过滤列表项或命令输出项

1
2
//列出所有正在运行的进程名称包含“Search”的进程
Get-Process | Where-Object { $_.Name -like "*Search*" }

2.4处理列表或命令输出的每一项

1
2
3
4
//输出1~10*2,$_是输入的参数
1..10 | Foreach-Object { $_ * 2 }
//获得文件内容(txt,csv)
Get-Content

3.变量和对象

3.2访问环境变量

1
2
//列出env驱动器的所有子节点
Get-ChildItem env:

3.4使用.NET对象

1
2
3
4
5
//静态方法
[ClassName]::MethodName(parameter list)	
[System.Diagnostics.Process]::GetProcessById(0)
//
(New-Object Net.WebClient).DownloadString("http://live.com")	

3.8使用COM对象

1
2
3
4
5
$object = New_Object -ComObject ProgId
//了解对象的方法和属性
$object | Get-Member (-Static)
Get-Member -InputObject $object
//MSDN获得详细文档

3.12向类添加自定义的方法和属性

1
使用XML

4.循环与流程控制

4.2比较和逻辑运算符、条件语句

1
2
3
4
运算符:-eq,-ne,-ge,-gt,-like,-notlike,-is,-isnot
逻辑符:-and,-or,-xor,-not
条件语句:if,elseif,else,switch
循环语句:for,foreach,while,do...while

4.5添加暂停或延迟

1
2
暂停直到enter:Read-Host
暂停直到按下某一键:$host.UI.RawUI.ReadKey()

5.字符串与非结构化文本

5.1 创建字符串

1
2
3
原生字符串使用单引号
支持变量扩展和转移字符的使用双引号
PS >"{0} divided by {1} is {2}" -f $number2, $number1, ($number2 / $number1)

5.7根据文本或模式在字符串中查找

1
2
3
4
5
6
7
字符串与通配符匹配:-like
字符串与正则表达式匹配:-match
字符串是否包含特定字符串:.Contains("")    
字符串在另一个字符串的位置:IndexOf()
替换文本:.Replace("World","Powershell")
字符串大小写转换:"".ToUpper(),"".ToLower()
去掉字符串的空格:Trim()

5.12转换文本流为对象

1
2
替换文本:Sed
搜索文本:Grep

6.计算与数学计算

6.3度量一个列表的统计属性

1
Measure-Object -Average -Sum -Property Length

7.简单文件

7.1获取文件内容

1
2
3
4
5
6
7
Get-Content C:\file.txt
${ C:\file.txt }
//-Delimiter 修改换行标识
//ReadCount设置读取的行数

//一次读取所有文件,处理大文件时需要格外小心
[File]::ReadAllText()

7.2搜索文件的文本

1
2
3
4
5
6
7
8
Select-String
-Simple 不区分大小写

//使用正则表达式递归搜索所有文件名为.txt的文件,将Get-Childitem的结果通过管道输出给Select-String
Get-ChildItem -Filter *.txt -Recurse | Select-String pattern

//当前目录下搜索扩展名为DLL的文件是否包含“Debug”
Get-ChildItem | Where { $_ | Select-String "Debug" -Quiet }

7.5创建临时文件

1
2
$filename = [System.IO.Path]::GetTempFileName()
Remove-Item -Force $filename

8.结构化文件

8.1访问XML文件中的信息

1
$xml = [xml] (Get-Content $filename)

8.4导入导出结构化数据

1
2
Export-CliXml
Import-CliXml

9.支持Internet的脚本

9.1从Internet下载一个文件

1
2
3
4
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source, $destination)
//下载Web页面
$content = $wc.DownloadString($source)

9.5将命令的输出生成一个Web页面

1
ConvertTo-Html

9.7与Internet协议交互

10.代码复用

10.2编写一个函数

1
2
3
4
param([double] $fahrenheit)	//脚本的形参
$celsius = $fahrenheit -32	//操作
$celsius = $celsius / 1.8
"$fahrenheit degrees Fahrenheit is $celsius degrees Celsius." //输出

10.3脚本

1
2
3
4
//脚本块 Map-Object
//使用库脚本
$scriptDirectory = Split-Path $myInvocation.MyCommand.Path.(Join-Path $scriptDirectory LibraryTemperature.ps1)
//访问管道数据    $input

10.8用命令关键字(Cmdlet Keywords)编写面向管道的脚本

1
2
3
4
5
6
7
8
//把脚本分为初始化、处理和清除
function{
begin{}
process{}
end{}
}
//使用fearch($element in $input)访问输入管道的元素
//面向管道的函数		filter代替function

11.列表、数组和hash表

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
33
34
35
36
37
38
39
40
41
//赋值列表用逗号分隔
$Array = 1,2,"Hello World"

//新建数组
$myArray = New-Object string [] 10

//创建多维数组
$jagged = @(
    (1,2,3,4)
    (5,6,7,8)
)

//访问数组每个元素Foreach_Object,foreach,for
Foreach_Object { $sum += $_ }
foreach($element in $myArray){$sum += $element }

//数组排序
Get-ChildItem | Sort-Object -Descending Length | Slelect Name,Length

//数组包含某项,匹配:-eq,-like,-match
"Hello","World" - contains "Hello"

//合并数组
$result = $firstArray + $secondArray

//从数组中移出元素:-ne,-notlike,-notmatch
$array = $array -ne "Item1"

//使用ArrayList类完成高级的数组任务
$myArray = New-Object System.Collections.ArrayList
[void] $myArray.Add("Hello")
[void] $myArray.AddRange(("World","how ara you"))
$myArray.RemoveAt(1)

//创建hash表
$myHashtable @{}
$myHashtable = @{Key1 = "Value1";"Key 2" = 1,2,3}
$myHashtable["New Item"] = 5

//获取hash表中各个元素
GetEnumerator()

12.用户交互

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//使用Read-Host
$directory = Read-Host "Enter a directory name"

//读取用户输入的按键
[Console]::ReadKey()

//给用户显示输出和消息
Write-Host, Out-Host

//为长时间运行的任务提供进度更新
Write-Progress

//主机的用户界面访问功能
 $host.UI.RawUI.WindowTitle = (Get-Location)

13.跟踪和错误管理

13.1查看由某一命令生成的错误

1
2
3
4
$error, $eooroView
//清除错误
$error.Clear()
$error.Count()

13.2处理警告、错误和终止错误

1
2
3
4
//忽略响应警告信息
$warningPreference = "SilentlyContinue"
//忽略非终止信息
$errorActionPreference = "SilentlyContinue"

13.4调试脚本

1
2
3
4
5
Write-Debug, 
//逐步、跟踪、环境检查
Set-PsDebug -Step
Set-PsDebug -Trace
$host.EnterNestedPrompt

14.掌握环境

1
2
3
4
5
6
7
8
9
10
11
12
$myInvocation提供当前脚本、函数或脚本块的大量信息:
MyCommand:命令本身的信息
ScriptLineNumber:命令行号
ScriptName:调用改命令的脚本名称
Line:在脚本行中调用该命令的文本
InvocationName:调用该命令的名称
PipelineLength:命令管道中的命令数
PipelinePostion:管道中的命令位置
Definition/Path:脚本运行完整路径

//确定系统路径和特殊文件夹位置
[Environment]::GetFolderPath("System")

15.Windows PowerShell的拓展

15.1访问WMI数据

1
2
3
4
5
6
7
8
//检索WMI类的所有实例
Get-WmiObject -ComputerName Computer -Class Win32_Bios 

//检索WMI特定实例
Get-WmiObject Win32_Service -Filter "StartMode = 'Auto'"

//使用WMI的WQL语言检索
$query = [WmiSearcher] "SELECT * FROM Win32_Service WHERE StartMode = 'Auto'"

15.4使用.NET来执行高级的WMI任务

1
2
3
4
//使用所生成的对象PsBase属性
//获取与给定的实例相关的WMI实例,调用GetRelated()
$instance = [Wmi] 'Win32_service.Name="winmgmt"'
$instance.PsBase.GetRelated()

15.6使用COM脚本接口自动化程序

1
2
$shell = New-Object -ComObject "Shell.Application"
$shell.Windows() | Format-Table LocationName,LocationUrl

16.安全和脚本签名

16.1通过执行策略启动脚本

1
2
3
4
5
 Set-ExecutionPolicy RemoteSigned
 Restricted     受限
 Allsigned      签名
 Remote Signed  远程签名
 Unrestricted   不受限制

16.2脚本或格式文件签名

1
2
$cert = @(Get-ChildItem cert:\CurrentUser\My -CodeSigning)[0]
Set-AuthenticodeSignature file.ps1 $cert

16.4管理企业中的安全性

1
2
3
组策略模版
部署证书服务来为域账户自动生成证书
应用软件限制策略

16.5验证脚本的数字签名

1
Get-AuthenticodeSignature

16.6安全地处理敏感信息

1
$secureInput = Read-Host -AsSecureString "Enter your Private key"
This post is licensed under CC BY 4.0 by the author.

OllyDbg基础

JavaScript Learning