经典PowerShell入门教程
powershell教程
powershell教程PowerShell是一种用于自动化任务和管理计算机系统的命令行工具和脚本语言。
它是Windows操作系统中的默认命令行选项,提供了许多功能强大的命令和脚本来协助系统管理员进行日常任务。
PowerShell可以运行各种命令,包括系统管理命令、文件处理命令、网络命令、注册表命令等。
同时,它还支持脚本编写,可以编写包含复杂逻辑和任务序列的脚本来实现自动化操作。
以下是一些常用的PowerShell命令和用法:1. 获取文件夹中的文件列表:```Get-ChildItem -Path C:\Folder```这个命令会列出指定路径下的所有文件和文件夹。
2. 复制文件或文件夹:```Copy-Item -Path C:\File.txt -Destination D:\Folder```这个命令会将指定路径下的文件复制到目标路径。
3. 删除文件或文件夹:```Remove-Item -Path C:\File.txt```这个命令会删除指定路径下的文件或文件夹。
4. 运行程序:```Start-Process -FilePath "C:\Program Files\Example\example.exe" ```这个命令会运行指定路径下的程序。
5. 查找特定文件:```Get-ChildItem -Path C:\Folder -Filter *.txt -Recurse```这个命令会在指定路径下以及其子文件夹中查找扩展名为.txt 的文件。
6. 获取进程列表:```Get-Process```这个命令会列出当前计算机上运行的所有进程。
这些只是PowerShell的一小部分功能和命令。
要学习更多有关于PowerShell的知识,你可以查阅PowerShell的官方文档或参考一些在线教程。
掌握PowerShell不仅可以提高工作效率,还能使系统管理更加简便和自动化。
Windows PowerShell实用教程
Group-Object
这个命令可以收集对象,并通过特性进行分类。在本文例子中,特性就是 Extension,但 它可能是上面任何的属性。
Windows PowerShell 实用教程
Windows PowerShell 实用教程
Windows PowerShell 是微软交互式命令 shell 和脚本语言。Windows 管理员在 Windows XP、Windows Server 2003 和 Windows Vista 中都能用到 Windows PowerShell, Windows Server 2008 中也有它的身影。但是你如何从 Windows PowerShell 脚本开始呢?作为一本 Windows PowerShell 教程,本专题特为系统管理员汇集了所有新命令和脚本的建议。
为什么 Windows PowerShell 是独一无二的? 认识 Windows PowerShell 函数的参数 PowerShell 脚本新移动功能来袭
实用工具:Windows PowerShell
初步了解了 Windows PowerShell 的一些特性与功能,具体运用中,我们不可能将所以功 能一次性用到,那么,我们在不同的情况下要挑选哪些不同的功能呢?让我们根据专家经 验来挑选一些功能,让这个实用工具来为我们好好服务吧。
PowerShell
Get-childitem | group-object extension | select-object name
虽然这个代码在 VBScript 里并不复杂,但它在 PowerShell 里只需要一行代码。但是 PowerShell 是如何起作用的?下面我们分解下这个代码:
powershell使用手册
powershell使用手册PowerShell是一种任务自动化和配置管理框架,它由微软开发并集成到其操作系统中。
它的强大之处在于其灵活性和可扩展性,可以用于管理Windows操作系统上的各种任务和配置。
以下是关于PowerShell的使用手册:1. 基础知识,PowerShell的基本语法和命令结构是了解其功能的第一步。
了解如何编写和执行基本的命令,如何使用变量和管道操作符等是非常重要的。
2. Cmdlet,Cmdlet是PowerShell中的命令,它们以动词-名词的形式命名,例如Get-Process,Start-Service等。
掌握常用的Cmdlet以及它们的用法是非常重要的。
3. 脚本编写,PowerShell可以用于编写脚本来自动化任务。
了解如何编写脚本以及如何运行和调试脚本是非常重要的。
4. 远程管理,PowerShell可以用于远程管理其他计算机。
了解如何配置远程管理以及如何在远程计算机上执行命令和脚本是非常重要的。
5. 模块和函数,PowerShell支持模块和函数,可以通过这些方式扩展其功能。
了解如何编写和使用模块以及函数是非常重要的。
6. 错误处理和日志记录,了解如何处理错误以及如何记录日志对于编写健壮的PowerShell脚本是非常重要的。
7. 安全性,PowerShell具有强大的系统管理功能,因此安全性是非常重要的。
了解如何配置执行策略以及如何安全地使用PowerShell是非常重要的。
总之,掌握PowerShell的使用需要不断的实践和学习,通过阅读官方文档和参考书籍可以更好地掌握PowerShell的用法和技巧。
希望这些信息对你有所帮助。
powershell语法手册
powershell语法手册一、简介PowerShell是微软开发的一款强大的命令行脚本和配置环境。
它使用一种基于任务的脚本语言,使得系统管理员能够更高效地管理Windows环境。
PowerShell提供了丰富的命令和功能,使得用户可以自动化许多常见的系统管理任务。
二、基本语法命令结构PowerShell命令的基本结构如下:powershellcommand -Argument $value例如,要获取当前日期,可以使用:powershellGet-Date变量在PowerShell中,变量使用 $ 符号开头。
例如:powershell$variable = "Hello, World!"控制结构If语句:powershellIf ($condition) {# commands}For循环:powershellFor ($i = 0; $i -lt 10; $i++) {# commands}While循环:powershellWhile ($condition) {# commands}函数定义函数的方式如下:powershellFunction functionname {param (param1, param2)# commands}参数 PowerShell命令通常支持参数。
例如,Get-Process 命令可以带一个 -Name 参数来指定要获取的进程的名称。
使用参数的方式如下:powershellGet-Process -Name "notepad"管道管道操作符 | 可以用来将一个命令的输出传递给另一个命令作为输入。
例如:powershellGet-Process | Where-Object { $_.CPU -gt 50 } | Select-Object Name, CPU这个命令会列出CPU使用率超过50%的进程的名称和CPU使用率。
PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法
PowerShell⼊门教程之Cmd命令与PowerShell命令相互调⽤的⽅法单独使⽤⼀种脚本来完成⼀项任务是理想的状态,⽽现实的情况往往是,因为历史原因、或者团队组成,你不得不将多种脚本或者程序组合在⼀起,来完成某项任务。
本⽂的讨论范围是Cmd命令与PowerShell命令之间的组合与调⽤。
⽏庸置疑,Cmd命令与PowerShell命令之间的调⽤有两个⽅向。
即在Cmd命令中调⽤PowerShell的命令,以及在PowerShell脚本中调⽤Cmd命令。
需要说明的是,这⾥的调⽤分两个层次:⼀、简单的在其中⼀个的环境中执⾏另外⼀个命令,完成部分⼯作;⼆、在其中⼀个的执⾏上下⽂中调⽤另⼀个的命令,并根据返回结果来选择后⾯的逻辑。
在Cmd命令中调⽤PowerShell命令如果只是在Cmd命令中调⽤PowerShell的命令,⽽不需要记录PowerShell的返回结果,是⾮常简单的。
可以直接在Cmd命令或者脚本中执⾏类似⼀下命令:复制代码代码如下:powershell echo "Hello"执⾏上述命令的时候,Cmd是把PowerShell当成⼀个应⽤程序来执⾏的。
在Cmd命令中调⽤PowerShell的命令并获得返回值的可⾏⽅法并不多。
这是因为,Cmd命令对于结果的处理往往需要借助于⽂件读写,很少有机会在各个命令之间传递数据,并保存中间结果的。
For命令是其中最好的⼀个⽅法,它的指向⽅法如下:复制代码代码如下:for /f %i in ('powershell echo "Hello"') do (set a=%i)以上命令的执⾏结果是%a%被赋值为Hello。
当然,如果只是简单赋值,就没有必要这样⼤费周折。
调⽤PowerShell的命令,肯定是看中了它强⼤的编程能⼒,⽐如⾃定义的排序等等。
我遇到的⼀个实际的例⼦是这样的:⽂件服务器上有⼀个⽬录,⾥边放着⼀些按年⽉命名的⽬录。
powershell简单命令
powershell简单命令
PowerShell是一种任务自动化和配置管理框架,它提供了一个命令行界面和脚本语言,类似于Unix shell。
以下是一些简单的PowerShell命令:
1. 获取当前目录的内容:
Get-ChildItem.
2. 切换目录:
Set-Location <目录路径>。
3. 显示当前目录的路径:
Get-Location.
4. 显示系统中正在运行的进程:
Get-Process.
5. 显示系统上安装的所有软件:
Get-WmiObject -Class Win32_Product.
6. 显示网络适配器信息:
Get-NetAdapter.
7. 显示系统服务的状态:
Get-Service.
8. 显示环境变量:
Get-ChildItem Env:
以上是一些PowerShell的简单命令,它们可以帮助你执行基本的文件和系统管理任务。
当然,PowerShell还有很多其他功能和命令,可以根据具体需求进行深入学习和使用。
PowerShell系列教程(二) for XP
今天Vista地带就讲一下Windows PowerShell内置命令,Windows PowerShell内置了丰富的系统管理命令。
如进程查看、服务列表、逻辑运算等功能,同时又支持cmd命令执行。
今天就的难度为LEVEL 100适合入门级,几乎看了亲身适用一次就可以完全掌握了。
(一)PowerShell 的启动方法:(安装了PowerShell 后启动方法)方法一. 在Windows 的开始菜单-“所有程序”-“Windows PowerShell 1.0”-“Windows PowerShell图标” 来启动。
方法二. 在“运行”对话框中输入powershell 回车即可运行。
方法三. 在“cmd命令提示符”中输入powershell 即可运行。
同时兼容telnet 和SSH 环境下执行。
(二)获取系统服务信息Windows Powershell内置命令近似自然语言,获取系统服务信息可以联想到get service,我们输入 get-service 命令即可,如图1所示:图1(三)获取系统进程信息同理我们仍然可以联想到GetProcess ,这里我们输入get-process即可查看当前的进程列表,如进程PID、句柄数等等信息如图2所示:图2(四)获取系统当前的日期和时间获取日期的自然语言GetDate ,这里我们输入get-date即可,如图3所示:图3(五)计算机的KB 、MB、GB、TB的字节数。
我们输入12MB可以得到12582912 (即12x1024x1024),输入15 KB可以得到15360,但是输入时一定要注意单位完成,是KB而不是K,如图4所示输入错误会提示“数字常量无效”所在位置:行字符等信息。
图4(五)逻辑运算真假异或等我们知道异或是真^真=假真^假=真假^真=真假^假=假,我们输入1 -xor 0 显示为真True 如图5所示:图5(六)获取系统BIOS 信息,这里我们是通过WMI 执行 WQL语言我们输入Get-WmiObject win32_bios (后面的参数win32_bios可以通过查询WMI Class 参考获取),如图6所示:SMBIOSBIOSVersion : P1.20Manufacturer : American Megatrends Inc.Name : Default System BIOSSerialNumber : To Be Filled By O.E.M.Version : A M I - 8000610。
PowerShell系列教程(四) for XP
本节Vista地带将PowerShell常见问题作了汇总,从下一节开始我们将进入LEVEL 200难度,讲述如何创建cmdlet以及如何通过Windows PowerShell管理器Windows Vista 、Windows Server 2008操作系统。
PowerShell答疑一) 如何大批量部署Windows PowerShell很多服务器使用了Windows Server 2003操作系统。
(注:Windows Server 2008自带了PowerShell不能独立安装),Vista地带告诉大家可以在Win2003批量安装。
通过安装命令行WinPowerShellSetup_x86_fre.exe /quiet 可以自动部署Windows PowerShell。
二) PowerShell返回结果很多如何排序PowerShell支持排序功能,参考下面两个例子。
1. 降序输出当前目录我们使用dir | sort -descending 命令输出降序的目录名,如图1所示S -> M -> F-> C (字母表降序)图12. 降序输出分区按照可用空间我们是用get-wmiobject win32_logicaldisk | sort -desc freespace 这个WMI查询获取,管道符后的sort -desc freespace 就是根据磁盘空间大小降序排列,如图2所示:图2三) PowerShell返回结果很多如何筛选1. findstr命令筛选我们拿ipconfig为例,输入不带任何参数的ipconfig会返回当前本机所在的域、IP地址、子网掩码、默认网关。
我们输入ipconfig | findstr 'IP' 后就会只返回IP地址,如图3所示:图32. PowerShell支持通配符以及eq关键字匹配我们输入Get-Service | Where-Object { $_.Status –eq "Stopped" } 命令来筛选字段为Status,状态为停止的服务,如图4所示:图4使用通配符* 或? 号匹配。
PowerShell入门基础教程
PowerShell⼊门基础教程Windows PowerShell 是专为系统管理员设计的新 Windows 命令⾏外壳程序。
该外壳程序包括交互式提⽰和脚本环境,两者既可以独⽴使⽤也可以组合使⽤。
1、什么是交互式提⽰?答:交互式提⽰就像打开⼀个cmd窗⼝,在⾥⾯执⾏⼀个ping命令⼀样,它会动态的输⼊结果。
也可以像执⾏ftp命令⼀样,有⼀个上下⽂环境(Context),可以交互。
2、什么是脚本环境?答:就像写VBScript脚本⼀样,以⽂件形式把PowerShell的程序语句写下来,然后利⽤PowerShell的脚本环境来执⾏整个脚本⽂件。
顺便说⼀句,批处理也可以理解为⼀个脚本环境。
PowerShell脚本⽂件的扩展名为.ps1,语⾔⽀持⽤于循环、条件、流控制和变量赋值的语⾔结构。
Windows PowerShell 是专为系统管理员设计的新 Windows 命令⾏外壳程序。
该外壳程序包括交互式提⽰和脚本环境,两者既可以独⽴使⽤也可以组合使⽤。
解读:1、什么是交互式提⽰?答:交互式提⽰就像打开⼀个cmd窗⼝,在⾥⾯执⾏⼀个ping命令⼀样,它会动态的输⼊结果。
也可以像执⾏ftp命令⼀样,有⼀个上下⽂环境(Context),可以交互。
2、什么是脚本环境?答:就像写VBScript脚本⼀样,以⽂件形式把PowerShell的程序语句写下来,然后利⽤PowerShell的脚本环境来执⾏整个脚本⽂件。
顺便说⼀句,批处理也可以理解为⼀个脚本环境。
PowerShell脚本⽂件的扩展名为.ps1,语⾔⽀持⽤于循环、条件、流控制和变量赋值的语⾔结构。
与接受和返回⽂本的⼤多数外壳程序不同,Windows PowerShell 是在 .NET 公共语⾔运⾏时 (CLR) 和 .NET Framework 的基础上构建的,它接受和返回 .NET 对象。
环境中的这⼀根本更改带来了管理和配置 Windows 的全新⼯具和⽅法。
PowerShell入门教程之PowerShell和Cmd命令行的关系?
PowerShell⼊门教程之PowerShell和Cmd命令⾏的关系?PowerShell是命令⾏的加强版吗?PowerShell能执⾏命令⾏的所有命令吗?PowerShell要替代命令⾏?这三个问题的答案⾜以让我们了解PowerShell与Cmd命令⾏之间的关系。
让我们慢慢道来。
PowerShell中的CMD命令启动PowerShell,在其中输⼊⼏个常⽤的Cmd命令复制代码代码如下:PS D:\Projects\Practise\PowerShell> dirDirectory: D:\Projects\Practise\PowerShellMode LastWriteTime Length Name---- ------------- ------ ----d---- 1/23/2013 12:35 PM d1d---- 1/23/2013 12:35 PM d2-a--- 1/21/2013 8:38 PM 36314 alias.txt-a--- 1/21/2013 8:32 PM 241530 cmdlets.txt或者复制代码代码如下:PS D:\Projects\Practise\PowerShell> cd ..PS D:\Projects\Practise>结果跟我们的预期是差不多。
不过,我们是否就能据此说PowerShell就是PowerShell是命令⾏的加强版吗?再试试下⾯这个命令:复制代码代码如下:PS D:\Projects\Practise\PowerShell> dir /addir : Cannot find path 'D:\ad' because it does not exist.这个跟我们的期望相去甚远。
在Cmd中,它应该输出当前位置的⼦⽂件夹的信息,但是这⾥,它似乎理解不了我们的参数。
下⾯这个命令也是⼀样:复制代码代码如下:PS D:\Projects\Practise\PowerShell> fc .\alias.txt .\cmdlets.txtFormat-Custom : A positional parameter cannot be found that accepts argument '.\cmdlets.txt'.我本来想要调⽤⽐较两个⽂件的fc命令,结果它却理解成了Format-Custom,⽜头不对马嘴。
二十,Powershell基础入门及常见用法(二)
二十,Powershell基础入门及常见用法(二)一.Powershell操作符常见的比较运算符包括:•-eq 等于•-ne 不等于•-gt 大于•-lt 小于•-le 小于等于•-contains 包含•-notcontains 不包含67 -eq 5050 -eq 501gb -gt 1tb(1,2,3) -contains 1(1,2,3) -contains 2(1,2,3) -contains 4求反运算符:•-not$a=89 -gt 50$a-not $a逻辑运算:•-and 与运算•-or 或运算•-not 非运算•-xor 异或运算$true -and $true$true -and $false$true -or $false$false -or $false-not $true$true -xor $true比较数组和集合,从中筛选出不等于0的数字。
1,5,8,0,9 -ne 0二.Powershell条件语句1.if条件判断if-elseif-else条件判断,执行操作用大括号表示。
$num=100if($num -gt 90) {'大于90'} else {'小于等于90'}if($num -gt 100) {'大于100'} else {'小于等于100'}注意,if-else中间可以增加新的判断elseif,如下所示:if($num -gt 100) {'大于100'} elseif ($num -eq 100) {'等于100'} else {'小于100'}2.switch语句Switch语句主要用于多种情况的判断,这里在本地创建一个test01.ps1文件,并执行该代码。
传统的if判断如下:$num=56if($num -gt 50 -and $num -lt 60) { '大于50并且小于60'} elseif ($num -eq 50) { '等于50'}else{ '小于50'} 去到桌面1019文件夹,输入“.\test01.ps1”执行代码,再打印该文件的源代码。
使用PowerShell进行脚本和自动化任务的实用指南
使用PowerShell进行脚本和自动化任务的实用指南PowerShell是一种强大的脚本语言和自动化工具,它可以帮助系统管理员和开发人员简化和自动化各种任务。
无论是管理操作系统、配置网络设备还是执行重复性任务,PowerShell都能提供高效且可靠的解决方案。
本文将为您介绍一些常见的PowerShell用法和技巧,帮助您更好地利用这个工具。
一、PowerShell的基础知识在开始使用PowerShell之前,您需要了解一些基础知识。
首先,PowerShell是一种基于命令行的工具,您可以通过键入命令来执行各种操作。
其次,PowerShell 使用对象和管道的概念,使得数据处理更加灵活和高效。
最后,PowerShell支持脚本编写,您可以将多个命令组合在一起,以实现复杂的操作。
二、PowerShell的常用命令1. Get-Command:这个命令可以列出所有可用的PowerShell命令,帮助您了解PowerShell的功能和用法。
2. Get-Help:如果您不知道如何使用某个命令,可以使用Get-Help命令来获取帮助信息。
例如,键入"Get-Help Get-Process"可以获取关于获取进程信息的命令的帮助。
3. Set-ExecutionPolicy:PowerShell默认情况下禁止执行脚本,为了能够执行脚本,您需要使用Set-ExecutionPolicy命令来更改执行策略。
例如,键入"Set-ExecutionPolicy RemoteSigned"可以允许执行本地签名的脚本。
4. Get-Process:这个命令可以获取正在运行的进程的信息。
例如,键入"Get-Process"可以列出所有正在运行的进程的详细信息。
三、PowerShell的脚本编写PowerShell提供了丰富的语法和功能,使得脚本编写变得简单而强大。
PowerShell函数简明教程
PowerShell函数简明教程PowerShell函数跟其它的编程语⾔的函数差不多,主要涉及输⼊参数、处理、输出参数、返回值、如何调⽤等⽅⾯的内容,下⾯逐⼀介绍。
1、PowerShell函数定义定义函数使⽤function关键字,使⽤⾃定义的标识符作为函数名,使⽤⼀对⼤括号括起函数体。
如下:复制代码代码如下:function <函数名>{<函数体>;}举例:复制代码代码如下:function Test-Fun{$args0 = $args[0]$args1 = $args[1]Write-Host "p1=$args[0], p2=$args[1]"Write-Host "p1=$args0, p2=$args1"}在做这个例⼦的时候,洪哥遇到了很悲推的⼀幕。
感觉完全相同的两种输出⽅式,结果是截然不同。
洪哥只能说,双引号中的$args变量,居然不管后⾯的中括号和下标,真TMD的太诡异了,慎⽤!真相如下:复制代码代码如下:PS > function Test-Fun{>> $args0 = $args[0]>> $args1 = $args[1]>> $msg = "p1=$args[0], p2=$args[1]">> Write-Host "p1=$args[0], p2=$args[1]">> Write-Host $msg>> Write-Host "p1=$args0, p2=$args1">> }>>PS > test-fun 111 222p1=111 222[0], p2=111 222[1]p1=111 222[0], p2=111 222[1]p1=111, p2=2222、PowerShell函数输⼊参数在函数体中,使⽤Param()⽅法来定义函数的输⼊参数,如下:复制代码代码如下:function <函数名>{Param($p1,$p2,...);<函数体>;}关于PowerShell函数输⼊参数的更多详细介绍,⽐如“位置参数”、“名称参数”、“参数属性”等,请移步“PowerShell教程之PowerShell函数输⼊参数”。
PowerShell数组操作简明教程
PowerShell数组操作简明教程对于编写程序来讲,离不开数组,PowerShell也不例外。
在PowerShell中创建和使⽤数组是⼀件前所未有的愉悦的事情,实在是简单、易⽤得太过分了!呵呵!1、定义数组在PowerShell中,所有的变量都⽆须定义,数组亦如此,所以此步省略。
2、初始化数组复制代码代码如下:$arr=1,2,3,'a','b','xx';在上⾯的例⼦中,洪哥对变量名为$arr的数组进⾏了初始化。
在PowerShell中初始化⼀个数组就是把所有的数组元素——不管什么类型的,通通赋给它。
每个数组元素之前使⽤逗号(,)分隔即可。
通过初始化之后,$arr这个数组有6个数组元素。
3、获取数组元素的值在PowerShell中,数组元素的索引或要下标是从0开始的,即上例中的$arr[0]=1,⽽$arr[5]='xx'。
$arr[5]已经是最最后⼀个元素了,如果我们调⽤$arr[6],系统也不会报错,只是不会输出任何内容。
4、获取⼀部分数组元素的值PowerShell数组中,最好玩的⼀件事获取数组元素的⼀部分,且看下⾯例⼦。
复制代码代码如下:PS >$arr[0]1PS >$arr[0+3]aPS >$arr[0,3]1aPS >$arr[0,1+3..5]12abxxPS >$arr[-1]xxPS >$arr[-2]b5、获取数组的元素个数复制代码代码如下:PS >$arr.Length66、遍历数组⽅法⼀:复制代码代码如下:foreach($a in $arr){$a}foreach对于遍历⼀个集合(数组也算是⼀个集合)⽽⾔,真是太⽅便了。
⽅法⼆:复制代码代码如下:for($i=0;$i -lt $arr.Length; $i++){$arr[$i]}这个就是普通的for循环,从C学到C++,再到Java或C#,⼀直都这么写,⼤家应该是⽐较熟悉的。
PowerShell实例教程讲解
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快速编辑模式可以通过鼠标左键选择任意矩形区域内的文本,并且鼠标右击实现复制功能。
快捷键Ctrl+Home删除光标最左端的所有字符Tab自动补齐命令或者文件名管道和重定向管道把上一条命令的输出作为下一条命令的输入。
PowerShell基础教程
PowerShell基础教程一:Windows PowerShell简介XP/Server 2003/Vista/Server 2008操作系统的脚本语言。
包括 Cmd.exe 、SH、KSH、CSH以及BASH Unix在内的大多数外壳程序的操作方式都是在新的进程中执行命令或实用工具程序,并以文本格式向用户显示结果。
多年以来,许多文本处理实用工具程序,如sed、AWK 和 PERL,都已逐渐发展为支持这种交互模式。
这些外壳程序也会提供内置于外壳程序中并在外壳程序处理器中执行的命令,例如KSH 中的typeset命令和以及 Cmd.exe 中的 dir 命令。
在大多数外壳程序中,由于内置命令数量少,从而导致许多实用工具程序应运而生。
针对这一点,Windows PowerShell 有不同的做法。
◆ Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象;◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口;◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用不同的剖析器,这项特点会使你更容易学会每种命令的使用方式。
其中最棒的就是你完全不需要舍弃已使用习惯的工具,你可以继续在Windows PowerShell 中使用诸如Net、SC 和 Reg.exe 等传统的 Windows 工具。
Windows PowerShell CmdletCmdlet (发音如“command-let”) 是指在 Windows PowerShell 中用来操作对象的单一功能命令。
你可以依据其名称格式来加以辨识 Cmdlet -- 以破折号 (-) 分隔的动词和名词,例如Get-Help、Get-Process 和 Start-Service。
在传统的外壳程序中,命令是极为简单 (例如 attrib.exe) 到极为复杂 (例如 netsh.exe) 范围内的可执行程序。
windows powershell 用法
windows powershell 用法Windows PowerShell 是一种强大的命令行工具,用于自动化和管理Windows 系统。
以下是Windows PowerShell 的一些基本用法:一、启动PowerShell:在开始菜单中搜索"PowerShell",然后选择"Windows PowerShell" 或"Windows PowerShell ISE"(一个带有图形界面的版本)。
在命令提示符(Command Prompt)中输入"PowerShell" 并按回车。
在文件路径下,按Shift + 鼠标右键,选择"在此处打开PowerShell"。
二、基本命令:Get-Command:获取所有可用的命令。
Get-Process:获取当前运行的所有进程。
cls 或 Clear-Host:清屏。
help:显示帮助信息。
例如,help Get-Process 会显示关于 Get-Process 命令的帮助。
三、文件操作:New-Item:创建新的文件或目录。
例如,New-Item -Type Directory "新目录名" 会创建一个新目录。
Remove-Item:删除文件或目录。
例如,Remove-Item "文件或目录名" 会删除指定的文件或目录。
Get-Content:查看文件内容。
例如,Get-Content "文件名" 会显示文件的内容。
Set-Content:给文件添加内容。
例如,Set-Content "文件名" "要添加的内容" 会将指定的内容添加到文件中。
Add-Content:向文件追加内容。
例如,Add-Content "文件名" "要追加的内容" 会在文件的末尾追加指定的内容。
Win7 PowerShell 使用教程
Get-Command 用于检索所有可用 cmdlet 的列表。 Get-Help 用于显示有关 cmdlet 和概念的帮助信息。 Get-WMIObject 用于通过 WMI 来检索管理信息。 Get-EventLog 用于检索 Windows 事件日志。 Get-Process 用于检索单个活动进程或活动进程的列表。 Get-Service 用于检索 Windows 服务。 Get-Content 用于读入文本文件,将每行视为一个子对象。 Add-Content 用于将内容附加到文本文件。 Copy-Item 用于复制文件、文件夹和其他对象。 Get-Acl 用于检索访问控制列表 (ACL)。 要获得 PowerShell 自带的完整 cmdlet 列表,请访问 /en-us/library/ms714408.aspx。 所有 cmdlet 都以标准的“动词-名词”格式命名,这使其易于理解和记忆。例如,运行 Get-Command cmdlet 将会列出所有 可用的 cmdlet。对于管理员来说最有用的 cmdlet 也许就是 Get-WMIObject。若您想要查明 Server2 正在运行哪个服务包,只需 运行:
PowerShell 中的对象使用非常普遍,这全都仰仗于它的变量。而且,您不必预先声明变量,只需在变量名称前放置一个美元符号 ($) 就可以开始使用它们了。尽管不是必需的,但您也可以将所要放入变量的数据类型告知 PowerShell。这使得 PowerShell 可以将 变量映射到某一种极其强大的 .NET Framework 类型,从而为您提供诸多附加的内置功能。例如,假设您想要提示输入计算机名称并 从该计算机中检索服务包版本,但是您不知道键入的计算机名称是否会包括两个反斜线(如 \\Server2)。由于您知道 Get-WMIObject cmdlet 不需要反斜线,因此您可以将计算机名称保存到一个字符串变量中,然后使用 Replace 方法以空字符串替换反斜线,如下所 示:
PowerShell使用教程
PowerShell使⽤教程1、打开powershell 不说了2、获取帮助: get-help (所有命令都是cmdlet格式,help也不例外)3、查看有哪些命令: get-command (可看到命令类型有:Alias别名、Cmdlet命令、Function函数)4、查看以 get开头的命令: get-command get-*5、查看get-process命令的⽤法: get-help get-process6、⽤get-process查找进程notepad :get-process -name *notepad* (当前,你得先打开⼀个记事本notepad.exe)7、获取stop-process在线帮助: get-help stop-process -Online8、⽤stop-process杀除进程notepad:Stop-Process -Name "notepad"想想还能⼲什么9、下载⽂件$webRequest = [.HttpWebRequest]::Create("/fwlink/?LinkID=149156")$webRequest.Method = "GET";$erAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"$response = $webRequest.GetResponse()$stream = $response.GetResponseStream()$reader = New-Object System.IO.BinaryReader($stream)$bytes = New-Object System.Byte[] $response.ContentLengthfor ($read = 0; $read -ne $bytes.Length; $read += $reader.Read($bytes,$read,$bytes.Length - $read) ){ }[System.IO.File]::WriteAllBytes("c:tempSilverLight.exe",$bytes);将上述代码copy到powershell 后,下载到哪⼉了?执⾏pwd 显⽰c:\users\⽤户名到这个⽬录下找到了tempSilverLight.exe (原来在原代码中c:少了\,但容错能⼒很强,呵呵)10、下载并安装MICROSOFT® REPORT VIEWER 2015 RUNTIME#添加程序集Add-Type -AssemblyName System.IOAdd-Type -AssemblyName pressionAdd-Type -AssemblyName pression.FileSystem#下载地址$DownloadUrl = "https:///download/A/1/2/A129F694-233C-4C7C-860F-F73139CF2E01/ENU/x86/ReportViewer.msi"#下载到Temp⽬录$TempPath = $env:TEMP#下载的⽂件名$FileName = "ReportViewer.msi"#存储的完整⽂件路径$FullPath = "$TempPath\$FileName"#Download$client = New-Object .WebClient"Now is downloading MICROSOFT® REPORT VIEWER 2015 RUNTIME"$client.DownloadFile($DownloadUrl, $FullPath)"Download success"#Installmsiexec.exe /i $FullPath /qr"Press any key to exit"Read-Host11、卸载MICROSOFT® REPORT VIEWER 2015 RUNTIMEmsiexec.exe /x "{3ECE8FC7-7020-4756-A71C-C345D4725B77}" /qr可以指定msi安装包,也可以指定ProductCode,可以访问从注册表以下位置查找ProductCode。
powershell命令教程
powershell命令教程 1启动 powershell23#字符串操作4对象操作"hello".Length567#进程操作8 PS C:\> notepad9 PS C:\> $process=get-process notepad10 PS C:\> $process.Kill()111213#默认对象操作14 PS C:\> 40GB/650MB15 63.01538461538461617#时间操作18 PS C:\> [DateTime]"2009-12-5" - [DateTime]::Now19 Days : -5820 Hours : -1421 Minutes : -5322 Seconds : -5823 Milliseconds : -51024 Ticks : -5064838510531425 TotalDays : -58.620816094113426 TotalHours : -1406.8995862587227 TotalMinutes : -84413.975175523328 TotalSeconds : -5064838.510531429 TotalMilliseconds : -5064838510.53143031#时间对象操作32 PS C:\> $result = [DateTime]"2009-12-5" - [DateTime]::Now33 PS C:\> $result.TotalDays34 -58.6213450248299353637#查询今天星期⼏38 PS C:\Users\vv> $date=Get-Date39 PS C:\Users\vv> $date.DayOfWeek40Monday414243#查找powershell命令中包含单词process的命令44 PS C:\> Get-Command *process*45CommandType Name Definition46 ----------- ---- ----------47 Application api-ms-win-core-processenvir... C:\Windows\system32\api-ms-w...48 Application api-ms-win-core-processthrea... C:\Windows\system32\api-ms-w...49 Cmdlet Debug-Process Debug-Process [-Name] <Strin...50 Cmdlet Get-Process Get-Process [[-Name] <String...51 Application microsoft-windows-kernel-pro... C:\Windows\system32\microsof...52Application qprocess.exe C:\Windows\system32\qprocess...53 Cmdlet Start-Process Start-Process [-FilePath] <S...54 Cmdlet Stop-Process Stop-Process [-Id] <Int32[]>...55 Cmdlet Wait-Process Wait-Process [-Name] <String...565758#检索donet中对象的属性和⽅法59 PS C:\> "aaa" | Get-Member6061 TypeName: System.String6263Name MemberType Definition64 ---- ---------- ----------65Clone Method System.Object Clone()66CompareTo Method int CompareTo(System.Object value), i...67Contains Method bool Contains(string value)68CopyTo Method System.Void CopyTo(int sourceIndex, c...69 EndsWith Method bool EndsWith(string value), bool End...70Equals Method bool Equals(System.Object obj), bool ...71GetEnumerator Method System.CharEnumerator GetEnumerator()72GetHashCode Method int GetHashCode()73GetType Method type GetType()74GetTypeCode Method System.TypeCode GetTypeCode()75IndexOf Method int IndexOf(char value), int IndexOf(...76IndexOfAny Method int IndexOfAny(char[] anyOf), int Ind...77Insert Method string Insert(int startIndex, string ...78IsNormalized Method bool IsNormalized(), bool IsNormalize...79LastIndexOf Method int LastIndexOf(char value), int Last...80LastIndexOfAny Method int LastIndexOfAny(char[] anyOf), int...81...828384#统计所有正在运⾏的进程的句柄数85 PS C:\> $handleCount=086 PS C:\> foreach($process in Get-process) { $handleCount +=$process.Handles }87 PS C:\> $handleCount88 233188990#直接调⽤donet对象,获取⽹页内容91 PS C:\> $webClient = New-Object .WebClient92 PS C:\> $content = $webClient.DownloadString("")93 PS C:\> $content.Substring(0,1000)94 <html><head><meta http-equiv=Content-Type content="text/html;charset=gb2312"><t95 itle>百度⼀下,你就知道 </title><style>body{margin:4px 0}p{margin:0;paddin96 g:0}img{border:0}td,p,#u{font-size:12px}#b,#u,#l td,a{font-family:arial}#kw{fon97 t:16px Verdana;height:1.78em;padding-top:2px}#b{height:30px;padding-top:4px}#b, 98#b a{color:#77c}#u{padding-right:10px;line-height:19px;text-align:right;margin:99 0 0 3px !important;margin:0 0 10px}#sb{height:2em;width:5.6em}#km{height:50px}# 100 l{margin:0 0 5px 38px}#l td{padding-left:107px}p,table{width:650px;border:0}#l101 td,#sb,#km{font-size:14px}#l a,#l b{margin-right:1.14em}a{color:#00c}a:active{c102 olor:#f60}#hp{position:absolute;margin-left:6px}#lg{margin:-26px 0 -44px}#lk{wi103 dth:auto;line-height:18px;vertical-align:top}form{position:relative;z-index:9}<104 /style></head>105 <body><div id=u><a href=/?login&tpl=mn>登录</a></div>< 106 center><img src=/img/baidu_logo.gif width=270 height=129 us 107 emap="#mp" id=lg><br><br><br><br><table cellpadd108109110#获取系统信息111 PS C:\> Get-WmiObject Win32_Bios112113SMBIOSBIOSVersion : 2TKT00AUS114Manufacturer : LENOVO115 Name : Default System BIOS116 SerialNumber : 1111111117 Version : LENOVO - 5000821118119120#导航⽂件系统121 PS C:\> Set-Location c:\122 PS C:\> Get-ChildItem123124125⽬录: C:\126127128Mode LastWriteTime Length Name129 ---- ------------- ------ ----130 d---- 2010/1/7 14:20 bea131 d---- 2010/1/7 14:20 BEA WebLogic E-Business Platform132 d---- 2009/12/7 13:02 dzh133 d---- 2010/1/2 15:48 his134 d---- 2009/7/14 10:37 PerfLogs135 d-r-- 2010/1/25 12:58 Program Files136 d-r-- 2009/12/31 19:11 Users137 d---- 2009/11/7 9:52 usr138 d---- 2010/1/28 3:16 Windows139 -a--- 2009/6/11 5:42 24 autoexec.bat140 -a--- 2009/6/11 5:42 10 config.sys141 -a--- 2009/10/28 13:37 454656 putty.exe142143144#导航注册表145 PS C:\> Set-Location HKCU:\Software\Microsoft\Windows\146 PS HKCU:\Software\Microsoft\Windows\> Get-ChildItem147148149 Hive: HKEY_CURRENT_USER\Software\Microsoft\Windows150151152SKC VC Name Property153 --- -- ---- --------154 33 0 CurrentVersion {}155 0 11 DWM {Composition, CompositionPolicy, Colo...156 3 0 Shell {}157 1 0 ShellNoRoam {}158 2 0 TabletPC {}159 3 12 Windows Error Reporting {ConfigureArchive, DisableArchive, Di...160161162#导航证书163 PS C:\Users\vv> Set-Location cert:\CurrentUser\Root164 PS cert:\CurrentUser\Root> Get-ChildItem165166167⽬录: Microsoft.PowerShell.Security\Certificate::CurrentUser\Root168169170Thumbprint Subject171 ---------- -------172 CDD4EEAE6000AC7F40C3802C171E30148030C072 CN=Microsoft Root Certificate Auth...173 BE36A4562FB2EE05DBB3D32323ADF445084ED656 CN=Thawte Timestamping CA, OU=Thaw... 174 A7217F919843199C958C128449DD52D2723B0A8A CN= Corporation Root CA... 175 A43489159A520F0D93D032CCAF37E7FE20A8B419 CN=Microsoft Root Authority, OU=Mi...176 7F88CD7223F3C813818C994614A89C99FA3B5247 CN=Microsoft Authenticode(tm) Root...177 742C3192E607E424EB4549542BE1BBC53E6174E2 OU=Class 3 Public Primary Certific...178 654E9FADD2032AE1B87D6263AF04FD7FEE38D57C CN=iTruschina CN Root CA-3, OU=Chi... 179 46F168AF009C28C18F452EB85F5E8747892B3C8B CN=iTruschina CN Root CA-2, OU=Chi... 180 245C97DF7514E7CF2DF8BE72AE957B9E04741E85 OU=Copyright (c) 1997 Microsoft Co...181 240A61A2577970625B9F0B81283C4AA4037217B1 CN=iTruschina CN Root CA-1, OU=Chi... 182 18F7C1FCC3090203FD5BAA2F861A754976C8DD25 OU="NO LIABILITY ACCEPTED, (c)97 V (183)184185#显⽰所有进程186PS C:\Users\vv> Get-Process187188Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName189------- ------ ----- ----- ----- ------ -- -----------190 527 28 40784 44864 243 18.94 4956 360SE191 537 29 49144 59340 248 9.09 5276 360SE192 924 20 17580 2504 132 3768 360tray193 160 5 16080 7852 41 2036 audiodg194 318 24 6524 7008 124 188 CCProxy195 56 5 796 288 33 1232 CNAB4RPK196 61 4 1568 6916 63 0.19 5064 conhost197 60 4 1532 3628 63 0.06 5584 conhost198 645 6 2076 1204 72 380 csrss199 649 9 8148 11056 185 440 csrss200......201202203#搜索所有包含Get动词的命令204PS C:\Users\vv> Get-Command -Verb Get205206CommandType Name Definition207----------- ---- ----------208Cmdlet Get-Acl Get-Acl [[-Path] <String[]>]...209Cmdlet Get-Alias Get-Alias [[-Name] <String[]...210Cmdlet Get-AuthenticodeSignature Get-AuthenticodeSignature [-...211Cmdlet Get-ChildItem Get-ChildItem [[-Path] <Stri...212Cmdlet Get-Command Get-Command [[-ArgumentList]...213Cmdlet Get-ComputerRestorePoint Get-ComputerRestorePoint [[-... 214......215216217#帮助218PS C:\Users\vv> Get-Help Get-Verb -Full/-Detailed/-Examples219220221#调⽤powershell脚本222PowerShell "& 'C:\get-report.ps1' arguments"223224225#循环226PS C:\Users\vv> 1..10 | % {"aaa"}227aaa228aaa229aaa230aaa231aaa232aaa233aaa234aaa235aaa236aaa237238239#数据加密(Base64)240PS C:\Users\vv> $bytes=[System.Text.Encoding]::Unicode.GetBytes("aaa") 241PS C:\Users\vv> $encodedString=[Convert]::ToBase64String($bytes)242PS C:\Users\vv> $encodedString243YQBhAGEA244245246#检查命令是否执⾏成功247PS C:\Users\vv> $lastExitCode2480249PS C:\Users\vv> $?250True251252253#性能测试,计算⼀个命令执⾏的时间254PS C:\Users\vv> Measure-Command { Start-Sleep -Milliseconds 337 }255Days : 0256Hours : 0257Minutes : 0258Seconds : 0259Milliseconds : 340260Ticks : 3404713261TotalDays : 3.9406400462963E-06262TotalHours : 9.45753611111111E-05263TotalMinutes : 0.00567452166666667264TotalSeconds : 0.3404713265TotalMilliseconds : 340.4713266267268#foreach 循环269foreach($alias in Get-Alias){270 $alias271}272273274#显⽰为表格275PS C:\Users\vv> Get-Process | Format-Table Name,WS -Auto276277278#复制⽂件279Copy-Item c:\temp\*.txt c:\temp\backup\ -verbose280281282#列出所有已经停⽌的服务283PS C:\Users\vv> Get-Service | Where-Object { $_.Status -eq "Stopped" }284#列出当前位置的所有⼦⽬录285PS C:\Users\vv> Get-ChildItem | Where-Object { $_.PsIsContainer }286287288#循环289PS C:\Users\vv> 1..10 | Foreach-Object { $_ * 2 }290291292#获取正在运⾏的记事本程序的进程列表,然后等待他们退出293PS C:\Users\vv> $notepadProcesses = Get-Process notepad294PS C:\Users\vv> $notepadProcesses | Foreach-Object { $_.WaitForExit() }295296#其它循环关键字297for foreach do while298299300#从管道中选择接收值301PS C:\Users\vv> dir | Select Name302303304#释放变量占⽤的内存空间305$processes = $null306307308#显⽰所有变量309PS C:\> dir variable:\310311PS C:\> dir variable:\s*312313#显⽰⽂件内容314PS C:\> ${c:\autoexec.bat}315316#变量范围317$Global:myVariable1 = value1318$Script:myVariable2 = value2319$Local:myVariable3 = value3320321322#静态⽅法调⽤ donet323PS C:\> [System.Diagnostics.Process]::GetProcessById(0)324325Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName326------- ------ ----- ----- ----- ------ -- -----------327 0 0 0 24 0 0 Idle328329330Get-Process Notepad331#Get-Process 代替 System.Diagnostics.Process332333$process.WaitForExit() #暂停直到结束334335Get-Date 等同于 [System.DateTime]::Now336337#创建对象338PS C:\> $generator = New-Object System.Random339PS C:\> $generator.NextDouble()3400.121309703738107341342PS C:\> (New-Object Net.WebClient).DownloadString("")343344#先加载库⽂件345PS C:\> [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")346GAC Version Location347--- ------- --------348True v2.0.50727 C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.... 349#创建后保存350PS C:\> $image = New-Object System.Drawing.Bitmap source.gif351PS C:\> $image.Save("source_1.jpg","JPEG")352353354PS C:\> [Reflection.Assembly]::LoadWithPartialName("System.Web")355GAC Version Location356--- ------- --------357True v2.0.50727 C:\Windows\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7...358359PS C:\> [Web.HttpUtility]::UrlEncode("")360http%3a%2f%361362363#缩短类名364PS C:\> $math=[System.Math]365PS C:\> $math::Min(1,10)3661367368#调⽤COM组件369$sapi = New-Object -Com Sapi.SpVoice370$sapi.rate=0371$sapi.Speak("⼀直以为...只要隐着⾝,就没有美⼥认得出我是帅哥!但是...我错了,像我这样拉风的男⼈,就好⽐那暗夜⾥的萤⽕⾍,⽥地⾥的⾦龟⼦,是那样的鲜372373374#获取对象类型375$date = Get-Date376$date.GetType().ToString()377378379#正则表达式匹配380PS C:\Users\vv> "Hello World" -match "Hello"381True382383#条件运算符384PS C:\Users\vv> $data = "Hello World"385($data -like "*llo w*") -and ($data.Length -gt 10)386True387388#逻辑运算关键字389-eq -ne -ge -lt -le -like -notlike -match -notmatch -contains -notcontains -is isnot390391392#条件语句393if elseif else394395$a=20396switch($a)397{398 {$_ -lt 32} {"aaaa";break}399 32 {"bbb";break}400 default {"ccc"}401}402403#循环404#for foreach while do foreach-object405foreach($file in dir){406"File length:"+$file.Length407}408409#暂停或延迟410Read-Host "Press ENTER"411Start-Sleep 2412Start-Sleep -Milliseconds 300413414415#字符串使⽤单引号表⽰原⽣字符串,不⽀持变量扩展或转义字符416$myString = 'Hello World'417418#多⾏字符串419$myString = @"420This is the first line,421This is the second line.422"@423424#多⾏注释425##This is a regular comment426$null=@"427function MyTest{428"aaaaaaaaaaaa"429}430"@431#变量$null告诉PowerShell不必为后续的使⽤⽽继续保留信息了432433#转义字符 ` (不使⽤反斜杠)434PS C:\Users\vv> $myString = "Report for today `n---------"435$myString436Report for today437---------438439#字符串变量440PS C:\Users\vv> $header = "Report for today"441$myString = "$header `n$('-'*$header.Length)"442$myString443444Report for today445----------------446447#格式化输出右对齐8个字符,格式为4为数字,:C表⽰货币形式 -f String.Format() 448PS C:\Users\vv> $formatString = "{0,8:D4} {1:C}`n"449$report = "Quantity Price`n"450$report += "--------------`n"451$report += $formatString -f 50,2.5677452$report += $formatString -f 3,7453$report454Quantity Price455--------------456 0050 ¥2.57457 0003 ¥7.00458459#字符串⽅法460PS C:\Users\vv> "abc".IndexOf("b")4611462463PS C:\Users\vv> "abc".Contains("b")464True465466#$helpContent 得到的是⼀个对像,⽽不是字符串467$helpContent = Get-Help Get-ChildItem468$helpContent -match "location"469False470471$472Get-ChildItem473474#得到字符串使⽤下⾯的⽅式475$helpContent = Get-Help Get-ChildItem | Out-String476$helpContent -match "location"477True478479"Hello World".Replace("World","PowerShell")480Hello PowerShell481482#replace ⾼级⽤法483"Hello World" -replace '(.*) (.*)','$2 $1'484World Hello485486"Hello World".ToUpper()487HELLO WORLD488"Hello World".ToLower()489hello world490491#⾸字符⼤写492$text = "hello"493$newText = $text.Substring(0,1).ToUpper()+$text.Substring(1)494495"Hello World".Trim()496497#从字符串尾部取出字符498"Hello World".TrimEnd('w','d',' ');499500#格式化⽇期501$date = [DateTime]::now502$date.ToString("dd-MM-yyyy")503504#⽇期⽐较505$dueDate = [DateTime] "01/01/2008"506if([DateTime]::Now -gt $dueDate)507{508"Account is now due"509}510511512#字符串合并⽤ append513Measure-Command{514 $output = New-Object Text.StringBuilder515 1..10000 |516 Foreach-Object { $output.Append("Hello World") } 517}518Days : 0519Hours : 0520Minutes : 0521Seconds : 1522Milliseconds : 696523Ticks : 16965372524TotalDays : 1.96358472222222E-05525TotalHours : 0.000471260333333333526TotalMinutes : 0.02827562527TotalSeconds : 1.6965372528TotalMilliseconds : 1696.5372529530Measure-Command{531 $output =""532 1..10000 |533 Foreach-Object { $output+="Hello World" } 534}535Days : 0536Hours : 0537Minutes : 0538Seconds : 5539Milliseconds : 453540Ticks : 54531118541TotalDays : 6.31147199074074E-05542TotalHours : 0.00151475327777778543TotalMinutes : 0.0908851966666667544TotalSeconds : 5.4531118545TotalMilliseconds : 5453.1118546547548#数学计算549$result = [int](3/2)550$result5512552553#截断554$result=3/2555[Math]::Truncate($result)5561557558function trunc($number){559 [Math]::Truncate($number)560}561$result=3/2562trunc $result5631564565[Math]::Abs(-10.6)566[Math]::Pow(123,2)567[Math]::Sqrt(100)568[Math]::Sin([Math]::PI /2)569[Math]::ASin(1)570571#⽴⽅根572function root($number,$root){ [Math]::Exp($([Math]::Log($number)/$root))} 573root 64 35744575576#统计5771..10 | Measure-Object -Average -Sum578579Count : 10580Average : 5.5581Sum : 55582Maximum :583Minimum :584Property :585586Get-ChildItem > output.txt587Get-COntent output.txt | Measure-Object -Character -Word -Line588589 Lines Words Characters Property 590 ----- ----- ---------- --------591 28 117 2638592593#从⽂件列表中取得LastWriteTime的平均值594$times = dir | Foreach-Object { $_.LastWriteTime }595$results = $times | Measure-Object Ticks -Average596New-Object DateTime $results.Average5975982009年12⽉11⽇ 21:27:09599600601#16进制数602$hexNumber = 0x1234603$hexNumber6044660605606#16进制转 2进制607[Convert]::ToString(12341,2)60811000000110101609610#2进制转10进制611[Convert]::ToInt32("11000000110101",2)61212341613614#修改⽂件属性,并查询615$archive = [System.IO.FileAttributes] "Archive"616attrib +a test.txt617Get-ChildItem | Where { $_.Attributes -band $archive } | Select Name618619620#⽂件加密621(Get-Item output.txt).Encrypt()622#⽂件解密623(Get-Item output.txt).Decrypt()624625#设置⽂件属性626(Get-Item output.txt).IsReadOnly627True628(Get-Item output.txt).IsReadOnly = $false629(Get-Item output.txt).IsReadOnly630False631632633#枚举⽂件可能的属性634[Enum]::GetNames([System.IO.FileAttributes])635ReadOnly636Hidden637System638Directory639Archive640Device641Normal642Temporary643SparseFile644ReparsePoint645Compressed646Offline647NotContentIndexed648Encrypted649650651[int] (Get-Item output.txt).Attributes65232653654#⽂件属性的表⽰形式655$attributes = [Enum]::GetValues([System.IO.FileAttributes])656$attributes | Select-Object `657 @{"Name"="Property";"Expression"={ $_ }},658 @{"Name"="Integer";"Expression"={ [int]$_ }},659 @{"Name"="Hexadecimal";"Expression"={ [Convert]::ToString([int] $_,16)}}, 660 @{"Name"="Binary";"Expression"={ [Convert]::ToString([int] $_,2)}} |661 Format-Table -auto662663 Property Integer Hexadecimal Binary664 -------- ------- ----------- ------665 ReadOnly 1 1 1666 Hidden 2 2 10667 System 4 4 100668 Directory 16 10 10000669 Archive 32 20 100000670 Device 64 40 1000000671 Normal 128 80 10000000672 Temporary 256 100 100000000673 SparseFile 512 200 1000000000674 ReparsePoint 1024 400 10000000000675 Compressed 2048 800 100000000000676 Offline 4096 1000 1000000000000677NotContentIndexed 8192 2000 10000000000000678 Encrypted 16384 4000 100000000000000679680681#判断⽂件属性682$encrypted=16384683$attributes = (Get-Item output.txt -force).Attributes684($attributes -band $encrypted) -eq $encrypted685False686687688#读取⽂件内容689$content = Get-Content c:\file.txt690$content = ${c:\file.txt}691$content = [System.IO.File]::ReadAllText("c:\file.txt")692693#搜索⽂件⽂本694Select-String -Simple "aaa" file.txt695Select-String "\(...\) ...-..." phone.txt696697Get-ChildItem -Filter *.txt -Recurse | Select-String pattern698699700#获取被补丁修改的⽂件列表701cd $env:WINDIR702$parseExpression = "(.*): Destination:(.*) \((.*)\)"703$files = dir kb*.log -Exclude *uninst.log704$logContent = $files | Get-Content | Select-String $parseExpression705$logContent706707#移动⽂件,删除⽂件708$filename = [System.IO.Path]::GetTempFileName()709$newname = [System.IO.Path]::ChangeExtension($filename,".cs")710Move-Item $filename $newname711Remove-Item $newname712713714#内容写⼊到⽂件715$filename = "output.txt"716$content = Get-Content $filename717$content = "hellohello"718$content | Set-Content $filename719720721#xml⽂件722$xml = [xml] (Get-Content powershell_blog.xml)723$xml.rss724($xml.rss.channel.item).Count725($xml.rss.channel.item)[0].title726$xml.rss.channel.item | Sort-Object title | Select-Object title727728#XPath查询729#查询所有少于20个字符的标题730$xml = [xml] (Get-Content powershell_blog.xml)731$query = "/rss/chanel/item[string-length(title) < 20]/title"732$xml.SelectNodes($query)733734#修改xml735$filename = (Get-Item phone.xml).FullName736Get-Content $fileName737$phoneBook = [xml](Get-Content $fileName)738$person = $phoneBook.AddressBook.Person[0]739$person.Phone[0]."#text" = "555-1214"740$person.Phone[0].type="mobile"741$newNumber = [xml]'<Phone type="home">555-1215</Phone>'742$newNode = $phoneBook.ImportNode($newNumber.Phone,$true) 743 [void] $person.AppendChild($newNode)744$phoneBook.save($filename)745 Get-Content $filename746747748749#Internet 脚本750#下载⼀个⽂件 (参数错误?)751$source = "/images/0809/logo1.png"752$destination = "c:\logo1.png"753$wc = New-Object .WebClient754$wc.DownloadFile($source,$destination)755756#下载⼀个Web页⾯757$source = "/powershell/rss.xml"758$wc = New-Object .WebClient759$content = $wc.DownloadString($source)760761#输出格式为Html 创建⼀个PowerShell命令的概要762$filename = "c:\PowerShell.html"763$commands = Get-Command | Where { $_.CommandType -ne"Alias" } 764$summary = $commands | Get-Help | Select Name,Synopsis765$summary | ConvertTo-Html | Set-Content $filename766767#脚本块768function MultiplyInpuByTwo769{770process771 {772$_ * 2773 }774}775776 1,2,3 | MultiplyInpuByTwo777 2778 4779 6780781#从脚本块返回数据782function GetDate783{784 Get-Date785}786$tomorrow = (GetDate).AddDays(1)787788789790791792#数组793$myArray = 1,2,"aaa"794$myArray795 1796 2797aaa798799#数组基本操作800$collection = New-Object System.Collections.ArrayList801$collection.Add("Hello")802 [void]$collection.Add("Hello")803 [void]$collection.AddRange{("a","b")}804$collection.RemoveAt(1)805806$myArray = New-Object string[] 10807$myArray[5]="bbb"808809810$myArray = Get-Process811$myArray812813Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName 814 ------- ------ ----- ----- ----- ------ -- -----------815 851 38 69204 101888 338 137.36 5012 360SE816 532 30 42192 42316 271 54.19 5864 360SE817 965 19 17784 2192 132 3768 360tray818 134 5 15516 12864 41 3612 audiodg819 314 21 6796 5228 127 188 CCProxy820 56 5 796 304 33 1232 CNAB4RPK821 61 4 1532 1312 63 0.09 5436 conhost822......823824825$myArray = @(Get-Process Explorer)826$myArray827828Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName 829 ------- ------ ----- ----- ----- ------ -- -----------830 1085 42 52080 98140 300 164.77 2256 explorer831832833834$a = @(835 (1,2,3,4),836 (5,6,7,8)837)838$a[0][1]839 2840841$myArray = 1,2,3842$myArray[1..3 + 0]843 2844 3845 1846847#访问数组中的每⼀个元素848$myArray = 1,2,3849$sum = 0850$myArray | Foreach-Object {$sum+=$_}851$sum852 6853854#访问数组中的每⼀个元素,更脚本化855$myArray = 1,2,3856$sum=0857foreach($element in$myArray){$sum+=$element}858$sum859 6860861#数组列表排序862 Get-ChildItem | Sort-Object -Descending Length | Select Name, Length 863864#检查数组列表是否包含指定的项865"Hello","World"-contains"Hello"866867#合并数组868$array = 1,2869$array += 3,4870871#数组查询872$array = "Item1","Item2","Item3","Item4","Item15"873$array-eq"Item1"#Item1874$array-like"*2*"#Item2875$array-match"Item.."#Item15876$array-ne"Item1"#Item2 Item3 Item4 Item15877$array-notlike"*1*"#Item2 Item3 Item4878$array-notmatch"Item.."#Item1 Item2 Item3 Item4879880881#哈希表 ,哈希表不保存顺序,可⽤ Sort 排序882$myHashtable = @{}883$myHashtable = @{key1="value1";key2=1,2,3}884$myHashtable["NewItem"]=5885foreach($item in$myHashtable.GetEnumerator() | Sort Name)886{887$item.value888}889890891#参数892function Reverse893{894$srgsEnd = $args.Length - 1895$args[$srgsEnd..0]896}897 Reverse 1,2,3,4898899900#⽤户交互901#读取⽤户输⼊⼀⾏902$directory = Read-Host "Enter a directory name:"903$directory904905#读取⽤户输⼊的键906$key = [Console]::ReadKey($true)907$key908909$key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")910911#环境变量912913#查看914$env:username915916#完整⽅式917 Get-Content Env:\Username918919920#查看所有变量921dir env:922923Name Value924 ---- -----925ALLUSERSPROFILE C:\ProgramData926 ANT_HOME D:\J2EE\apache-ant-1.7.0927APPDATA C:\Users\vv\AppData\Roaming928 CLASSPATH .\;D:\Design\J2EE\jdk1.6.0_10\lib\tools.jar 929CommonProgramFiles C:\Program Files\Common Files 930 COMPUTERNAME VV-PC931ComSpec C:\Windows\system32\cmd.exe932FP_NO_HOST_CHECK NO933HOMEDRIVE C:934HOMEPATH \Users\vv935 JAVA_HOME D:\Design\J2EE\jdk1.6.0_10936......937938#设置环境变量(永久)939$oldPersonalPath = ";d:\tools"940 [Environment]::SetEnvironmentVariable("Path",$oldPersonalPath,"User")941 [Environment]::GetEnvironmentVariable("Path","User") #;d:\tools942943944#阅读 rss945$sapi = New-Object -Com Sapi.SpVoice946$WebClient = New-Object .WebClient947$WebClient.Encoding=[System.Text.Encoding]::UTF8948$rss = [XML]($WebClient.DownloadString("/zixun/rss_fyzx.xml")) 949foreach($item in$rss.rss.channel.Item){950$title = $item.title951#$title = $item.title.InnerText952$content = $item.description953#$content = $item.description.InnerText954#$content = $item.description.InnerText.Replace(" ","")955$title956$sapi.Speak($title+"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PowerShell基础教程PowerShell 开发代号为Monad,是支持Windows XP/Server 2003/Vista/Server 2008操作系统的脚本语言。
包括Cmd.exe 、SH、KSH、CSH以及BASH Unix在内的大多数外壳程序的操作方式都是在新的进程中执行命令或实用工具程序,并以文本格式向用户显示结果。
多年以来,许多文本处理实用工具程序,如sed、AWK 和PERL,都已逐渐发展为支持这种交互模式。
这些外壳程序也会提供内置于外壳程序中并在外壳程序处理器中执行的命令,例如KSH 中的typeset命令和以及 Cmd.exe 中的dir命令。
在大多数外壳程序中,由于内置命令数量少,从而导致许多实用工具程序应运而生。
针对这一点,Windows PowerShell 有不同的做法。
◆ Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象;◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口;◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用不同的剖析器,这项特点会使你更容易学会每种命令的使用方式。
其中最棒的就是你完全不需要舍弃已使用习惯的工具,你可以继续在Windows PowerShell 中使用诸如Net、SC 和 Reg.exe 等传统的 Windows 工具。
Windows PowerShell CmdletCmdlet (发音如“command-let”) 是指在 Windows PowerShell 中用来操作对象的单一功能命令。
你可以依据其名称格式来加以辨识Cmdlet -- 以破折号 (-) 分隔的动词和名词,例如Get-Help、Get-Process 和 Start-Service。
在传统的外壳程序中,命令是极为简单 (例如 attrib.exe) 到极为复杂 (例如 netsh.exe) 范围内的可执行程序。
在 Windows PowerShell 中,大多数Cmdlet都相当简单,而且设计成与其他Cmdlet结合使用。
例如,"get" Cmdlet只提取数据,"set" Cmdlet只创建或修改数据,"format" Cmdlet只格式化数据,而 "out" Cmdlet只将输出导向到指定的目的地。
每种Cmdlet都具备可在输入下列命令时加以显示的说明文件:get-help <cmdlet名称> -detailedCmdlet说明文件包括了该Cmdlet的描述、命令语法、参数的描述以及示范该Cmdlet的使用范例。
全新的脚本语言Windows PowerShell 由于下列原因使用其特有的语言,而不沿用既有的任何语言。
◆Windows PowerShell 必须拥有可管理.NET对象的语言。
◆这种语言必须提供使用Cmdlet的一致环境。
◆这种语言必须支持复杂的工作,而且不能让简单工作变得复杂。
◆这种语言必须与进行 .NET 程序设计时所使用的高级语言(例如C#) 达成一致性。
Windows 命令和实用工具程序你可以在 Windows PowerShell 中执行 Windows 命令行程序,而且可以在外壳程序中启动具有图形用户界面的 Windows 程序,例如记事本和计算器。
你也可以提取程序所产生的文本,然后用与在使用 Cmd.exe 时的相同方式在此外壳程序中使用该段文本。
处理对象也许开始时你可能并未察觉到,当你在 Windows PowerShell 中执行工作时,实际上是在使用 .NET 对象。
随着你的经验的不断累积,以及对象处理的效果更加明显,你将发现其实自己是在使用对象,甚至最后以对象为思考依据。
从技术上来看,.NET 对象是由数据以及与该数据关联的作业所组成的 .NET 类型例项。
不过,你可以将对象当作拥有属性 (类似特性) 和方法 (可以针对对象执行的动作) 的数据实体。
例如,当你在 Windows PowerShell 中取得服务时,实际上你所取得的是代表该项服务的对象。
当你在查看服务的相关信息时,你是在查看其服务对象的属性。
同样地,当你启动服务时,也就是当你将该项服务的 Status 属性修改为"started" 时,你正在使用该项服务对象的方法。
所有相同类型的对象都会具有相同的属性和方法,不过,对象的每个实例属性值可以各不相同。
例如,每个服务对象都具有 Name 和 Status 属性。
不过,各个服务可以拥有不同的名称和状态。
了解这些概念之后,这些对象就不难理解。
若要找出Cmdlet会取得哪种对象类型,请使用管道运算符 (|) 将 "get" 命令的结果传送到Get-Member 命令。
例如,下列命令会将 Get-Service 命令所提取的对象传送Get-Member。
get-service | get-memberGet-Member 会显示该服务对象的相关信息,其中包括对象的Typename,以及包含此对象属性和方法的列表。
TypeName: System.ServiceProcess.ServiceControllerName MemberType Definition---- ---------- ----------Name AliasProperty Name = ServiceNameadd_Disposed Method System.Voidadd_Disposed(EventHandler value)Close Method System.VoidClose()Continue Method System.VoidContinue()如需取得对象类型的相关信息,请复制和粘贴Typename (例如,System.ServiceProcess.ServiceController) 到 MSDN 中。
当找到类型时,你就可以读取相关 MSDN 子主题来认识以该类型为基础的对象的属性和方法,例如出现在Windows PowerShell 中的对象。
若要找出特定对象的所有属性值,请使用管道运算符 (|) 将 "get" 命令的结果传送到 Format-List 或是 Format-Table 命令。
请配合所有 (*) 的值来使用这些Format cmdlet的 Property 参数。
例如,若要找出系统中 Schedule 服务的所有属性,请输入:get-service schedule | format-list -property下面内容显示结果范例。
Name : ScheduleCanPauseAndContinue : TrueCanShutdown : TrueCanStop : TrueDisplayName : Task SchedulerDependentServices : {}MachineName : .ServiceName : ScheduleServicesDependedOn : {RpcSs}ServiceHandle : SafeServiceHandleStatus : RunningServiceType : Win32ShareProcessSite :Container :如果是第一次接触 Windows PowerShell,你还不需要熟知对象的每个细节,但是要对这个概念略有印象,因为你很快就能够应用这类对象来发挥其最大效益。
对象管道使用对象的最大优点就是可以让命令更容易通过管道进行传递,也就是将某个命令的输出传递为另一个命令的输入。
这种通信经常必须通过字符串操作将某种格式的输出转换成另一种格式,以及移除标题和栏标题。
Windows PowerShell 会提供以对象为基础 (而非以文本) 的全新互动模式,负责接收对象的cmdlet,可以直接处理对象的属性和方法,而不需要进行任何转换或操作。
用户可以依据名称引用对象的属性和方法,而不是计算数据在输出中的位置。
在下面的范例中,IpConfig命令的结果会传递给Findstr命令。
管道运算符 (|) 会将位于此命令左边的结果传递到命令的右边。
在Microsoft® Windows® PowerShell 中,你并不需要操作字符串或计算数据位移。
PS>ipconfig | findstr "Address"IP Address. . . . . . . . . . . . : 172.28.21.5IP Address. . . . . . . . . . . . : 172.30.160.225交互式环境与其他外壳程序一样,Windows PowerShell 支持完全交互式环境。
在提示符下键入命令后,将处理该命令并在外壳程序窗口中显示输出。
可以将命令输出发送到文件或打印机,也可以使用管道运算符 (|) 将输出发送到其他命令。
对脚本的支持如果重复运行特定的命令或命令序列,或者如果开发一系列命令来执行复杂的任务,则会希望在文件中保存命令并执行命令文件,而不是在提示符下键入命令。
保存有命令的文件称为脚本。
<o:p></o:p>Windows PowerShell 除了提供交互式界面外,还完全支持脚本。
在 Windows PowerShell 中,脚本文件的文件扩展名为.ps1。
若要运行脚本,请在命令提示符下键入该脚本的名称。
文件扩展名是可选的。
例如:或即使脚本在当前目录中,也必须指定脚本文件的完全限定路径。
若要指示当前目录,请键入目录名称或使用点 (.) 表示当前目录。
例如:虽然脚本在一些企业中非常有用 -- 甚至是必需的,但是它们可以用于传播恶意代码。
因此,Windows PowerShell 中的安全策略(称为执行策略)允许您确定脚本是否可以运行,以及它们是否必须包括数字签名。
为了消除明显的风险,Windows PowerShell 中的执行策略都不允许通过双击脚本的图标来运行它。
有关详细信息,请键入:Windows PowerShell 还包括一种非常丰富的脚本语言,使用该语言可以创建从最简单到非常复杂的脚本。
它支持用于循环、条件、流控制和变量赋值的语言结构。
若要从“开始”菜单启动Windows PowerShell,请依次单击“开始”、“所有程序”、Windows PowerShell 1.0和Windows PowerShell。
若要从“运行”框启动Windows PowerShell,请单击“开始”,再单击“运行”,然后键入:若要从命令提示符(cmd.exe) 窗口启动Windows PowerShell,请在命令提示符下键入:<o:p></o:p>若要查看用于启动Windows PowerShell 的选项,请在命令提示符窗口中键入:在Windows PowerShell 打开时,可以使用Get-Help cmdlet查找帮助。