windows-运维-05 初识PowerShell

PowerShell 是Windows上的命令行脚本环境,用于系统和应用自动化管理,支持.NET对象。文章介绍了PowerShell的版本信息、自定义控制台设置、编辑模式、快捷键,以及如何进行数学运算、定义和使用变量、执行外部命令等基本操作。
摘要由CSDN通过智能技术生成

windows-运维-05 初识PowerShell

什么是PowerShell

Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆。 powershell需要.NET环境的支持,同时支持.NET对象。微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象。其可读性,易用性,可以位居当前所有shell之首。 当前powershell有四版本,分别为1.0,2.0,3.0 ,4.0

  • 如果您的系统是window7或者Windows Server 2008,那么PowerShell 2.0已经内置了,可以升级为3.0,4.0。
  • 如果您的系统是Windows 8 或者Windows server 2012,那么PowerShell 3.0已经内置了,可以升级为4.0。
  • 如果您的系统为Windows 8.1或者Windows server 2012 R2,那默认已经是4.0了。

Powershell 自定义控制台

打开虚拟机或者物理机,打开你powershell,右击powershell的标题栏选择”属性”弹出powershell控制台对话框。在这里有四个选项卡:选项、字体、布局和颜色。

Powershell 编辑模式

powershell控制台有两种模式,一个是快速编辑模式,一个是标准模式。
快速编辑模式和标准模式的切换可以通过控制台标题栏->鼠标右击->属性->选项->编辑选项 。

  • Powershell标准模式
    鼠标右击选择标记后才能实现复制和粘切功能。
  • Powershell快速编辑模式
    可以通过鼠标左键选择任意矩形区域内的文本,并且鼠标右击实现复制功能。

Powershell的快捷键

ALT+F7 清除命令的历史记录
PgUp PgDn 显示当前会话的第一个命令和最后一个命令
Enter 执行当前命令
End 将光标移至当前命令的末尾
Del 从右开始删除输入的命令字符
Esc 清空当前命令行
F2 自动补充历史命令至指定字符 (例如历史记录中存在Get-Process,按F2,提示"Enter char to copy up to",键入‘s’,自动补齐命令:Get-Proce)
F4 删除命令行至光标右边指定字符处
F7 对话框显示命令行历史记录
F8 检索包含指定字符的命令行历史记录
F9 根据命令行的历史记录编号选择命令,历史记录编号可以通过F7查看
左/右方向键 左右移动光标
上/下方向键 切换命令行的历史记录
Home 光标移至命令行最左端
Backspace 从右删除命令行字符
Ctrl+C 取消正在执行的命令
Ctrl+左/右方向键 在单词之间移动光标
Ctrl+Home 删除光标最左端的所有字符
Tab 自动补齐命令或者文件名

Powershell交互式

Powershell 进行数学运算

我们可以把powershell当成一个计算器。象键入命令行那样输入数学表达式,回车,powershell会自动计算并把结果输出。常用的加减乘除模(+,-,*,/,%)运算和小括号表达式都支持。

PS C:\pstest> 1+2+3
6
PS C:\pstest> 0xABCD
43981
PS C:\pstest> 3.14*10*10
314
PS C:\pstest> 1+3-(2.4-5)*(7.899-4.444)
12.983

PowerShell也能自动识别计算机容量单位,包括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

假如一个网站每个页面大小为80kb,统计显示每天的PV操作为800,1个月下来占用的带宽:

PS C:\pstest> 80kb*800*30/1gb
1.8310546875

假如一个网站的每天人均PV操作为5,页面大小为80Kb,主机提供商限制的总流量为10G,那平均每天的最大访客数

为:

PS C:pstest> 10GB/(80KB*5)/30
873.813333333333

Powershell变量

定义变量

变量可以临时保存数据,因此可以把数据保存在变量中,以便进一步操作。

#定义变量
$a=10
$b=4
#计算变量
$result=$a*$b
$msg="保存文本"

#输出变量
$result
$msg

powershell 不需要显示地去声明,可以自动创建变量,只须记住变量的前缀为$.

创建好了变量后,可以通过变量名输出变量,也可以把变量名存在字符串中。但是有个例外单引号中的字符串不会识别和处理变量名。

选择变量名

在powershell中变量名均是以美元符” ” 开 始 , 剩 余 字 符 可 以 是 数 字 、 字 母 、 下 划 线 的 任 意 字 符 , 并 且 p o w e r s h e l l 变 量 名 大 小 写 不 敏 感 ( ”开始,剩余字符可以是数字、字母、下划线的任意字符,并且powershell变量名大小写不敏感( 线powershella和$A 是同一个变量)。

某些特殊的字符在powershell中有特殊的用途,一般不推荐使用这些字符作为变量名。当然你硬要使用,请把整个变量名后缀用花括号括起来。

PS C:\test> ${"I"like $}="mossfly"
PS C:\test> ${"I"like $}
mossfly

赋值和返回值

赋值操作符为“=”,几乎可以把任何数据赋值给一个变量,甚至一条cmdlet命令,为什么,因为Powershell支持对象,对象可以包罗万象。

PS C:\test> $item=Get-ChildItem .
PS C:\test> $item

    Directory: C:\test

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2011/11/23     17:25            ABC
-a---        2011/11/24     18:30      67580 a.html
-a---        2011/11/24     20:04      26384 a.txt
-a---        2011/11/24     20:26      12060 alias
-a---        2011/11/24     20:27      12060 alias.ps1
-a---        2011/11/23     17:25          0 b.txt
-a---        2011/11/23     17:25          0 c.txt
-a---        2011/11/23     17:25          0 d.txt
-a---        2011/11/25     11:20        556 employee.xml
-a---        2011/11/24     17:37       7420 name.html
-a---        2011/11/28     15:30         63 ping.bat
-a---        2011/11/24     17:44     735892 Powershell_Cmdlets.html
-a---        2011/11/28     17:03         60 test.ps1
-a---        2011/11/23     17:37        242 test.txt
-a---        2011/11/28     16:42        170 test.vbs

PS C:\test> $result=3000*(1/12+0.0075)
PS C:\test> $result
272.5

给多个变量同时赋值

赋值操作符不仅能给一个变量赋值,还可以同时给多个变量赋相同的值。

PS C:\test> $a=$b=$c=123
PS C:\test> $a
123
PS C:\test> $b
123
PS C:\test> $c
123

交换变量的值

要交换两个变量的值,传统的程序语言至少需要三步,并且还需定义一个中间临时变量。

$Value1 = 10
$Value2 = 20
$Temp = $Value1
$Value1 = $Value2
$Value2 = $Temp

在powershell中,交换两个变量的值,这个功能变得非常简单。

PS C:\test> $value1=10
PS C:\test> $value2=20
PS C:\test> $value1,$value2=$value2,$value1
PS C:\test> $value1
20
PS C:\test> $value2
10

查看正在使用的变量

Powershell将变量的相关信息的记录存放在名为variable:的驱动中。如果要查看所有定义的变量,可以直接遍历variable:

PS C:\test> ls variable:

Name                           Value
----                           -----
"I"like $                      mossfly
$                              cls
?                              True
^                              cls
_
1                              1
a                              123
args                           {}
b                              123
c                              123
ConfirmPreference              High
ConsoleFileName
DebugPreference                SilentlyContinue
。。。

查找变量

因为有虚拟驱动variable:的存在,可以象查找文件那样使用通配符查找变量。例如要查询以value打头的变量名。

PS C:\test> ls variable:value*

Name                           Value
----                           -----
value1                         20
value2                         10

验证变量是否存在

验证一个变量是否存在,仍然可以象验证文件系统那样,使用cmdlet Test-Path。为什么?因为变量存在变量驱动器中。

PS C:\test> Test-Path variable:value1
True
PS C:\test> Test-Path variable:value2
True
PS C:\test> Test-Path variable:valueUnkonw
False

删除变量

因为变量会在powershell退出或关闭时,自动清除。一般没必要删除,但是你非得删除,也可以象删除文件那样删除它

PS C:\test> Test-Path variable:value1
True
PS C:\test> del variable:value1
PS C:\test> Test-Path variable:value1
False

使用专用的变量命令

为了管理变量,powershell提供了五个专门管理变量的命令Clear-Variable,Get-Variable,New-Variable,Remove-Variable,Set-Variable。因为虚拟驱动器variable:的存在,clear,remove,set打头的命令可以被代替。但是Get-Variable,New-Variable。却非常有用new-variable可以在定义变量时,指定变量的一些其它属性,比如访问权限。同样Get-Variable也可以获取这些附加信息。

变量写保护(创建常量)

可以使用New-Variable 的option选项 在创建变量时,给变量加上只读属性,这样就不能给变量重新赋值了。

PS C:\test> New-Variable num -Value 100 -Force -Option readonly
PS C:\test> $num=101
Cannot overwrite variable num because it is read-only or constant.
At line:1 char:5
+ $num <<<< =101     + CategoryInfo          : WriteError: (num:String) [], SessionStateUnauthorizedAccessException     + FullyQualifiedErrorId : VariableNotWritable PS C:\test> del Variable:num
Remove-Item : Cannot remove variable num because it is constant or read-only. If the variable is read-only,
ration again specifying the Force option.
At line:1 char:4
+ del <<<<  Variable:num
    + CategoryInfo          : WriteError: (num:String) [Remove-Item], SessionStateUnauthorizedAccessExcepti
    + FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveItemCommand

但是可以通过删除变量,再重新创建变量更新变量内容。

PS C:\test> del Variable:num -Force
PS C:\test> $num=101
PS C:\test> $num
101

有没有权限更高的变量,有,那就是:选项Constant,常量一旦声明,不可修改

PS C:\test> new-variable num -Value "strong" -Option constant

PS C:\test> $num="why? can not delete it."
Cannot overwrite variable num because it is read-only or constant.
At line:1 char:5
+ $num <<<< ="why? can not delete it."     + CategoryInfo          : WriteError: (num:String) [], SessionStateUnauthorizedAccessException     + FullyQualifiedErrorId : VariableNotWritable PS C:\test> del Variable:num -Force
Remove-Item : Cannot remove variable num because it is constant or read-only. If the variable is read-only,
ration again specifying the Force option.
At line:1 char:4
+ del <<<<  Variable:num -Force
    + CategoryInfo          : WriteError: (num:String) [Remove-Item], SessionStateUnauthorizedAccessExcepti
    + FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveItemCommand

变量描述

在New-Variable 可以通过-description 添加变量描述,但是变量描述默认不会显示,可以通过Format-List 查看。

PS C:\test> new-variable name -Value "me" -Description "This is my name"
PS C:\test> ls Variable:name | fl *

PSPath        : Microsoft.PowerShell.CoreVariable::name
PSDrive       : Variable
PSProvider    : Microsoft.PowerShell.CoreVariable
PSIsContainer : False
Name          : name
Description   : This is my name
Value         : me
Visibility    : Public
Module        :
ModuleName    :
Options       : None
Attributes    : {}

执行外部命令

Powershell能像cmd一样执行外部命令

通过netstat查看网络端口状态

PS C:\PS> netstat

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    192.168.0.100:3049    192.168.0.88:7575       ESTABLISHED
  TCP    192.168.0.100:3052    192.168.0.88:7575       ESTABLISHED
  TCP    192.168.0.100:3061    192.168.0.88:7575       ESTABLISHED

route print 查看本机路由信息

PS C:\PS> route print
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值