
自从接触 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
