[TOC]

Powershell调用静态方法
https://www.cnblogs.com/micro-chen/p/5941659.html

[DateTime]类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#时间加减
PS D:\> [DateTime]"2019-11-28 15:16:20" - ([DateTime]::Now)
Days : 0
Hours : 23
Minutes : 59
Seconds : 37
Milliseconds : 373
Ticks : 863773731705
TotalDays : 0.999738115399305
TotalHours : 23.9937147695833
TotalMinutes : 1439.622886175
TotalSeconds : 86377.3731705
TotalMilliseconds : 86377373.1705


#时间累加
([DateTime]::Now).AddHours(1)
2019年11月27日 16:15:33

#将一个字符串转换成DateTime类
[System.DateTime]::Parse("2012-10-13 23:42:55")


#打印1988到2000年的所有闰年
for($year=1988;$year -le 2000;$year++)
{
if( [System.DateTime]::IsLeapYear($year) ){
Write-Output $year
}
}


[System.IO.DriveInfo]::GetDrives() | Format-Table
Name DriveType DriveFormat IsReady AvailableFreeSpace TotalFreeSpace TotalSize RootDirectory VolumeLabel
---- --------- ----------- ------- ------------------ -------------- --------- ------------- -----------
C:\ Fixed NTFS True 23552114688 23552114688 160457101312 C:\ OS

[Math] 类

描述: 这是.NET中的一个数学类里面定义很多实用的静态方法,其类路径是System.Math;
参考路径: https://docs.microsoft.com/zh-cn/dotnet/api/system.math?view=net-5.0

可用静态方法列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# 字段
E #表示自然对数的底,它由常数 e 指定。
PI #表示圆的周长与其直径的比值,由常数 π 指定。
Tau #表示一转中的弧度数,由常量 τ 指定。

# 方法
Abs(Decimal)
返回 Decimal 数字的绝对值。
Abs(Double)
返回双精度浮点数字的绝对值。
Abs(Int16)
返回 16 位有符号整数的绝对值。
Abs(Int32)
返回 32 位有符号整数的绝对值。
Abs(Int64)
返回 64 位有符号整数的绝对值。
Abs(SByte)
返回 8 位有符号整数的绝对值。
Abs(Single)
返回单精度浮点数字的绝对值。
Acos(Double)
返回余弦值为指定数字的角度。
Acosh(Double)
返回双曲余弦值为指定数字的角度。
Asin(Double)
返回正弦值为指定数字的角度。
Asinh(Double)
返回双曲正弦值为指定数字的角度。
Atan(Double)
返回正切值为指定数字的角度。
Atan2(Double, Double)
返回正切值为两个指定数字的商的角度。
Atanh(Double)
返回双曲正切值为指定数字的角度。
BigMul(Int32, Int32)
生成两个 32 位数字的完整乘积。
BigMul(Int64, Int64, Int64)
生成两个 64 位数的完整乘积。
BigMul(UInt64, UInt64, UInt64)
生成两个无符号 64 位数的完整乘积。
BitDecrement(Double)
返回小于 x 的下一个最小值。
BitIncrement(Double)
返回大于 x 的下一个最大值。
Cbrt(Double)
返回指定数字的立方根。
Ceiling(Decimal)
返回大于或等于指定的十进制数的最小整数值。
Ceiling(Double)
返回大于或等于指定的双精度浮点数的最小整数值。
Clamp(Byte, Byte, Byte)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(Decimal, Decimal, Decimal)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(Double, Double, Double)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(Int16, Int16, Int16)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(Int32, Int32, Int32)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(Int64, Int64, Int64)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(SByte, SByte, SByte)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(Single, Single, Single)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(UInt16, UInt16, UInt16)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(UInt32, UInt32, UInt32)
返回限制在 min 和 max 范围内(含首尾)的 value。
Clamp(UInt64, UInt64, UInt64)
返回限制在 min 和 max 范围内(含首尾)的 value。
CopySign(Double, Double)
返回一个值,它具有 x 的大小和 y 的符号。
Cos(Double)
返回指定角度的余弦值。
Cosh(Double)
返回指定角度的双曲余弦值。
DivRem(Int32, Int32, Int32)
计算两个 32 位有符号整数的商,并通过输出参数返回余数。
DivRem(Int64, Int64, Int64)
计算两个 64 位有符号整数的商,并通过输出参数返回余数。
Exp(Double)
返回 e 的指定次幂。
Floor(Decimal)
返回小于或等于指定小数的最大整数值。
Floor(Double)
返回小于或等于指定双精度浮点数的最大整数值。
FusedMultiplyAdd(Double, Double, Double)
返回 (x * y) + z,舍入为一个三元运算。
IEEERemainder(Double, Double)
返回一指定数字被另一指定数字相除的余数。
ILogB(Double)
返回指定数字以 2 为底的整数对数。
Log(Double)
返回指定数字的自然对数(底为 e)。
Log(Double, Double)
返回指定数字在使用指定底时的对数。
Log10(Double)
返回指定数字以 10 为底的对数。
Log2(Double)
返回指定数字以 2 为底的对数。
Max(Byte, Byte)
返回两个 8 位无符号整数中较大的一个。
Max(Decimal, Decimal)
返回两个十进制数中较大的一个。
Max(Double, Double)
返回两个双精度浮点数字中较大的一个。
Max(Int16, Int16)
返回两个 16 位有符号的整数中较大的一个。
Max(Int32, Int32)
返回两个 32 位有符号的整数中较大的一个。
Max(Int64, Int64)
返回两个 64 位有符号的整数中较大的一个。
Max(SByte, SByte)
返回两个 8 位有符号的整数中较大的一个。
Max(Single, Single)
返回两个单精度浮点数字中较大的一个。
Max(UInt16, UInt16)
返回两个 16 位无符号整数中较大的一个。
Max(UInt32, UInt32)
返回两个 32 位无符号整数中较大的一个。
Max(UInt64, UInt64)
返回两个 64 位无符号整数中较大的一个。
MaxMagnitude(Double, Double)
返回两个双精度浮点数字中的较大值。
Min(Byte, Byte)
返回两个 8 位无符号整数中较小的一个。
Min(Decimal, Decimal)
返回两个十进制数中较小的一个。
Min(Double, Double)
返回两个双精度浮点数字中较小的一个。
Min(Int16, Int16)
返回两个 16 位有符号整数中较小的一个。
Min(Int32, Int32)
返回两个 32 位有符号整数中较小的一个。
Min(Int64, Int64)
返回两个 64 位有符号整数中较小的一个。
Min(SByte, SByte)
返回两个 8 位有符号整数中较小的一个。
Min(Single, Single)
返回两个单精度浮点数字中较小的一个。
Min(UInt16, UInt16)
返回两个 16 位无符号整数中较小的一个。
Min(UInt32, UInt32)
返回两个 32 位无符号整数中较小的一个。
Min(UInt64, UInt64)
返回两个 64 位无符号整数中较小的一个。
MinMagnitude(Double, Double)
返回两个双精度浮点数字中的较小值。
Pow(Double, Double)
返回指定数字的指定次幂。
Round(Decimal)
将小数值舍入到最接近的整数值,并将中点值舍入到最接近的偶数。
Round(Decimal, Int32)
将小数值舍入到指定数量的小数位,并将中点值舍入到最接近的偶数。
Round(Decimal, Int32, MidpointRounding)
将小数值舍入到指定数量的小数位,并为中点值使用指定的舍入规则。
Round(Decimal, MidpointRounding)
将小数值舍入到最接近的整数,并为中点值使用指定的舍入规则。
Round(Double)
将双精度浮点值舍入到最接近的整数值,并将中点值舍入到最接近的偶数。
Round(Double, Int32)
将双精度浮点值舍入到指定数量的小数位,并将中点值舍入到最接近的偶数。
Round(Double, Int32, MidpointRounding)
将双精度浮点值舍入到指定数量的小数位,并为中点值使用指定的舍入规则。
Round(Double, MidpointRounding)
将双精度浮点值舍入到最接近的整数,并为中点值使用指定的舍入约定。
ScaleB(Double, Int32)
返回有效计算的 x * 2^n。
Sign(Decimal)
返回表示十进制数符号的整数。
Sign(Double)
返回一个整数,该整数表示双精度浮点数字的符号。
Sign(Int16)
返回表示 16 位带符号整数的整数。
Sign(Int32)
返回表示 32 位带符号整数的整数。
Sign(Int64)
返回一个整数,该整数指示 64 位带符号整数的符号。
Sign(SByte)
返回一个整数,该整数指示 8 位带符号整数的符号。
Sign(Single)
返回一个整数,该整数表示单精度浮点数字的符号。
Sin(Double)
返回指定角度的正弦值。
Sinh(Double)
返回指定角度的双曲正弦值。
Sqrt(Double)
返回指定数字的平方根。
Tan(Double)
返回指定角度的正切值。
Tanh(Double)
返回指定角度的双曲正切值。
Truncate(Decimal)
计算一个数字的整数部分。
Truncate(Double)
计算指定双精度浮点数的整数部分。


基础示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1.简单使用求绝对值,三角函数,
[Math]::PI # 3.14159265358979
[Math]::Abs(-10.89) # 10.89
[Math]::Sin([Math]::PI/2) # 1
[Math]::Pow(2, 10) # 1024

# 四舍五入取整,向上、向下取整
[Math]::Round("3.495") # 3
[Math]::Round("3.595") # 4
[Math]::Round("3.5956485",3) # 3.596 (指定小数点后的几位)
[Math]::Ceiling("3.199999") # 4
[Math]::floor("3.999999") # 3
# - 计算一个数字的整数部分。
[Math]::Truncate(2012.7765) # 2012


[NET] 类

描述:.NET支持成千上万的类型,有了这些类型可以做许多事情,幸运的是Powershell恰好支持这些类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#1.例如使用System.Net.IPAddress类将字符串IP地址转换成一个IPAddress实例
PS C:\Users\WeiyiGeek\Desktop> [Net.IPAddress]'10.3.129.71'
Address : 1199637258
AddressFamily : InterNetwork
ScopeId :
IsIPv6Multicast : False
IsIPv6LinkLocal : False
IsIPv6SiteLocal : False
IsIPv6Teredo : False
IsIPv4MappedToIPv6 : False
IPAddressToString : 10.3.129.71


#2.根据IP地址查看主机名,8.8.8.8是谷歌的免费DNS服务器
PS > [system.Net.Dns]::GetHostByAddress('8.8.8.8') | fl
HostName : google-public-dns-a.google.com
Aliases : {}
AddressList : {8.8.8.8}


[AppDomain] 类

.NET中的类型定义在不同的程序集中,首先得知道当前程序已经加载了那些程序集;
AppDomain类可以完成这个需求,因为它有一个静态成员CurrentDomain,CurrentDomain中有一个GetAssemblies()方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
PS > [AppDomain]::CurrentDomain

PS > [AppDomain]::CurrentDomain.GetAssemblies()
GAC Version Location
--- ------- --------
True v4.0.30319 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll
搜索指定类型
查询每个程序集中的方法可是使用GetExportedTypes() 方法。因为许多程序集中包含了大量的方法,在搜索时最好指定关键字。下面的代码演示如何查找包含”environment”关键字的类型。
PS > [AppDomain]::CurrentDomain.GetAssemblies() | ForEach-Object { $_.GetExportedTypes() } | Where-Object { $_ -like $searchtext } | ForEach-Object { $_.FullName }

搜索方法
下面的例子演示如何根据指定关键字”Address”,搜索方法。
[AppDomain]::CurrentDomain.GetAssemblies() | ForEach-Object { $_.GetExportedTypes() } | ForEach-Object { $_.getmembers() } | Where-Object { $_.isStatic} | Where-Object { $_ -like $searchtext } | ForEach-Object { "[{0}]::{1} --> {2}" -f $_.declaringtype, $_.toString().SubString($_.toString().IndexOf(" ")+1), $_.ReturnType }


[Environment] 类

1
2
3
4
5
6
7
8
查看以下System.Environment类的所有静态方法。
[Environment] | Get-Member -Static
PS > [Environment]::UserDomainName #当前登录域
MyHome
PS > [Environment]::UserName #当前用户名
xiaoming
PS > [Environment]::MachineName #当前机器名
LocalHost
1
2
3
4
5
6
7
8
9
10
11
12
# 方式1.根据类型创建实例
$LocalName="c:\PS\Index.php"
$DownUrlFile="https://weiyigeek.com/Index.php"
if(!-Path $LocalName){
$webClient=New-Object Net.WebClient;$webClient.DownloadFile($DownUrlFile,$LocalName)
if(-Path $LocalName){
Write-Ouput "下载完成"
}
}

# 方式2.一句话搞定
(New-Object Net.WebClient).DownloadFile($DownUrlFile,$LocalName)

$dllByte=[System.IO.File]::ReadAllBytes(‘D:\Code\mosser\PStips.NET —dll’)
[System.AppDomain]::CurrentDomain.Load($dllByte)

1
2
3
4
5
6
7
新版的.NET 中有动态类型,不能直接通过GetExportedTypes()调用,把它屏蔽掉就行了

[AppDomain]::CurrentDomain.GetAssemblies() |
Where-Object { -not $_.IsDynamic } |
ForEach-Object {$_.GetExportedTypes() } |
Where-Object { $_ -like '*environment*' } |
ForEach-Object { $_.FullName }

描述:

统计指定目录下的文件数量
[System.IO.Directory]::GetFiles(“D:\Work\Data\Photo\gzkz-2019\1950”, ‘*’, ‘AllDirectories’).Count