1
2
3
<code>Get-ChildItem</code> <code>*.txt | </code><code>Foreach</code> <code>{</code>
<code> </code><code>Rename-Item</code> <code>-Path</code> <code>$_</code> <code>-NewName</code> <code>"$($_.basename).bak"</code>
<code>}</code>
上面使用的foreach對象cmdlet是不必要的,因為“重命名”項目接受管道輸入路徑和新名稱參數。
下面的例子大家可以看到結果
4
5
<code>PS> </code><code>$obj</code> <code>= </code><code>New-Object</code> <code>PSObject –Property `</code>
<code> </code><code>@{Path=</code><code>'C:\Users\Cantgis\foo.txt'</code><code>;NewName=</code><code>'bar.txt'</code><code>}</code>
<code>PS> </code><code>$obj</code> <code>| </code><code>Rename-Item</code> <code>–WhatIf</code>
<code>What </code><code>if</code><code>: Performing operation </code><code>"Rename File"</code> <code>on Target</code>
<code>"Item: C:\Users\Cantgis\foo.txt Destination: C:\Users\Cantgis\bar.txt"</code><code>.</code>
你也許會想,雖然這可能是一個有趣的問題,但是它是如何對比早期的powershell版本的呢?
如果使用foreach對象會更好嗎?
powershell有一個訣竅來幫助我們實作這個重命名操作。
訣竅是,PowerShell将接受任何參數是管道的限制,腳本調用的腳本區的一段。
你可以看到,如果一個參數是通過擷取幫助,例如管道綁定:
6
7
8
9
10
11
12
<code>PS> </code><code>Get-Help</code> <code>Rename-Item</code>
<code>...</code>
<code>-LiteralPath</code>
<code> </code><code>...</code>
<code> </code><code>Accept pipeline input? true (ByPropertyName)</code>
<code>-Path</code>
<code> </code><code>Accept pipeline input? true (ByValue, ByPropertyName)</code>
<code>-NewName</code>
<code> </code><code>Position</code><code>? 2</code>
上面的資訊告訴我們,LiteralPath:路徑和新名稱的參數接受管道輸入。
Get-ChildItem:管道輸出,重命名項:cmdlet LiteralPath參數。
我們可以使用腳本區結合這個訣竅來指定新名稱。
<code>PS> </code><code>Get-ChildItem</code> <code>*.txt | </code><code>Rename-Item</code> <code>-NewName</code> <code>{</code><code>"$($_.BaseName).bak"</code><code>}</code>
在PowerShell 3.0的更新GridView的指令支援PassThru參數。
此外,OUT-GridView控件支援多選的項目傳入以及取消操作。
例如,你可能想從清單中選擇程序停止。
<code>PS> </code><code>Get-Process</code> <code>devenv |</code>
<code> </code><code>Select Name,Id,MainWindowTitle |</code>
<code> </code><code>Out-GridView</code> <code>-PassThru</code> <code>| </code><code>Stop-Process</code>
此指令顯示出GridView的對話框,如下圖所示。
我們可以看到基于MainWindowTitle屬性的Visual Studio執行個體。
我可以選擇一個或多個devenv的程序。
如果我按“确定”,然後我選擇的程序将被停止。
如果我按出GridView的對話框上的取消按鈕,停止管道,也沒有程序被停止哦!
<a target="_blank" href="http://blog.51cto.com/attachment/201306/220440218.png"></a>
PSCX是一組通用的PowerShell指令。它提供的指令之一是顯示樹,基于PowerShell驅動器,如:
WSMan:\
Cert:\
HKLM:\
IIS:\ (if you have imported the WebAdministration module)
通常情況下,如果你想查找的驅動器,你可以使用Windows資料總管。
不幸的是,除了那些基于檔案系統上的,剩下的Windows資料總管比不上可視性PowerShell驅動器。
同樣不幸的是,像WSMAN驅動器和IIS:即所包含的功能是不是很發現,隐藏了很多功能。
這時這個社群提供的擴充子產品指令,生成顯示樹是非常友善的。
它可以在PowerShell驅動器,來顯示檔案系統結構在控制台顯示的資訊。
例如,下面是在IIS上運作顯示樹的輸出示例:\驅動器:
13
14
15
16
<code>PS> </code><code>Show-Tree</code> <code>IIS:\</code> <code>-Depth</code> <code>3</code>
<code>IIS:\</code>
<code>├──AppPools</code>
<code>│ ├──ASP.NET v4.0</code>
<code>│ │ └──WorkerProcesses</code>
<code>│ ├──ASP.NET v4.0 Classic</code>
<code>│ ├──Classic .NET AppPool</code>
<code>│ └──DefaultAppPool</code>
<code>│ └──WorkerProcesses</code>
<code>├──Sites</code>
<code>│ └──</code><code>Default</code> <code>Web Site</code>
<code>│ ├──aspnet_client</code>
<code>│ └──Blog</code>
<code>└──SslBindings</code>
在一般情況下,在PowerShell驅動器執行條件,可以是容器也可以是項目。
我們在上面看到的僅是容器項目。
例如,在項目屬性為預設應用:
17
18
19
20
21
22
23
24
25
26
27
<code>PS> </code><code>Show-Tree</code> <code>IIS:\AppPools\DefaultAppPool</code> <code>-ShowProperty</code>
<code>IIS:\AppPools\DefaultAppPool</code>
<code>├──Property: applicationPoolSid = S-1-5-82-3006700770-424185619-1745488364-7...</code>
<code>├──Property: Attributes = Microsoft.IIs.PowerShell.Framework.ConfigurationAt...</code>
<code>├──Property: autoStart = True</code>
<code>├──Property: ChildElements = Microsoft.IIs.PowerShell.Framework.Configuratio...</code>
<code>├──Property: CLRConfigFile =</code>
<code>├──Property: cpu = Microsoft.IIs.PowerShell.Framework.ConfigurationElement</code>
<code>├──Property: ElementTagName = add</code>
<code>├──Property: enable32BitAppOnWin64 = False</code>
<code>├──Property: enableConfigurationOverride = True</code>
<code>├──Property: failure = Microsoft.IIs.PowerShell.Framework.ConfigurationElement</code>
<code>├──Property: ItemXPath = /system.applicationHost/applicationPools/add[</code><code>@name</code><code>=...</code>
<code>├──Property: managedPipelineMode = Integrated</code>
<code>├──Property: managedRuntimeLoader = webengine4.dll</code>
<code>├──Property: managedRuntimeVersion = v2.0</code>
<code>├──Property: Methods = Microsoft.IIs.PowerShell.Framework.ConfigurationMetho...</code>
<code>├──Property: passAnonymousToken = True</code>
<code>├──Property: processModel = Microsoft.IIs.PowerShell.Framework.Configuration...</code>
<code>├──Property: queueLength = 1000</code>
<code>├──Property: recycling = Microsoft.IIs.PowerShell.Framework.ConfigurationEle...</code>
<code>├──Property: Schema = Microsoft.IIs.PowerShell.Framework.ConfigurationElemen...</code>
<code>├──Property: startMode = OnDemand</code>
<code>├──Property: state = Started</code>
<code>├──Property: workerProcesses = Microsoft.IIs.PowerShell.Framework.Configurat...</code>
<code>└──WorkerProcesses</code>
這樣來使用擴充子產品指令的IIS:\驅動器可以顯示更多的資訊,如托管PipelineMode使用以及使用哪個版本的、NET運作時,它的應用程式池是什麼?。
有了這個資訊我們變得更容易弄清楚如何更改這些設定:
<code>PS> </code><code>Set-ItemProperty</code> <code>IIS:\AppPools\DefaultAppPool managedRuntimeVersion v4.0</code>
好了今天cantgis把周末的博文補上啦,我們明天再會。。
本文轉自cantgis 51CTO部落格,原文連結:http://blog.51cto.com/cantgis/1236121,如需轉載請自行聯系原作者