PowerShell 语法笔记/01 变量和对象

内容纲要

$ 调用的一定是变量。输入未定义的变量会报错
因此 我们可以使用

Set-ScritMode -Version -off/1.0/2.0/lastest

等号定义变量时,作用和Set-Variable命令相同

1.1 Get-Variable 命令返回所有变量
Get-Variable -Name foo
1.2 自动变量

常用的自动变量有 $NULL $LASTEXITCODE 以及偏好设置变量
$NULL 只是代表空值

$Fooo = $NULL 

只是创建该变量,但不赋具体的值。在具体使用中,这个NULL变量经常用作某种响应,比如函数的输出。如果变量值依然是$NULL, 那么函数可能出错。

$LASTEXITCODE 变量。
PowerShell 允许调用外部可执行程序。外部程序运行结束后会调用一个退出码,例如运行ping.exe

$偏好设置变量
这一类自动变量用来控制各种输出流的默认行为,包括Error, Warning,Verbose,Debug和Information
如果想找出所有的偏好设置变量,可以使用

Get-Variable -Name *Preference 

如果你不想看到类似的错误信息,因为这是error流的默认行为,那么

PS C:\Users\Lsz\Documents\BaiduSyncdisk\PowerShell反混淆与分类\dataset> Get-Variable -name *PREFERENCE

Name                           Value                                                                                                                                                                                                                                         
----                           -----                                                                                                                                                                                                                                         
ConfirmPreference              High                                                                                                                                                                                                                                          
DebugPreference                SilentlyContinue                                                                                                                                                                                                                              
ErrorActionPreference          Continue                                                                                                                                                                                                                                      
InformationPreference          SilentlyContinue                                                                                                                                                                                                                              
ProgressPreference             Continue                                                                                                                                                                                                                                      
VerbosePreference              SilentlyContinue                                                                                                                                                                                                                              
WarningPreference              Continue                                                                                                                                                                                                                                      
WhatIfPreference               False                                                                                                                                                                                                                                         

将$ErrorActionPreference 变量的值设为SientlyContinue或Ignore

$ErrorActionPreference = 'SilentlyContinue'

1.3 布尔值和数值类型

PowerShell 的数值类型包括 布尔值,字符串和整数。

1.3.1 整数

关于整数,PowerShell 使用32位带符号的Int32类型存储整数,位数决定了一个变量可以存储多大或多小的整数。范围-2147483648 到 2147483647
使用

$变量.GetType().name

可以查看变量数据类型
可以在变量名前加 [Int32] 作为类型矫正,1.5->2,

[Int64]$变量
1.3.2 Double浮点数

有个问题,使用类型矫正为Float或者Double 时,会产生某种误差。

1.3.3 字符串

PowerShell 只有将 ''中间的内容视为字符串。字符串的赋值非常灵活。

$str1 = 'wadoiawjdo'
$str2 = 'wd' + $str1
$str2

输出

wdwadoiawjdo

注意,单引号和双引号有重要区别
将简单的字符串赋值给变量时,使用单引号或双引号都可以。

但是当字符串中有变量时,只能最外面使用双引号
根据PowerShell 的 变量扩展机制,PowerShell会取出“”中的变量的值

 $color = 'blue'
"the color is $color"

输出: the color is blue
$color = "blue"
'the color is $color'

输出: the color is $color

此外,字符串内部不能嵌套。

2.1 自定义对象

PowerShell中的对象是调用某个模板的单个实例。对象所属的类决定了其有哪些方法可以调用。决定了对象的属性。
关于对象的属性,可以用 Select-Object命令并指定 -Property
对于字符串来说只有 .Length一个属性。

$color = "blue"
Select-Object -InputObject $color -Property * 

Length
------
     4

PS C:\Users\Lsz\Documents\BaiduSyncdisk\PowerShell反混淆与分类\dataset> $color.Length
4

整数变量没有属性。

关于对象的方法,可以使用Get-Member cmdlet, 该cmdlet可以快速列出某个对象的属性和方法,二者合称对象的成员(Members)

Get-Member -InputObject $color

事实上,字符串对象有很多方法。

$color = 'blue'
Get-Member -InputObject $color 
TypeName:System.String

Name             MemberType            Definition                                                                                                                                                                                                                            
----             ----------            ----------                                                                                                                                                                                                                            
Clone            Method                System.Object Clone(), System.Object ICloneable.Clone()                                                                                                                                                                               
CompareTo        Method                int CompareTo(System.Object value), int CompareTo(string strB), int IComparable.CompareTo(System.Object obj), int IComparable[string].CompareTo(string other)                                                                         
Contains         Method                bool Contains(string value)                                                                                                                                                                                                           
CopyTo           Method                void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count)                                                                                                                                                     
EndsWith         Method                bool EndsWith(string value), bool EndsWith(string value, System.StringComparison comparisonType), bool EndsWith(string value, bool ignoreCase, cultureinfo culture)                                                                   
Equals           Method                bool Equals(System.Object obj), bool Equals(string value), bool Equals(string value, System.StringComparison comparisonType), bool IEquatable[string].Equals(string other)                                                            
GetEnumerator    Method                System.CharEnumerator GetEnumerator(), System.Collections.IEnumerator IEnumerable.GetEnumerator(), System.Collections.Generic.IEnumerator[char] IEnumerable[char].GetEnumerator()                                                     
GetHashCode      Method                int GetHashCode()                                                                                                                                                                                                                     
GetType          Method                type GetType()                                                                                                                                                                                                                        
GetTypeCode      Method                System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()                                                                                                                                                             
IndexOf          Method                int IndexOf(char value), int IndexOf(char value, int startIndex), int IndexOf(string value), int IndexOf(string value, int startIndex), int IndexOf(string value, int startIndex, int count), int IndexOf(string value, System.Stri...
IndexOfAny       Method                int IndexOfAny(char[] anyOf), int IndexOfAny(char[] anyOf, int startIndex), int IndexOfAny(char[] anyOf, int startIndex, int count)                                                                                                   
Insert           Method                string Insert(int startIndex, string value)                                                                                                                                                                                           
IsNormalized     Method                bool IsNormalized(), bool IsNormalized(System.Text.NormalizationForm normalizationForm)                                                                                                                                               
LastIndexOf      Method                int LastIndexOf(char value), int LastIndexOf(char value, int startIndex), int LastIndexOf(string value), int LastIndexOf(string value, int startIndex), int LastIndexOf(string value, int startIndex, int count), int LastIndexOf(s...
LastIndexOfAny   Method                int LastIndexOfAny(char[] anyOf), int LastIndexOfAny(char[] anyOf, int startIndex), int LastIndexOfAny(char[] anyOf, int startIndex, int count)                                                                                       
Normalize        Method                string Normalize(), string Normalize(System.Text.NormalizationForm normalizationForm)                                                                                                                                                 
PadLeft          Method                string PadLeft(int totalWidth), string PadLeft(int totalWidth, char paddingChar)                                                                                                                                                      
PadRight         Method                string PadRight(int totalWidth), string PadRight(int totalWidth, char paddingChar)                                                                                                                                                    
Remove           Method                string Remove(int startIndex, int count), string Remove(int startIndex)                                                                                                                                                               
Replace          Method                string Replace(char oldChar, char newChar), string Replace(string oldValue, string newValue)                                                                                                                                          
Split            Method                string[] Split(Params char[] separator), string[] Split(char[] separator, int count), string[] Split(char[] separator, System.StringSplitOptions options), string[] Split(char[] separator, int count, System.StringSplitOptions op...
StartsWith       Method                bool StartsWith(string value), bool StartsWith(string value, System.StringComparison comparisonType), bool StartsWith(string value, bool ignoreCase, cultureinfo culture)                                                             
Substring        Method                string Substring(int startIndex), string Substring(int startIndex, int length)                                                                                                                                                        
ToBoolean        Method                bool IConvertible.ToBoolean(System.IFormatProvider provider)                                                                                                                                                                          
ToByte           Method                byte IConvertible.ToByte(System.IFormatProvider provider)                                                                                                                                                                             
ToChar           Method                char IConvertible.ToChar(System.IFormatProvider provider)                                                                                                                                                                             
ToCharArray      Method                char[] ToCharArray(), char[] ToCharArray(int startIndex, int length)                                                                                                                                                                  
ToDateTime       Method                datetime IConvertible.ToDateTime(System.IFormatProvider provider)                                                                                                                                                                     
ToDecimal        Method                decimal IConvertible.ToDecimal(System.IFormatProvider provider)                                                                                                                                                                       
ToDouble         Method                double IConvertible.ToDouble(System.IFormatProvider provider)                                                                                                                                                                         
ToInt16          Method                int16 IConvertible.ToInt16(System.IFormatProvider provider)                                                                                                                                                                           
ToInt32          Method                int IConvertible.ToInt32(System.IFormatProvider provider)                                                                                                                                                                             
ToInt64          Method                long IConvertible.ToInt64(System.IFormatProvider provider)                                                                                                                                                                            
ToLower          Method                string ToLower(), string ToLower(cultureinfo culture)                                                                                                                                                                                 
ToLowerInvariant Method                string ToLowerInvariant()                                                                                                                                                                                                             
ToSByte          Method                sbyte IConvertible.ToSByte(System.IFormatProvider provider)                                                                                                                                                                           
ToSingle         Method                float IConvertible.ToSingle(System.IFormatProvider provider)                                                                                                                                                                          
ToString         Method                string ToString(), string ToString(System.IFormatProvider provider), string IConvertible.ToString(System.IFormatProvider provider)                                                                                                    
ToType           Method                System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)                                                                                                                                               
ToUInt16         Method                uint16 IConvertible.ToUInt16(System.IFormatProvider provider)                                                                                                                                                                         
ToUInt32         Method                uint32 IConvertible.ToUInt32(System.IFormatProvider provider)                                                                                                                                                                         
ToUInt64         Method                uint64 IConvertible.ToUInt64(System.IFormatProvider provider)                                                                                                                                                                         
ToUpper          Method                string ToUpper(), string ToUpper(cultureinfo culture)                                                                                                                                                                                 
ToUpperInvariant Method                string ToUpperInvariant()                                                                                                                                                                                                             
Trim             Method                string Trim(Params char[] trimChars), string Trim()                                                                                                                                                                                   
TrimEnd          Method                string TrimEnd(Params char[] trimChars)                                                                                                                                                                                               
TrimStart        Method                string TrimStart(Params char[] trimChars)                                                                                                                                                                                             
Chars            ParameterizedProperty char Chars(int index) {get;}                                                                                                                                                                                                          
Length           Property              int Length {get;}   

对于具体的方法,可以用

Get-Member -InputObject $color -Name [函数名]

对于整数类型变量也有很多

$color = 32
Get-Member -InputObject $color 
TypeName:System.Int32
Name        MemberType Definition                                                                                                                                                                                                                                            
----        ---------- ----------                                                                                                                                                                                                                                            
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value), int IComparable.CompareTo(System.Object obj), int IComparable[int].CompareTo(int other)                                                                                                 
Equals      Method     bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)                                                                                                                                                          
GetHashCode Method     int GetHashCode()                                                                                                                                                                                                                                     
GetType     Method     type GetType()                                                                                                                                                                                                                                        
GetTypeCode Method     System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()                                                                                                                                                                             
ToBoolean   Method     bool IConvertible.ToBoolean(System.IFormatProvider provider)                                                                                                                                                                                          
ToByte      Method     byte IConvertible.ToByte(System.IFormatProvider provider)                                                                                                                                                                                             
ToChar      Method     char IConvertible.ToChar(System.IFormatProvider provider)                                                                                                                                                                                             
ToDateTime  Method     datetime IConvertible.ToDateTime(System.IFormatProvider provider)                                                                                                                                                                                     
ToDecimal   Method     decimal IConvertible.ToDecimal(System.IFormatProvider provider)                                                                                                                                                                                       
ToDouble    Method     double IConvertible.ToDouble(System.IFormatProvider provider)                                                                                                                                                                                         
ToInt16     Method     int16 IConvertible.ToInt16(System.IFormatProvider provider)                                                                                                                                                                                           
ToInt32     Method     int IConvertible.ToInt32(System.IFormatProvider provider)                                                                                                                                                                                             
ToInt64     Method     long IConvertible.ToInt64(System.IFormatProvider provider)                                                                                                                                                                                            
ToSByte     Method     sbyte IConvertible.ToSByte(System.IFormatProvider provider)                                                                                                                                                                                           
ToSingle    Method     float IConvertible.ToSingle(System.IFormatProvider provider)                                                                                                                                                                                          
ToString    Method     string ToString(), string ToString(string format), string ToString(System.IFormatProvider provider), string ToString(string format, System.IFormatProvider provider), string IFormattable.ToString(string format, System.IFormatProvider formatProv...
ToType      Method     System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)                                                                                                                                                               
ToUInt16    Method     uint16 IConvertible.ToUInt16(System.IFormatProvider provider)                                                                                                                                                                                         
ToUInt32    Method     uint32 IConvertible.ToUInt32(System.IFormatProvider provider)                                                                                                                                                                                         
ToUInt64    Method     uint64 IConvertible.ToUInt64(System.IFormatProvider provider)                                                                                                                                                                                         

2.2 自定义对象

重要方法: New-Object

示例 1:创建 System.Version 对象

此示例使用“ 1.2.3.4 ”字符串作为构造函数创建 System.Version 对象。

New-Object -TypeName System.Version -ArgumentList "1.2.3.4"

Major  Minor  Build  Revision
-----  -----  -----  --------
1      2      3      4
示例 2:创建 Internet Explorer COM 对象

此示例创建表示 Internet Explorer 应用程序的 COM 对象的两个实例。 第一个实例使用 Property 参数哈希表调用 Navigate2 方法,并将 对象的 Visible 属性设置为 $True 以使应用程序可见。 第二个实例使用单个命令获取相同的结果。

$IE1 = New-Object -COMObject InternetExplorer.Application -Property @{Navigate2="www.microsoft.com"; Visible = $True}

# The following command gets the same results as the example above.
$IE2 = New-Object -COMObject InternetExplorer.Application`
$IE2.Navigate2("www.microsoft.com")`
$IE2.Visible = $True`
示例 4:创建 COM 对象来管理 Windows 桌面

此示例显示如何创建和使用 COM 对象来管理 Windows 桌面。

第一个命令使用 cmdlet 的 New-ObjectComObject 参数创建具有 Shell.Application ProgID 的 COM 对象。 它将生成的 对象存储在 变量中 $ObjShell 。 第二个命令通过管道将 $ObjShell 变量传递给 Get-Member cmdlet,该 cmdlet 显示 COM 对象的属性和方法。 方法包括 ToggleDesktop 方法。 第三个命令调用对象的 ToggleDesktop 方法来最小化桌面上打开的窗口。

$Objshell = New-Object -COMObject "Shell.Application"
$objshell | Get-Member
$objshell.ToggleDesktop()

TypeName: System.__ComObject#{866738b9-6cf2-4de8-8767-f794ebe74f4e}

Name                 MemberType Definition
----                 ---------- ----------
AddToRecent          Method     void AddToRecent (Variant, string)
BrowseForFolder      Method     Folder BrowseForFolder (int, string, int, Variant)
CanStartStopService  Method     Variant CanStartStopService (string)
CascadeWindows       Method     void CascadeWindows ()
ControlPanelItem     Method     void ControlPanelItem (string)
EjectPC              Method     void EjectPC ()
Explore              Method     void Explore (Variant)
ExplorerPolicy       Method     Variant ExplorerPolicy (string)
FileRun              Method     void FileRun ()
FindComputer         Method     void FindComputer ()
FindFiles            Method     void FindFiles ()
FindPrinter          Method     void FindPrinter (string, string, string)
GetSetting           Method     bool GetSetting (int)
GetSystemInformation Method     Variant GetSystemInformation (string)
Help                 Method     void Help ()
IsRestricted         Method     int IsRestricted (string, string)
IsServiceRunning     Method     Variant IsServiceRunning (string)
MinimizeAll          Method     void MinimizeAll ()
NameSpace            Method     Folder NameSpace (Variant)
Open                 Method     void Open (Variant)
RefreshMenu          Method     void RefreshMenu ()
ServiceStart         Method     Variant ServiceStart (string, Variant)
ServiceStop          Method     Variant ServiceStop (string, Variant)
SetTime              Method     void SetTime ()
ShellExecute         Method     void ShellExecute (string, Variant, Variant, Variant, Variant)
ShowBrowserBar       Method     Variant ShowBrowserBar (string, Variant)
ShutdownWindows      Method     void ShutdownWindows ()
Suspend              Method     void Suspend ()
TileHorizontally     Method     void TileHorizontally ()
TileVertically       Method     void TileVertically ()
ToggleDesktop        Method     void ToggleDesktop ()
TrayProperties       Method     void TrayProperties ()
UndoMinimizeALL      Method     void UndoMinimizeALL ()
Windows              Method     IDispatch Windows ()
WindowsSecurity      Method     void WindowsSecurity ()
WindowSwitcher       Method     void WindowSwitcher ()
Application          Property   IDispatch Application () {get}
Parent               Property   IDispatch Parent () {get}
示例 5:将多个参数传递给构造函数

此示例演示如何使用采用多个参数的构造函数创建对象。 使用 ArgumentList 参数时,必须将参数放入数组中。

$array = @('One', 'Two', 'Three')
$parameters = @{
    TypeName = 'System.Collections.Generic.HashSet[string]'
    ArgumentList = ([string[]]$array, [System.StringComparer]::OrdinalIgnoreCase)
}
$set = New-Object @parameters

PowerShell 将数组的每个成员绑定到构造函数的参数。

 备注

此示例使用参数 splatting 提高可读性。 有关详细信息,请参阅 about_Splatting

示例 6:调用采用数组作为单个参数的构造函数

此示例演示如何使用采用数组或集合参数的构造函数创建对象。 数组参数必须放入另一个数组中包装。

PowerShell复制

$array = @('One', 'Two', 'Three')
# This command throws an exception.
$set = New-Object -TypeName 'System.Collections.Generic.HashSet[string]' -ArgumentList $array
# This command succeeds.
$set = New-Object -TypeName 'System.Collections.Generic.HashSet[string]' -ArgumentList (,[string[]]$array)
$set

New-Object : Cannot find an overload for "HashSet`1" and the argument count: "3".
At line:1 char:8
+ $set = New-Object -TypeName 'System.Collections.Generic.HashSet[strin ...
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

One
Two
Three

在此示例中,第一次尝试创建 对象失败。 PowerShell 尝试将 的个 $array 成员绑定到构造函数的参数,但构造函数没有采用三个参数。 包装 $array 在另一个数组中可防止 PowerShell 尝试将 的三个 $array 成员绑定到构造函数的参数。

输入

None

无法通过管道将对象传递给此 cmdlet。

输出

Object
此 cmdlet 返回它创建的对象。

备注
  • New-Object 提供 VBScript CreateObject 函数最常用的功能。 VBScript 中的语句
  • Set objShell = CreateObject("Shell.Application") 可以在 PowerShell 中转换为 $objShell = New-Object -COMObject "Shell.Application" 。
  • New-Object通过使从命令行和脚本中轻松使用.NET Framework对象,扩展了 Windows 脚本主机环境中可用的功能。