A simple summary of Powershell Script

powshell 学习

0x00.基本

  • cmd 的命令在 ps 里都能用
  • 可以直接进行计算
  • 可以属性调色
  • 可以用 tab 键补全命令
  • 可以使用管道符(|)将上一个命令的输出放到下一个命令的输入里去
  • 可以使用>(覆盖),>>(追加) 的重定向符
  • 动名词方式来使用命令,例如 get-process get-services
  • 变量和 php 很类似又$开头

变量可以是命令
变量不需要提前声明

  • 条件语句没分号
  • 可以单双引号互相嵌套
  • 转义不再是 \,而是 `

![[CMD下执行ps1脚本]]

0x01.其他

打开可以调用脚本程序权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
脚本权限通过 -executionpolicy 更改

获取使用get-executionpolicy
有以下几个:
Restricted 脚本不能运行(默认)
RemoteSigned 本地创建的可运行,网上下载的不行(除非有证书)
Allsigned 有受信任者颁发的签名才能运行
Unrestricted 全能运行

使用-executionpolicy bypass 来绕过安全策略

set-executionpolicy RemoteSigned #选择全是(a)
管理员运行cmd,输入powershell进去
再次执行 set-executionpolicy RemoteSigned 就好了

运行脚本程序时用 .\1.bat 或者 .\1.ps1 的方式

从软件设置更改 Powershell 默认路径

1、在文档目录下新建一个文件夹,命名为 WindowsPowerShell

2、在刚建立的 WindowsPowerShell 里边新建一个文件,叫做 profile.ps1

3、编辑 profile.ps1 写入

1
set-location C:\Users\... //你的默认路径

并保存

4、管理员模式打开 Powershell,输入

1
2
3
set-executionpolicy remotesigned

然后输入Y,回车

重启 Powershell 就更改完成了

0x02.账户相关

Windos 下的用户账号信息是在 C: \Windows\system32\config\SAM 里边的

查看当前用户的 SID

1
whoami /user

用户

Windows 默认账户是 Administrator,Guest 账户是默认关闭的

基本命令

1
2
3
4
5
net user //查看系统账户
net user resek4 //查看用户的属性信息
net user resek4 123456 /add //添加一个用户名是resek4,密码是123456的Guest用户
net user resek4$ 123456 /add //添加一个用户名是resek4的隐藏用户
net user resek4 /del //删除resek4用户

用户组

Administrators 组内的用户,都具备系统管理员的权限

Guests 是提供给没有用户账户但是需要访问本地计算机资源的用户使用的
Users 组内的成员只拥有一些运行程序的权利,但是不能更改设置,不能关闭计算机
Power Users 组内成员权利多于 Users,少于 Administrators
Remote Desktop 组内的成员拥有远程登录权限(Administrator 是默认就有的)

基本命令

1
2
3
4
5
6
net localgroup //查看系统和组
net localgroup resek //查看resek组内的成员
net localgroup resek /add //添加一个叫resek的组
net localgroup resek resek4 /add //向resek组里添加一个resek4的用户
net localgroup resek resek4 /del //删除resek组里resek4成员
net localgroup resek /del //删除resek组

0x03.命令

基本命令

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
42
43
$psversiontable #powershell每个windows版本有区别,这个命令可以看powershell的版本

get-service #获取计算机详细的服务及状态
#等同于在cmd里输入service.msc

get-process #获取所有进程信息

get-alias #获取当前会话的别名

get-history #获取输入命令历史

get-date #获取时间

get-command #获取所有命令
#也可使用gcm别名

get-childitem #获取当前目录的所有文件信息,等同于dir,ls

ls | format-table name,mode #将ls里的name与mode格式化输出

ls | format-table name,mode > 1.txt #将输入内容重定向到1.txt里边

type 1.txt #打印内容到屏幕上

netstat -ano #打印所有网络信息

route print #打印所有路由信息

start notepad #打开记事本,所有放在windows/system32 里的文件都可以被打开

$env.path #输出系统变量
$env:windir #打印某个环境变量的值

ls variable #查看当前

test-path variable:num1 #查找变量是否存在

del variable:num1 #删除变量

$pid #打印当前进程的pid

[environment]::setenvironmentvariable("PATH","E:\","User") #永久增加用户的环境变量

基本运算及函数

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
#条件判断
if(){} else{}
if(){} elseif(){} else{}

# 定义数组
$arr=1..10
$arr=1,2,3,4,5,6,7,8,9,10
#也可以将ipconfig等命令赋值给一个数组,然后后期间接输出

#循环
foreach($i in $arr){}
while(){}
do{}while()

#自定义函数
function test(){}

read-host "" #读取用户输入,未来输出可以直接在引号里放变量

$str.split("\").gettype()
split()可分隔信息,gettype()可打印信息

#获取字符串图片名称
$str="https://www.abc.com/haha/hello.png"
$str.split("\")[-1] 即可获得hello.png

别名

1
2
3
4
5
6
7
8
9
10
get-alias -name ls#获取ls别名,即会回显get-childitem

get-alias | where{$_.definition.startswitch("Remove")}
# $_表示当前的元素,definition 定义一个字符串数组类型。Powershell支持.net强大的类库,里面的definition包括字符串startswith操作,获取字符串开头函数。

set-alias -name notepad -value pad #将notepad的别名设置为pad,关闭ps就会失效

del alias:pad #删除别名

export-alias 1.ps #保存别名

0x04.注册表相关

  • HKEY_CLASSES_ROOT:定义文档的类型\类以及与类型关联的信息以及 COM 组件的配置数据

  • HKEY_CURRENT_USER:包含当前登录到 Windows 的用户的配置信息

  • HKEY_LOCAL_MACHINE:包含与计算机相关的配置信息,不管用户是否登录

  • HKEY_USERS:包含有关默认用户配置的信息

  • HKEY_CURRENT_CONFIG:包含有关非用户特定的硬件的配置信息

1
2
3
4
5
6
7
8
9
可以直接
cd hkcu:
来进入hkcu注册表,ls即可打印

# 读取键值
get-itemproperty

#设置键值
set-itemproperty

A simple summary of Powershell Script

https://resek4.github.io/2020/11/02/powershell/

Author

Resek4

Posted on

2020-11-02

Updated on

2023-02-26

Licensed under

Comments