自从接触 ivanti EPM 产品后,就会经常遇到用户抛给我一些奇奇怪怪的问题,例如他想通过脚本去实现一个怎样的功能,但是他自己不会写,就会要求我帮他实现,虽然有一点强人所难,但为了生活我也只能强忍泪水
用户一些简单的需求我会用批处理来实现,因为这个我比较熟悉,但是大多数情况下有些功能需要用 PowerShell
语法来实现,由于我自己并没有学习过 PowerShell
,简单的我可以通过百度了解,复杂的我也只能大概照抄,但是不知道如何修改,这便让我不得不抽点时间学习一下 PowerShell
,毕竟将来自己转系统运维也会用得上
# 基本语法
先简单的了解一下 PowerShell
的命令语法, PowerShell
的命令一般称为 cmdlet(command-lets)
, 由 谓词 - 名词 组成,例如 Get-Help
获取帮助信息,这样的命令语法还是比较容易让人理解的,下面了解一下常用的命令
- 查看版本
$psversiontable
- 获取所有的命令
get-command
or gcm
- 查看命令帮助信息
get-help get-command
- 查看计算机服务和格式化筛选
get-service
get-service | format-table status, name | findstr /i running
- 查看进程信息
get-process
- 查看文件和目录
get-childitem
or dir
or ls
- 查看当前会话别名
get-alias
- 获取别名对应的真实命令
get-alias -name ls
- 查找
Remove
开头的别名
get-alias | where {$_.Definition.StartsWith("Remove")}
- 自定义别名
set-alias -name tk -value taskmgr
- 导出别名
export-alias c:\temp\test.ps
- 导入别名
import-alias -force c:\temp\test.ps
- 查看历史命令
get-history
- 查看当前时间
get-date
- 查看系统变量
$env:path
- 查看特定系统变量值
$env:windir
- 创建新的环境变量
$env:name="Newenv"
- 删除变量
del env:name
- 查看当前变量
ls variable:
- 查看特定变量
ls variable:remove*
- 自动化变量:打开 powershell 自加载变量
$home
and $pid
and $$
- 添加永久生效变量
[environment]::setenvironmentvariable("PATH","c:\temp","User")
# 当前用户
[environment]::getenvironmentvariable("PATH","User")
[environment]::setenvironmentvariable("PATH","c:\temp", [system.environmentvariabletarget]::machine)
# 系统变量,对所有用户生效
- 查看脚本执行权限
get-executionpolicy
- 修改脚本执行权限
Set-ExecutionPolicy RemoteSigned
- BAT 调用 PS 脚本
powershell "&'c:\temp\test.ps\'"
# 筛选命令
- 筛选谓词
get-command -Verb 'get'
- 筛选名词
get-command -Noun P*
- 筛选属性
select-object 可以从一个或多个对象中选取特定的属性
netstat -ano | select-object -first 20
-first num 只查看前面 num 行信息
# 运算符
- 等于 -eq
- 不等于 -ne
- 大于 -gt
- 小于 -lt
- 大于等于 -ge
- 小于等于 -le