Windows Powershell属性:描述对象是什么

属性可以描述一个对象,对象的属性可以被Powershell自动转换成文本,并且输出到控制台。因此可以通过这种方法查看任何对象,例如$host:

复制代码 代码如下:

PS C:Powershell> $host

Name              : ConsoleHost
Version           : 2.0
InstanceId            : 7fefa1fa-fb2e-47c7-a867-c13b123da5c2
UI                : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture    : zh-CN
CurrentUICulture  : zh-CN
PrivateData       : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed  : False
Runspace          : System.Management.Automation.Runspaces.LocalRunspace

InternalHost对象存储在$host变量中,包含9个属性。输出的第一列为对象的属性,第二列为文本形式的属性值。例如要查看当前Powershell的版本号,可以访问$host对象的Version属性:

复制代码 代码如下:

PS C:Powershell> $host.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1

由此可知,Version并不是以一串单独的数字存储的,它本身也是一个对象,包含 Major,Minor,Build,Revision四个属性,可以查看Version的具体类型,也可以访问它的每一个属性:

复制代码 代码如下:

PS C:Powershell> $Host.Version.GetType().FullName
System.Version
PS C:Powershell> $Host.Version.Build
-1
PS C:Powershell> $Host.Version.Major
2
PS C:Powershell> $Host.Version.MajorRevision
-1
PS C:Powershell> $Host.Version.Revision
-1

查看一个对象的类型很实用,因为可以通过这个类型构造新的对象或者进行类型转换等等。

复制代码 代码如下:

PS C:Powershell> [System.Version]'2012.12.20.4444'

Major  Minor  Build  Revision
-----  -----  -----  --------
2012   12     20     4444

例如CurrentCulture属性,可以通过$host的CurrentCulture访问当前系统的本地化信息和该信息的类型:

复制代码 代码如下:

PS C:Powershell> $Host.CurrentCulture

LCID             Name             DisplayName
----             ----             -----------
2052             zh-CN            中文(中华人民共和国)

PS C:Powershell> $Host.CurrentCulture.GetType().FullName
System.Globalization.CultureInfo

CurrentCulture包含3个属性,LCID, Name, and DisplayName。通过MSDN查看System.Globalization.CultureInfo的构造函数可知,可以将国家代码和国家名称标志字符串转换成一个新的CultureInfo对象。

复制代码 代码如下:

PS C:Powershell> [System.Globalization.CultureInfo]'zh-cn'

LCID             Name             DisplayName
----             ----             -----------
2052             zh-CN            中文(中华人民共和国)

PS C:Powershell> [System.Globalization.CultureInfo]'zh-tw'

LCID             Name             DisplayName
----             ----             -----------
1028             zh-TW            中文(台湾)

PS C:Powershell> [System.Globalization.CultureInfo]'en-us'

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            英语(美国)

PS C:Powershell> [System.Globalization.CultureInfo] 55

LCID             Name             DisplayName
----             ----             -----------
55               ka               格鲁吉亚语

PS C:Powershell> [System.Globalization.CultureInfo] 1

LCID             Name             DisplayName
----             ----             -----------
1                ar               阿拉伯语

PS C:Powershell> [System.Globalization.CultureInfo] 33

LCID             Name             DisplayName
----             ----             -----------
33               id               印度尼西亚语

属性中包含对象

一个对象的属性用来存储数据,反过来这些数据又可以存储其它对象。$host有两个比较特别的属性UI和PrivateData。把$host对象输出到控制台上后,除了UI和PrivateData所有的属性都会被转换成确定的文本:

复制代码 代码如下:

PS C:Powershell> $Host

Name  : ConsoleHost
Version          : 2.0
InstanceId        : 7fefa1fa-fb2e-47c7-a867-c13b123da5c2
UI                : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture    : zh-CN
CurrentUICulture  : zh-CN
PrivateData       : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed  : False
Runspace          : System.Management.Automation.Runspaces.LocalRunspace

原因是这两个属性中又包含了一个对象:

复制代码 代码如下:

PS C:Powershell> $Host.UI

RawUI
-----
System.Management.Automation.Internal.Host.InternalHostRawUserInterface

PS C:Powershell> $Host.UI.RawUI

ForegroundColor : DarkYellow
BackgroundColor : DarkMagenta
CursorPosition : 0,23
WindowPosition : 0,0
CursorSize : 25
BufferSize  : 100,200
WindowSize  : 100,61
MaxWindowSize   : 100,62
MaxPhysicalWindowSize : 160,62
KeyAvailable       : False
WindowTitle       : Windows PowerShell

“RawUI” 为 “Raw User Interface” 提供了配置Powershell控制台用户界面的接口。上面的属性可以读取,但是个别却不能更改。

只读属性和读写属性

属性可以准确的描述对象,一旦属性更改了。这一更改也会体现在对象上。如果不能更改,属性就是“只读”属性。
通过简单地修改控制台的背景和前景的颜色,可以发现属性更改可以直接反映到对象上。

复制代码 代码如下:

PS C:Powershell> $host.ui.rawui.BackgroundColor = "Green"
PS C:Powershell> $host.ui.rawui.ForegroundColor = "White"
PS C:Powershell> cls

有的属性不能更改,如果尝试修改,就会抛出异常。

复制代码 代码如下:

PS C:Powershell> $Host.UI.RawUI.KeyAvailable
False
PS C:Powershell> $Host.UI.RawUI.KeyAvailable=$false

“KeyAvailable”为 ReadOnly 属性。

所在位置 行:1 字符: 16
+ $Host.UI.RawUI. <<<< KeyAvailable=$false
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

控制台是否接收到了一个按键请求,应当取决于用户的操作,因此该属性拒绝被更改,你只能读取它。

RawUI的属性

ForegroundColor:前景色
BackgroundColor:背景色
CursorPosition:光标的位置
WindowPosition:窗口的位置
CursorSize:光标的大小
BufferSize:缓冲区的大小
WindowSize:窗口的大小
MaxWindowSize:允许窗口的最大值
MaxPhysicalWindowSize:窗口可能的最大值
KeyAvailable:是否存在按键
WindowTitle:窗口的标题

属性的类型

有些属性只接受整数值,例如控制台光标的大小,值域在0-100,用来控制关闭大小的百分比。可以将光标设置为75%,但是不能超过100%,否则就会产生错误。

复制代码 代码如下:

PS C:Powershell> $Host.UI.RawUI.CursorSize=75
PS C:Powershell> $Host.UI.RawUI.CursorSize=101

设置“CursorSize”时发生异常:“无法处理 CursorSize,因为指定的光标大小无效。
参数名: value
实际值是 101。”
所在位置 行:1 字符: 16

复制代码 代码如下:

+ $Host.UI.RawUI. <<<< CursorSize=101
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

另一个属性ForegoundColor的类型为Color枚举值。因此给ForegoundColor所赋的值必须是已经在System.ConsoleColor中定义过的。可以将“Black”但是不能使用“Pink”

复制代码 代码如下:

PS C:Powershell> $Host.UI.RawUI.ForegroundColor="Black"
PS C:Powershell> $Host.UI.RawUI.ForegroundColor="Pink"
设置“ForegroundColor”时发生异常:“由于枚举值无效,无法将值“Pink”转换为类型“System.ConsoleColor
”。请指定以下枚举值之一,然后重试。可能的枚举值为“Black、DarkBlue、DarkGreen、DarkCyan、DarkRed、
DarkMagenta、DarkYellow、Gray、DarkGray、Blue、Green、Cyan、Red、Magenta、Yellow、White”。”
所在位置 行:1 字符: 16
+ $Host.UI.RawUI. <<<< ForegroundColor="Pink"
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

可以使用[System.Enum]::GetNames 方法查看ConsoleColor定义的所有颜色。

复制代码 代码如下:

PS C:Powershell> [System.Enum]::GetNames([System.ConsoleColor])
Black
DarkBlue
DarkGreen
DarkCyan
DarkRed
DarkMagenta
DarkYellow
Gray
DarkGray
Blue
Green
Cyan
Red
Magenta
Yellow
White

有时一个属性期望的赋值必须是一个指定类型的对象。例如WindowSize,如果想改变Powershell的窗口大小,可是设置WindowSize属性,但是它是一个System.Management.Automation.Host.Size对象,怎样获取这个对象呢?
1.先读取属性,保存为临时变量,更改临时变量,将临时变量赋给WindowSize
2.直接创建一个System.Management.Automation.Host.Size,赋给WindowSize

复制代码 代码如下:

PS C:Powershell> $tmp=$Host.UI.RawUI.WindowSize
PS C:Powershell> $tmp

Width Height
----- ------
  100     60

PS C:Powershell> $tmp.Height=30
PS C:Powershell> $tmp.Width=60
PS C:Powershell> $Host.UI.RawUI.WindowSize=$tmp
Width Height
----- ------
  60     30

PS C:Powershell> $Host.UI.RawUI.WindowSize=New-Object System.Management.Automation.Host.Size(60,40)
PS C:Powershell> $Host.UI.RawUI.WindowSize

Width Height
----- ------
   60     40

查看所有属性

因为属性和方法都是对象的成员,可以使用Get-Member可以返回它们的成员的详细信息,如果只显示属性可以使用参数 memberType 为“Property”

复制代码 代码如下:

PS C:Powershell> $host | Get-Member -memberType property

TypeName: System.Management.Automation.Internal.Host.InternalHost

Name             MemberType Definition
----             ---------- ----------
CurrentCulture    Property   System.Globalization.CultureInfo CurrentCulture {get;}
CurrentUICulture  Property   System.Globalization.CultureInfo CurrentUICulture {get;}
InstanceId        Property   System.Guid InstanceId {get;}
IsRunspacePushed  Property   System.Boolean IsRunspacePushed {get;}
Name              Property   System.String Name {get;}
PrivateData       Property   System.Management.Automation.PSObject PrivateData {get;}
Runspace          Property   System.Management.Automation.Runspaces.Runspace Runspace {get;}
UI                Property   System.Management.Automation.Host.PSHostUserInterface UI {get;}
Version           Property   System.Version Version {get;}

在Name列,可以看到$host支持的所有属性。在Definition列首先列出属性的具体类型,然后列出构造器,如果一个构造器中只有Get方法,没有Set方法,表示该属性为只读属性。

时间: 2014-09-22

Windows Powershell对象=属性+方法

在现实世界中,你可能已经了解对象就是那些能够摸到的东西.Powershell中的对象和现实生活很相似.例如要在现实生活中描述一把小刀.我们可能会分两方面描述它 属性:一把小刀拥有一些特殊的属性,比如它的颜色.制造商.大小.刀片数.这个对象是红色的,重55克,有3个刀片,ABC公司生产的.因此属性描述了一个对象是什么. 方法:可以使用这个对象做什么,比如切东西.当螺丝钉用.开啤酒盖.一个对象能干什么就属于这个对象的方法. 创建对象 通过New-Object可以创建一个对象,甚至可以创建一个虚拟的小

JavaScript中Window对象的属性及事件

Window 对象 Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象. 注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象. windows对象属性 属性 描述 closed 返回窗口是否已被关闭. defaultStatus 设置或返回窗口状态栏中的默认文本. document 对 Document 对象的只读引用.请

Powershell使用WINDOWS事件日志记录程序日志

通常,人们使用基于文件的日志.这样做没有什么问题,但是使用WINDOWS提供系统内部日志会更加简单. 如果你有管理权限,你可以随时创建一个新的日志: 复制代码 代码如下: New-EventLog -LogName myLog -Source JobDue, JobDone, Remark 该命令创造了一个名为Mylog的日志,这个事件源自"JobDUE","JobDone"和"Remark".管理员权限只是为了创造日志,剩下的操作其它用户都可以

C#3.0使用EventLog类写Windows事件日志的方法

本文实例讲述了C#3.0使用EventLog类写Windows事件日志的方法.分享给大家供大家参考.具体如下: 在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中.在C#3.0中可以使用EventLog类将各种信 息直接写入Windows日志.EventLog类在System.Diagnostics命名空间中.我们可以在"管理工具" > "事件查看器"中 可以查看我们写入的Windows日志 下面是一个使用EventLog类向应用程序(App

使用批处理for命令清除事件查看器所有Windows EventLog日志

以前装完系统后要做个Ghost,为了达到完美,每次做Ghost前都会手动清除 事件查看器所有Windows EventLog日志. 后来使用了Windows 2008 r2/Win7后,这事变的复杂多了,所以也就没管了. 再后来有同事问到如何把他们全部清除,因为一个一个清,在Microsoft一级有很多目录,要想完全清除得半小时,并且清除后又有了,不实用. 再到今天,我在玩Hyper-V时,总看到一堆Error,鉴于之前给公司做的持续交付里,批处理大显身手,所以想应该可以使用批处理来实现, Go

Windows键盘事件权限提升漏洞

受影响系统: Microsoft Windows XP SP2 Microsoft Windows XP SP1 Microsoft Windows XP Microsoft Windows Server 2003 SP1 Microsoft Windows Server 2003 Microsoft Windows 2000SP4 Microsoft Windows 2000SP3 Microsoft Windows 2000SP2 Microsoft Windows 2000SP1 Micr

使用批处理清除事件查看器所有Windows EventLog日志的代码

以前装完系统后要做个Ghost,为了达到完美,每次做Ghost前都会手动清除 事件查看器所有Windows EventLog日志. 后来使用了Windows 2008 r2/Win7后,这事变的复杂多了,所以也就没管了. 再后来有同事问到如何把他们全部清除,因为一个一个清,在Microsoft一级有很多目录,要想完全清除得半小时,并且清除后又有了,不实用. 再到今天,我在玩Hyper-V时,总看到一堆Error,鉴于之前给公司做的持续交付里,批处理大显身手,所以想应该可以使用批处理来实现, Go

MYSQL事件查看器使用介绍

要查看当前是否已开启事件调度器 SHOW VARIABLES LIKE 'event_scheduler'; 开启事件查看器 SET GLOBAL event_scheduler = 1; 创建事件 语法: CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statemen

事件查看器 特定权限设置未将 COM 服务器应用程序错误的解决方法

问题: 应用程序-特定权限设置未将 COM 服务器应用程序(CLSID 为 {DCBCA92E-7DBE-4EDA-8B7B-3AAEA4DD412B})的本地 启动 权限授予用户 NT AUTHORITY\SYSTEM SID (S-1-5-18).可以使用组件服务管理工具修改此安全权限. 解决: 1.运行REGEDIT.然后搜索DCBCA92E-7DBE-4EDA-8B7B-3AAEA4DD412B,搜索到后看右边的方框内的AppID的REG_SZ字符串值为{B292921D-AF50-40

MaxDOS V6 系统备份查看器 批处理代码

复制代码 代码如下: @echo off :_max mode con: cols=62 lines=23 set bt=MaxDOS V6 系统备份查看器. 迈思工作室 Http://Pzz.Cn color f0 title %bt% :_m1 cls echo. echo MaxDOS V6 系统备份查看器 echo ═════════════════════════════ echo. echo 1.打开存放备份镜像的目录 echo 2.删除已存在的镜像备份文件 echo 3.删除用于存

C#如何实现图片查看器

这篇文章将简单介绍下如何使用C#来实现一个图片查看器的功能的,该工具保存的功能有: 1. 可以通过"上一张" "下一张"这样的按钮来轮换浏览图片  2.实现对图片的旋转  3.实现对旋转后图片的保存功能.本程序不仅提供旋转90/180/270这样的实现,同时提供一个方法来完成旋转任意角度的实现 4.该程序未实现Windows图片查看图片缩放的功能,这部分的功能主要要点是改变图片在PictureBox控件中的高度和宽度就可以的 二.实现思路 2.1 图片轮换浏览功能的

使用Python制作简单的小程序IP查看器功能

前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧.IP地址在操作系统里就可以直接查看.但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况.IP地址和地理地址并没有固定的关系,所以我们需要借助网络上的数据库,或者说借助第三方的服务来查询.这里,我们选用IP.CN提供的IP地址查询服务. 基本环境配置 版本:Python3 系统:Windows 相关模块:PyQt5 实现效果图 完整代码 运行以上程序,点击按钮,大约卡顿半秒后,文本标签处就会显示我们电脑的IP地址

c# 实现图片查看器

一.引言 因为最近在MSDN中的论坛和CSDN论坛都看到有些朋友问到如何用C#实现一个像Windows自带的图片查看器的功能等类似的问题(当然还有如何如何旋转图片的,如何通过按钮来变换图片的功能等),所以为了帮助大家更好地解决类似的这样的问题,所以这篇文章将简单介绍下如何使用C#来实现一个图片查看器的功能的,该工具保存的功能有: 可以通过"上一张" "下一张"这样的按钮来轮换浏览图片 实现对图片的旋转 实现对旋转后图片的保存功能.本程序不仅提供旋转90/180/27

带你了解MySQL中的事件调度器EVENT

MySQL中的事件调度器,EVENT,也叫定时任务,类似于Unix crontab或Windows任务调度程序. EVENT由其名称和所在的schema唯一标识. EVENT根据计划执行特定操作.操作由SQL语句组成,语句可以是BEGIN-END语句块.EVENT可以是一次性的,也可以是重复性的.一次性EVENT只执行一次,周期性EVENT以固定的间隔重复其操作,并且可以为周期性EVENT指定开始日期和时间.结束日期和时间.(默认情况下,定期EVENT在创建后立即开始,并无限期地继续,直到它被禁

详解Python的Twisted框架中reactor事件管理器的用法

铺垫 在大量的实践中,似乎我们总是通过类似的方式来使用异步编程: 监听事件 事件发生执行对应的回调函数 回调完成(可能产生新的事件添加进监听队列) 回到1,监听事件 因此我们将这样的异步模式称为Reactor模式,例如在iOS开发中的Run Loop概念,实际上非常类似于Reactor loop,主线程的Run Loop监听屏幕UI事件,一旦发生UI事件则执行对应的事件处理代码,还可以通过GCD等方式产生事件至主线程执行. 上图是boost对Reactor模式的描绘,Twisted的设计就是基于