c++ 调用 powershell_十九,Powershell基础入门及常见用法(一)

本文介绍了Windows PowerShell的基础知识,包括其作为命令行环境和脚本语言的特性,如管道、重定向、别名使用、变量基础、执行外部命令和脚本程序。此外,还详细阐述了如何在C++中调用Powershell,以及PowerShell在管理和安全领域的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.Powershell初识

1.基础概念

Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。

传统的CMD支持脚本编写,但扩展性不好,而Powershell类似于Linux shell,具有更好的远程处理、工作流、可更新的帮助、预定任务(Scheduled Job)、CIM等优点。

那么,如何进入Powershell呢?

一种方法是在运行中直接输入Powershell打开,另一种方法是CMD中输入Powershell打开。

060acad2c38a1be04ed902b9dea1b243.png
778e2b5e9b348f7bc1c947372918fcd9.png
f68dd34618db13da3421faaac018fd1b.png

不同操作系统内置的Powershell是不一样的,比如win7或win2008,如何查看版本呢?

$psversiontable

输出结果如下图所示:

53ffb5e9d4f72e3022697df902ae9df9.png

2.为什么强大?

首先,它可以进行计算任务,包括计算1gb大小(以字节为单位),还有基本的运算。

2a660f1950f29e513256bf15c0d5e72e.png

其次,Powershell可以获取计算机的服务详细信息、状态等。

get-service

其显示结果如下图所示,采用动词+名词方式命名,比较清楚。

79e3c6f1abc9c1b20b7db5599acdf890.png

而CMD中无法获取services的(输入services.msc),它是以图形化方式显示出来的。

39006d5099f53afd1059003d087fb8f1.png
d5687ec4b66932bbbe8b8febcc5ab3f4.png

最后,由于Powershell具有以下特点,它被广泛应用于安全领域,甚至成为每一位Web安全必须掌握的技术。

方便

支持面向对象

支持和.net平台交互

强大的兼容性,和cmd、vbs相互调用

可扩展性好,它可以用来管理活动目录、虚拟机产品等平台

3.控制台和快捷键

鼠标右键属性,可以对Powershell控制台进行编辑,并且它支持两种编辑模式,快速编辑模式默认钩上的。

4fd91fad51d2c03b8be6d5a65f34ceea.png
15b4b8f438731a5933613da74db2664b.png

Powershell快捷键包括:

ALT+F7      清楚命令的历史记录PgUp PgDn   翻页Enter       执行当前命令End         将光标移动至当前命令的末尾Del         从右开始删除输入的命令字符Esc         清空当前命令行F2          自动补充历史命令至指定字符处F4          删除命令行至光标右边指定字符处F7          对话框显示命令行历史记录F8          检索包含指定字符的命令行历史记录F9          根据命令行的历史记录编号选择命令,历史记录编号可以通过F7查看 左/右        左右移动光标上/下        切换命令行的历史记录Home        光标移至命令行字符最左端Backspace   从右删除命令行字符Ctrl+C      取消正在执行的命令Tab         自动补齐命令或文件名

例如,使用快捷键Ctrl+C打断了正在运行的ping指令;使用tab快捷键补齐了service.msc命令。

8b339ad35c3a39738b6643a4d26a3b30.png

4.数学运算

Powershell支持数学运算,比如:

PS C:甥敳獲yxz> 2+46PS C:甥敳獲yxz> 4-22PS C:甥敳獲yxz> 4*312PS C:甥敳獲yxz> 9%21PS C:甥敳獲yxz> (1+3*5)/28PS C:甥敳獲yxz> 1gb/1mb1024PS C:甥敳獲yxz> 1gb/1mb*18kb18874368PS C:甥敳獲yxz> 1gb -gt 1mbTruePS C:甥敳獲yxz> 0xabcd43981

显示结果如下图所示:

6d2cc7363401642e2b72a670c1eda5bf.png

二.Powershell管道和重定向

1.管道

Powershell管道旨在将上一条命令的输出作为下一条命令的输出。

b847ef0dade47cbc14ef971e4b908f29.png

管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示。传统的Cmd管道是基于文本的,但是Powershell管道是基于对象。例如:

linux:lscmd:dir
10a13f022575b30b7d7ac493cf0f5eb6.png

如果只获取其中的name、mode值,则使用如下指令。

ls | format-table name, mode
b2f08251874ffbb2f1e63f51ebcfbde9.png

2.重定向

重定向旨在把命令的输出保存到文件中,‘>’为覆盖,’>>’追加。

ls | format-table name, mode > demo.txttype demo.txt

上面代码是将ls显示文件内容的name和mode信息存储至本地demo.txt文件夹中,再调用“type demo.txt”打印文件内容。如果两个 >> 它会在原来的基础上,再进行补充(类似 a+),而单个大于号是删除原来的写入(类似 w)。

cb95a0a2c4537a56abd1b0c3c7eec666.png

输出结果如下图所示。

755c101dfdb93f660cdbff090bbcd47f.png

三.Powershell执行外部命令及命令集

1.外部命令

Powershell是CMD的一个扩展,仍然能够让CMD中的命令在Powershell中使用,Powershell初始化时会加载CMD应用程序,所以CMD命令正常情况下在Powershell中都能使用,例如ipconfig。

查看端口信息

netstat -ano

包括协议、本地地址、外部地址、状态、PID(进程号)。

33a5ff08a23d7577548761b7324b8801.png

查看网络配置信息

ipconfig
efdfe0688f8b55d299e0b817b202f603.png

打印路由信息

route print
a2e732715e709f5dfb5891bbac52b233.png

自定义文件路径,打开应用程序

start notepadnotepad

notepad放在C盘下面的WindowsSystem32文件中,能够直接打开。

db50006d4133a17513cccfa2bd2abe09.png

系统变量

$env:path
b1300418583f9d7f5f2347143613b4df.png

Python可以直接打开,Wordpad不能打开,需要添加环境变量中。

a186aba5acb18919af610b5602b8f1a4.png

2.命令集

通过get-command获取所有命令,通常是动名词的方式。

get-command
ae8544b79882366955f4c7e20ab81935.png

获取其用法的命令如下,简称gcm。

get-help get-command
c58c4fdc268866ea9ae554956860f43c.png

获取进程信息

get-process
7e70491cfd4a653f39ab74ed4df27ee6.png

获取当前会话的别名

get-alias
29bf16435f73ddbf46d7ec0d319da1fd.png

获取输入的历史命令信息

get-history
5163e2fb8d1dae5272a6d5eef81147f8.png

获取当前时间

get-date
39660f5f350fa61e2bd00429a961cdab.png

四.Powershell别名使用

1.别名基本用法

获取所有命令get-command可以用别名gcm替代。

get-commandgcm
9322896dae62f300c75f0d18eebefd24.png

获取当前目录的所有文件信息get-childitem,可以用ls、dir两个命令达到同样的效果。

get-childitemlsdir
2d90417848eca2e0b9644dfc858c1a8f.png
faaf42ef2f3aaeb03dae038107f76571.png

获取相关的帮助信息,其命令如下:

get-help get-childitem
de5005b50c43119450cbbfafbb65b329.png

获取别名所对应真实的命令

get-alias -name lsget-alias -name dir
61f0f00f286c546623f5c1c7e6b6f67e.png

查找所有以Remove开头的别名

get-alias | where{$_.definition.startswith("Remove")}

其中,where来做一个管道的筛选,$_表示当前的元素,definition 定义一个字符串数组类型。Powershell支持.net强大的类库,里面的definition包括字符串startswith操作,获取字符串开头函数。

2a97d9ef093d30a82c2106e785df5a4a.png

查找所有别名,并调用sort降序排序及计算排列。

get-alias | group-object definition | sort -descending Count
646c366b3872d4f7e3c41f8549be7167.png

注意:自定义别名是临时生效的,当关闭Powershell时就会失效。

2.自定义别名

设置别名,将notepad设置为新的别名pad。pad打开notepad,表明我们的别名创建成功。

set-alias -name pad -value notepad
a780009d6a6f4a2b4a45651fc2555b55.png

别名是临时生成的,关掉Powershell即可失效,也可以撰写命令删除。

del alias:pad
b1956c1362faa8ce086d8ddf3f648745.png

保存别名

export-alias demo.psdirtype demo.ps
56625a7e447d2a8a34e1c1290aa80454.png
6638824be54af87edae38c691285d437.png

导入别名命令如下,其中-force表示强制导入。

import-alias -force demo.ps

五.Powershell变量基础

1.基础用法

Powershell变量跟PHP很类似,如下所示。

$name='eastmount'$name$age=28$age
82417fa3c0f6d72e8f3bb05b4aedb0d9.png

Powershell对大小写不敏感,$a 和 $A 一样。复杂变量用大括号引起来,但不建议同学们这里定义。

${"I am a" var ()}="yxz"${"I am a" var ()}$n=(7*6+8)/2$n=3.14

变量也可以设置等于命令。

$n=ls
1b9f6c7246121870e693bfd55afdd77e.png

变量多个同时赋值,但不建议这么写。

$n1=$n2=$n3=25$n1,$n2,$n3

2.变量操作

变量的基本运算操作

$a=2$b=10$c=a+b$a,$b,$c
e6119320c42069f28a7fec3e183e9a42.png

传统变量交换方法

$num1=10$num2=20$temp=$num1$num1=$num2$num2=$temp$num1,$num2
23244d041450600e8101ecf64cdf8e2f.png

现在变量交换的写法

$num1=10$num2=20$num1,$num2=$num2,$num1$num1,$num2
0d91d9d9f77b4de88a24241f8465f60d.png

查看当前的变量

ls variable:
dce43e34c307b6ce070d221673640dc1.png

查找特定的变量值,星号表示代替所有的值(num开头)。

ls variable:num*ls variable:num1
32bf032ab2f0e5ae66ec146e9281ba88.png

查找变量是否存在

test-path variable:num1test-path variable:num0
884ff7beb20aa73b7464d56e9d340b7b.png

删除变量

del variable:num1test-path variable:num1
77a378e34b288f8c2dca808422b26ec4.png

专用变量管理的命令

clear-variableremove-variablenew-variable

3.自动化变量

powershell打开会自动加载变量,例如:窗口打开它会自动加载大小,再比如程序的配置信息自动加载。

根目录信息

$home
7d46d4f1b32fdd584610cc5cbc8c0072.png

当前进程的标志符,该自动化内置变量只能读取,不能写入。

$pid$$
e40aa196b0c561939e958f7ee49796b4.png

4.环境变量

查看当前环境变量

ls env:
6157f723a1ef17de8901c453ec0bafe2.png

打印某个环境变量的值

$env:windir
228549dda7e7d5097f967d823f5ac5c4.png

创建新的环境变量

$env:name='eastmount'ls env:na*
a50f5a2519914d83e3d6a0ff980c2bae.png

删除环境变量

del env:namels env:na*
81de214809f5b0aae7418411886fda8c.png

更新环境变量,注意它只是临时生效,并不会记录到我们的系统中。

$env:OS$env:OS="Linux"$env:OS
08cb57072d5e3bc0da4d5f8750c66e1c.png

永久生效如何实现呢?增加路径至环境变量PATH中,只对User用户生效。

[environment]::setenvironmentvariable("PATH","E:","User")[environment]::getenvironmentvariable("PATH","User")

系统变量对所有用户都生效,用户变量只对当前用户生效。

3dd9700a3376ae6430012f17d5dd0135.png
8e94f21dd71dcd14b59d14b57207441f.png

生效之后如下图所示,用户变量增加了相关值。

7057c8bfa552d7477b21840f5a22808a.png

六.Powershell调用脚本程序

1.脚本文件执行策略

首先,发现我们的脚本文件是禁止执行的。

get-executionpolicy
3efe2dec9d4f7d1cf4a4335c0b44373f.png

接着,我们尝试获取策略帮助信息。

get-help set-executionpolicy
e220627013f10038309908e615ad98a8.png

最后修改权限,让其能运行Powershell脚本文件。

set-executionpolicy RemoteSigned

它会提示你需要启动管理员身份运行。

85b358ac08b633fe628098187f773276.png

通过管理员身份打开CMD,再设置其权限即可,设置完成之后可以调用相关的脚本程序。

ccf37709085f7f07e9d63556003aecea.png

2.调用脚本程序

(1) 定义一个demo.bat文件,其内容如下,关闭回写,打印hello world。

@echo offecho hello world

运行命令打开:

cd desktop.demo.bat

(2) 定义一个demo.vbs文件,内容如下:

msgbox "优快云 Eastmount"

运行命令打开:

cd desktop.demo.vbs
12c544dfe4465ad3686924456e570054.png

(3) 运行Powershell脚本文件也类似。

$number=49switch($number){{($_ -lt 50) -and ($_ -gt 40)} {"此数值大于50且小于40"}50 {"此数值等于50"}{$_ -gt 50} {"此数值大于50"}}

运行结果如下图所示:

4e56d0189196545dbe29946d02e796e3.png
116142189e94acb002aef3965a9123f1.png

那么,如何在CMD中运行Powershell文件呢?
我们将demo.bat修改为如下内容,其中&表示运行。

@echo offpowershell "&'C:甥敳獲yxzDesktopdemo.ps1'" 
b560fd9dfa9e8557df201e0a778fffe4.png

运行命令:

cd desktop.demo.bat

下面方法也可以直接运行

start demo.batdemo.bat
2f5ceda8dbe5329fb7963a570a5226e8.png

七.总结

“没有网络安全就没有国家安全,没有信息化就没有现代化”,这是我第三次听院士授课。每次的感受都很震撼,他们是这个国家的脊梁,总能站在国家和民族的角度去思考问题、解决问题,用通俗易懂的图表去诠释知识,去构建祖国的重大工程和梦想,致敬。侠之为大,为国为民。补充一句,沈院士很早就到了会场修改PPT,特别增加了区块链的知识。

b960fdf9a4d5f598e2f9db898ec13fea.png

很多大牛和老师的分享都让我受益匪浅,来自清华大学和俄亥俄州立大学的两位张老师的分享是我第三次听了,但还是很懵,下次争取能听懂。来年在雄安新区举办,希望能像学弟和学妹一样,站上讲台,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值