$ 调用的一定是变量。输入未定义的变量会报错
因此 我们可以使用
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-Object
ComObject 参数创建具有 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 脚本主机环境中可用的功能。