我們可以通過提供的cmdlet來幫助快速提取資訊從遠端用戶端。
然後,我們可以擁有的PowerShell的标志值将被視為一個可接受的範圍内。
下面的代碼是一個小例子,我将展示給大家如何提取用戶端的硬碟可用空間。
這個簡單的例子将展示使用顔色标記潛在的問題。
這有一個開關參數cmdlet - passthru。
因為這個代碼是用于不是特别喜歡PowerShell使用者,預設的行為是顯示彩色資訊。
使用passthru參數抑制使用寫主機和允許對象被傳遞到管道。
在這種情況下,我們有對象。通過這樣做,我們有能力繼續通過我們的對象進入管道。下面是一些例子:
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
<code>Function</code> <code>Get-DiskInfo</code>
<code>{</code>
<code> </code><code>Param</code><code>(</code>
<code> </code><code>$ComputerName</code> <code>= </code><code>$env:COMPUTERNAME</code><code>,</code>
<code> </code><code>[Switch]</code><code>$PassThru</code>
<code> </code><code>)</code>
<code> </code>
<code> </code><code>Function</code> <code>Get-ColorSplat</code>
<code> </code><code>{</code>
<code> </code><code># Create color Splats</code>
<code> </code><code>$C1</code> <code>= @{ForegroundColor=</code><code>"Green"</code><code>;BackgroundColor=</code><code>"DarkGreen"</code><code>}</code>
<code> </code><code>$C2</code> <code>= @{ForegroundColor=</code><code>"Yellow"</code><code>;BackgroundColor=</code><code>"DarkYellow"</code><code>}</code>
<code> </code><code>$C3</code> <code>= @{ForegroundColor=</code><code>"White"</code><code>;BackgroundColor=</code><code>"DarkRed"</code><code>}</code>
<code> </code><code>$C4</code> <code>= @{ForegroundColor=</code><code>"Blue"</code><code>;BackgroundColor=</code><code>"Gray"</code><code>}</code>
<code> </code><code># Create color constants in the previous scope.</code>
<code> </code><code>New-Variable</code> <code>-Name</code> <code>"Good"</code> <code>-Value</code> <code>$C1</code> <code>-Scope</code> <code>1</code>
<code> </code><code>New-Variable</code> <code>-Name</code> <code>"Problem"</code> <code>-Value</code> <code>$C2</code> <code>-Scope</code> <code>1</code>
<code> </code><code>New-Variable</code> <code>-Name</code> <code>"Bad"</code> <code>-Value</code> <code>$C3</code> <code>-Scope</code> <code>1</code>
<code> </code><code>New-Variable</code> <code>-Name</code> <code>"Header"</code> <code>-Value</code> <code>$C4</code> <code>-Scope</code> <code>1</code>
<code> </code><code>} </code><code># End: Get-ColorSplat</code>
<code> </code><code>Function</code> <code>Write-ColorOutput</code>
<code> </code><code>Param</code><code>(</code><code>$DiskInfo</code><code>)</code>
<code> </code><code># Display the headers.</code>
<code> </code><code>Write-host</code> <code>"DiskInfo | FreeSpaceGB | PercentFreeSpace"</code>
<code> </code><code># Display the data.</code>
<code> </code><code>ForEach</code> <code>(</code><code>$D</code> <code>in</code> <code>$DiskInfo</code><code>)</code>
<code> </code><code>{</code>
<code> </code><code>$DeviceID</code> <code>= </code><code>$D</code><code>.DeviceID.PadRight(6)</code>
<code> </code><code>$FSGB</code> <code>= </code><code>$D</code><code>.FreeSpaceGB.ToString().PadRight(6).Remove(5)</code>
<code> </code><code>$PFS</code> <code>= </code><code>$D</code><code>.PercentFS.ToString().PadRight(6).Remove(5)</code>
<code> </code><code>If</code> <code>(</code><code>$D</code><code>.PercentFS </code><code>-ge</code> <code>80)</code>
<code> </code><code>{ </code><code>Write-Host</code> <code>"$($DeviceID) | $($FSGB) | $($PFS)"</code> <code>@Good</code> <code>}</code>
<code> </code><code>ElseIf</code> <code>((</code><code>$D</code><code>.PercentFS </code><code>-lt</code> <code>80) </code><code>-and</code> <code>(</code><code>$D</code><code>.PercentFS </code><code>-GE</code> <code>60))</code>
<code> </code><code>{ </code><code>Write-Host</code> <code>"$($DeviceID) | $($FSGB) | $($PFS)"</code> <code>@Problem</code> <code>}</code>
<code> </code><code>Else</code>
<code> </code><code>{ </code><code>Write-Host</code> <code>"$($DeviceID) | $($FSGB) | $($PFS)"</code> <code>@Bad</code> <code>}</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code># Get the color splats</code>
<code> </code><code>Get-ColorSplat</code>
<code> </code><code>$DiskInfo</code> <code>= </code><code>Get-WmiObject</code> <code>Win32_LogicalDisk</code> <code>-ComputerName</code> <code>$ComputerName</code> <code>|</code>
<code> </code><code>Select-Object</code> <code>-Property</code> <code>DeviceID,</code>
<code> </code><code>@{Name=</code><code>"FreeSpaceGB"</code><code>;Expression={</code><code>$_</code><code>.Freespace/1GB}},</code>
<code> </code><code>@{Name=</code><code>"PercentFS"</code><code>;Expression={(</code><code>$_</code><code>.FreeSpace/</code><code>$_</code><code>.Size)*100}}</code>
<code> </code><code>If</code> <code>(!</code><code>$PassThru</code><code>) {</code><code>Write-ColorOutput</code> <code>-DiskInfo</code> <code>$DiskInfo</code><code>}</code>
<code> </code><code>Else</code> <code>{</code><code>Write-Output</code> <code>$DiskInfo</code><code>}</code>
<code>}</code>
在這個示例中,我們看到預設的輸出不同顔色的資訊繪制技術員到硬碟,需要注意
<a href="http://blog.51cto.com/attachment/201309/150718281.png" target="_blank"></a>
在這個示例中,使用passthru參數和我們再次處理的對象。記得代碼和顯示資訊,是相關的和适合他們的技能水準。
<code>PS> </code><code>Get-DiskInfo</code> <code>-ComputerName</code> <code>CantgisPC2</code> <code>-PassThru</code> <code>| </code><code>Format-Table</code> <code>-AutoSize</code>
<code> </code>
<code>DeviceID FreeSpaceGB PercentFS</code>
<code>-------- ----------- ---------</code>
<code>C: 34.6056213378906 31.7261065852248</code>
<code>D: 202.438598632813 84.9355612944946</code>
<code>E: 79.9115943908691 33.5278754613268</code>
<code>Z: 83.1089553833008 8.95466512825099</code>
這幾種方法将允許PowerShell的從業人員把重點放在什麼需要他們的注意的地方,進而忽略那些不過濾cmdlet的輸出。
本文轉自cantgis 51CTO部落格,原文連結:http://blog.51cto.com/cantgis/1302108,如需轉載請自行聯系原作者