博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Powershell指令集_1
阅读量:6477 次
发布时间:2019-06-23

本文共 6065 字,大约阅读时间需要 20 分钟。

前言

Powershell指令集主要记录一些实用的cmdlet的使用方法和例子。

程序进度条 Write-Progress

Write-Progress cmdlet会在Windows PowerShell命令窗口中显示一个进度栏,描绘正在运行的命令或脚本的状态。您可以选择进度栏所反映的指示器,以及进度栏的上方和下方显示的文本。 

格式

Write-Progress [-Activity] 
[-Status]
[[-Id]
] [-Completed] [-CurrentOperation
] [-ParentId
] [-PercentComplete
] [-SecondsRemaining
] [-SourceId
] [
]
  • 1
  • 1

选项: 

-Activity [String] 进度条上方的第一行文本信息,此文本描述正在报告其进度的活动。 
-Status [String] 指定状态栏上方标题中的第二行文本,此文本描述活动的当前状态。 
-secondsRemaining [int] ⇒ 还需多少时间来完成进度 
-Completed⇒指示进度条是否可见,缺省为可见 
-CurrentOperation [string]⇒进度条下方的文本信息 
-Id [int] ⇒指定区分多个进度条的ID,在一条指令中创建多个进度条时,建议使用 
-ParentId [int]⇒表示当前活动的父活动,与-Id配合使用 
-PercentComplete [int]⇒指定已完成的活动的百分比。 
-SoureId [int]⇒标识记录源 
倒数读秒Start-Trcountdown

Function Start-TrCountdown(){
$Countdown = 10 for($PercentComplete = $Countdown; $PercentComplete -ge 0; $PercentComplete–-) { Write-Progress -Activity 'Seconds to Next Refresh' :: -SecondsRemaining $PercentComplete ; Sleep -Seconds 1; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

执行表达式 Invoke-Expression

Invoke-Expression cmdlet接受任何字符串输入并将它视为 PowerShell 代码。通过这种方式,您可以动态地创建代码,并执行它。(类似的eval()函数) 

格式

Invoke-Expression [-Command] 
[
]
  • 1
  • 1

例子:执行脚本文件

Invoke-Expression ".\start-minimal.ps1"
  • 1
  • 1

注意: 

Invoke-Expression 是一个非常危险的命令,因为不仅可以动态的创建代码。恶意的脚本可以隐藏它的邪恶目的,例如通过 web 站点下载代码。

Invoke-Expression -Command (Invoke-WebRequest -Uri 'webUrl' -UseBasicParsing).Content
  • 1
  • 1

表格化打印信息 Format-Table

Format-Table cmdlet 常与管道符一起使用,对管道左边的数据进行表格化输出。 

格式

Format-Table 
-AutoSize
  • 1
  • 1

选项: 

-AutoSize 自动匹配表格大小

例子

Get-WmiObject Win32_Service | Format-Table -AutoSize status,DisplayName,ExitCode
  • 1
  • 1

获取系统服务 Get-WmiObject

例子

Get-WmiObject Win32_Service | ForEach-Object {
if($_.ProcessId -gt 3000) { "{0}({1})" -f $_.DisplayName,$_.ProcessID}}# {0}{1}表示第1、2个输出参数# -f表示输出信息按照{0}({1})的格式化输出
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

循环 ForEach-Object

ForEach-Object 循环,可以对通过管道的数据逐个循环进行细致化处理。 

例子

Get-WmiObject Win32_Service | ForEach-Object {
"Name:"+ $_.DisplayName, ", Is ProcessId more than 100:" + ($_.ProcessId -gt 100)} #$_ 代表当前迭代的对象#$_.Equals() 判断当前迭代对象是否等于Get-Process iexplore | ForEach-Object {
$_.kill()} #杀死关于iexplore的所有进程
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

在ForEach-Object的语句块中,$_代表当前对象,当然也允许通过$_调用该对象支持的方法。

获取系统时间 Get-Date

Get-Date 获取当前系统时间 

例子:两个时间戳相减,能显示下列比较信息:

$dateObject1 = get-date dateObject1.Subtract(dateObject2)Days              : 0Hours             : 0Minutes           : -1Seconds           : -19Milliseconds      : -732Ticks             : -797322346TotalDays         : -0.000922826789351852TotalHours        : -0.0221478429444444TotalMinutes      : -1.32887057666667TotalSeconds      : -79.7322346TotalMilliseconds : -79732.2346dateObject1.Subtract(dateObject2).totalminutes #条用比较后的属性
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

创建一个对象 New-Object

New-Object cmdlet 创建一个.Net或COM对象的实例.你指定.Net类的类型或一个COM对象的Programmatic Identifier(ProgID). 

默认情况下, 你键入.Net的完全限定名, cmdlet返回该类实例的一个引用. 
要创建一个COM对象的实例, 使用ComObject参数并将对象的ProgID作为参数值. 
格式

New-Object [-typeName] [[-argumentList] ] []New-Object [-comObject] [-strict] []
  • 1
  • 2
  • 1
  • 2

选项: 

-typeName ⇒ 指定.Net类的完全限定名. 你不能同时指定TypeName参数和ComObject参数. 
-argumentList ⇒ 为.Net类的构造器指定参数列表. 使用逗号(,)隔离列表中的元素. 
-comObject ⇒ COM对象的Programmatic Identifier (ProgID). 
-strict ⇒ 指定如果你试图创建的COM对象使用了互操作程序集, 应该给出错误. 这使得您能够区分实际的COM对象和COM可调用包装的.Net对象.

Object.Popup() 弹出窗口

在运行PowerShellScript时,某些重要信息需要通过弹出窗口来提示用户。PowerShell中没有现成的对象供我们调用,所以就需要先新建一个对象WScript.Shell,然后再通过对象所包含的方法来实现弹出窗口。 

格式

object.Popup(strText,[nSecondsToWait],[strTitle],[nType])
  • 1
  • 1

选项: 

strText ⇒ 消息窗口所包含的文本信息; 
nSecondsToWait ⇒ 等待n秒后该窗口自动关闭,如设置为0,则永不会自动关闭; 
strTitle ⇒ 消息窗口的标题; 
nType ⇒ 消息窗口的按钮类型及其图标 
窗口按钮类型: 
0 ⇒ 显示“确定”按钮 
1 ⇒ 显示“确定”+“取消”按钮 
2 ⇒ 显示“终止”+“重试”+“忽略”按钮 
3 ⇒ 显示“是”+“否”+“取消”按钮 
4 ⇒ 显示“是”+“否”按钮 
5 ⇒ 显示“重试”+“取消”按钮 
6 ⇒ 显示“重试”+“取消”+“继续”按钮 
窗口图标类型: 
16 ⇒ 红叉 
32 ⇒ 问号 
48 ⇒ 警告 
64 ⇒ 注意 
例子1

$ws = New-Object -ComObject WScript.Shell  $wsr = $ws.popup("你好吗?",5,"我的窗口",1 + 64)#如果单击"确定"按钮,则$wsr值为1,单击"取消"按钮返回值为2
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

例子2

Function Show-PopUp{
[CmdletBinding()][OutputType([int])]Param( [parameter(Mandatory=$true, ValueFromPipeLine=$true)][Alias("Msg")][string]$Message, [parameter(Mandatory=$false, ValueFromPipeLine=$false)][Alias("Ttl")][string]$Title = $null, [parameter(Mandatory=$false, ValueFromPipeLine=$false)][Alias("Duration")][int]$TimeOut = 0, [parameter(Mandatory=$false, ValueFromPipeLine=$false)][Alias("But","BS")][ValidateSet( "OK", "OC", "AIR", "YNC" , "YN" , "RC")][string]$ButtonSet = "OK", [parameter(Mandatory=$false, ValueFromPipeLine=$false)][Alias("ICO")][ValidateSet( "None", "Critical", "Question", "Exclamation" , "Information" )][string]$IconType = "None" ) $ButtonSets = "OK", "OC", "AIR", "YNC" , "YN" , "RC" $IconTypes = "None", "Critical", "Question", "Exclamation" , "Information" $IconVals = 0,16,32,48,64 if((Get-Host).Version.Major -ge 3){ $Button = $ButtonSets.IndexOf($ButtonSet) $Icon = $IconVals[$IconTypes.IndexOf($IconType)] } else{ $ButtonSets|ForEach-Object -Begin{
$Button = 0;$idx=0} -Process{ if($_.Equals($ButtonSet)){
$Button = $idx };$idx++ } $IconTypes |ForEach-Object -Begin{
$Icon = 0;$idx=0} -Process{ if($_.Equals($IconType) ){
$Icon = $IconVals[$idx]};$idx++ } } $objShell = New-Object -com "Wscript.Shell" $objShell.Popup($Message,$TimeOut,$Title,$Button+$Icon)} #Show-PopUp###Show-PopUp:显示弹窗,获取comObject.Popup()方法所需要的参数,再显示一个弹窗来确认##(Get-Host).Version.Major获取PS版本##ForEach-Object 循环,可以对通过管道的数据逐个循环进行细致化处理#$_ 代表当前的数据#$_.Equals() 判断当前对象是否等于###New-Object -com "Wscript.Shell" 创建一个com对象并返回该对象的引用##comObject.Popup(strText,[nSecondsToWait],[strTitle],[nType])#strText :消息窗口所包含的文本信息;#nSecondsToWait:等待n秒后该窗口自动关闭,如设置为0,则永不会自动关闭;#strTitle:消息窗口的标题;#nType:消息窗口的按钮类型及其图标

转载:http://blog.csdn.net/jmilk/article/details/50172915

你可能感兴趣的文章
福大软工1816 · 第三次作业 - 结对项目1
查看>>
静态库 调试版本 和发布版本
查看>>
JAVA中的finalize()方法
查看>>
慕课网学习手记--炫丽的倒计时效果Canvas绘图与动画基础
查看>>
基本分类方法——KNN(K近邻)算法
查看>>
.NET Framework3.0/3.5/4.0/4.5新增功能摘要
查看>>
熟悉常用的Linux操作
查看>>
面象过程与面象对象
查看>>
谷歌设置支持webgl
查看>>
js的AJAX请求有关知识总结
查看>>
Eclipse添加新server时无法选择Tomcat7的问题
查看>>
三分 POJ 2420 A Star not a Tree?
查看>>
修改OBS为仅直播音频
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
Python基础进阶之路(一)之运算符和输入输出
查看>>
阻塞非阻塞异步同步 io的关系
查看>>
ClickStat业务
查看>>
DMA32映射问题
查看>>
POJ 1269 Intersecting Lines(判断两直线位置关系)
查看>>
spring3.0.7中各个jar包的作用总结
查看>>