开发者社区> 云物互联> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Powershell指令集_1

简介: 目录 目录 前言 程序进度条 Write-Progress 执行表达式 Invoke-Expression 表格化打印信息 Format-Table 获取系统服务 Get-WmiObject 循环 ForEach-Object 获取系统时间 Get-Date 创建一个对象 New-Object ObjectPopup 弹出窗口 前言 Powershell指令集主要记录一些实用的cmdlet的使用方法和例子。
+关注继续查看

目录

前言

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

程序进度条 Write-Progress

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

Write-Progress [-Activity] <string> [-Status] <string> [[-Id] <int>] [-Completed] [-CurrentOperation <string>] [-ParentId <int>] [-PercentComplete <int>] [-SecondsRemaining <int>] [-SourceId <int>] [<CommonParameters>]

选项
-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;
    }

执行表达式 Invoke-Expression

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

Invoke-Expression [-Command] <String> [ <CommonParameters>]

例子:执行脚本文件

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

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

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

表格化打印信息 Format-Table

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

Format-Table <parameters,> -AutoSize

选项
-AutoSize 自动匹配表格大小

例子

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

获取系统服务 Get-WmiObject

例子

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

循环 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的所有进程

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

获取系统时间 Get-Date

Get-Date 获取当前系统时间
例子:两个时间戳相减,能显示下列比较信息:

$dateObject1 = get-date 

dateObject1.Subtract(dateObject2)
Days              : 0
Hours             : 0
Minutes           : -1
Seconds           : -19
Milliseconds      : -732
Ticks             : -797322346
TotalDays         : -0.000922826789351852
TotalHours        : -0.0221478429444444
TotalMinutes      : -1.32887057666667
TotalSeconds      : -79.7322346
TotalMilliseconds : -79732.2346

dateObject1.Subtract(dateObject2).totalminutes #条用比较后的属性

创建一个对象 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] []

选项
-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])

选项
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

例子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:消息窗口的按钮类型及其图标

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Powershell(3)
Powershell 可以使用powershell管理的服务 share point, exchange, lync, windows azure, window server, system center, vmware, sql server, visual studio, 硬件 .
954 0
栈——PowerShell版
上一篇讲过队列(queue),队列就像是居民楼里的垃圾管道,从楼道的垃圾管道的入口处将垃圾扔进去,清洁工会从一楼垃圾管道的出口处将垃圾拿走。每一层的垃圾通道入口与一楼的垃圾管道出口之间都形成了一个队列,先被扔进垃圾道里的垃圾会先到达垃圾通道的出口,即:先进先出。
739 0
powershell adsi
https://www.google.com/?gws_rd=ssl#q=powershell+adsi
631 0
PowerShell基础
1. 一些命令像Get-SPSite有不同的参数变量。这些变量通过-?展示出来。 Get-SPSite -?   2. F3 在当前行显示最近的一条命令结果   3.
542 0
PowerShell 语法
注释 •#语句 • 变量 •命名法则 $ 做为前缀 •使用字母、数字、下划线均可 •查看所有变量 Get-ChildItem variable:或Get-Varialbe •获取作用域变量Get-Variable –Scope [Local|Global] •实例化对象 $dt=New-Object DateTime 数组 •定义$arr=1,2,3,4 •$arr=1.
635 0
+关注
云物互联
OpenStack Developer, Opensource Lover :- )
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载