2014年8月20日 星期三

如何利用其他帳號的權限在別台伺服器下指令?

這裡簡單的示範 Invoke-Command 這個command的技巧
PS C:\> $username = "mydomain\user1"
PS C:\> $password = ConvertTo-SecureString -String "P@ssw0rd" -AsPlainText -Force
PS C:\> $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password
PS C:\> Invoke-Command -ScriptBlock { Get-Process | Select-Object -First 5 } -ComputerName myserver1 -Crede
ntial $credential

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                    PSComputerName
-------  ------    -----      ----- -----   ------     -- -----------                    --------------
   1520      72    39152      17916   438 9,870.14   2020 ccSvcHst                       myserver1 
    292      26     5896       4648    96    10.19   5744 ccSvcHst                       myserver1 
    289      25     5792       4312    94    45.66   7068 ccSvcHst                       myserver1 
     23       5     2156       2984    41     0.02   1808 cmd                            myserver1 
     55       9     1464       4976    29    25.39   1548 collector                      myserver1 


PS C:\>

2014年3月6日 星期四

如何利用PowerShell檢查.NET Framework 版本?

以.NET 4.0為例: Release DWORD 的值可以判斷出4.0的那個版本
參考:http://msdn.microsoft.com/zh-tw/library/hh925568(v=vs.110).aspx
Release DWORD 的值=378758: .NET Framework 4.5.1 安裝於 Windows 8、Windows 7 SP1 或 Windows Vista SP2 上
PS C:\Users\user1> Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -recurse | Get-ItemProperty -name
 release -EA 0 | Select-Object -First 1


Release      : 378758
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework
               Setup\NDP\v4\Client
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4
PSChildName  : Client
PSProvider   : Microsoft.PowerShell.Core\Registry

2014年2月7日 星期五

如何透過PowerShell送出http request?

TechNet: http://technet.microsoft.com/en-us/library/hh849971.aspx 

在PowerShell 3.0以後,多個 Invoke-RestMethod 可以用來送出 HTTP or HTTPS request, 而且可以支援 RESTful web service.
簡單介紹一下,要怎麼送出一個單純的http reqeust (GET):
PS C:\> Invoke-RestMethod google.com.tw

就可以得到網站回應的結果了,真方便。

2014年1月27日 星期一

如何管理 remote server process

PowerShell裡的"工作管理員",指的就是Get-Process這個指令 例如取出本機T開頭的process:
PS C:\Projects> Get-Process -Name T*

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    272      21    14608        576   141    15.58   1924 taskhost
    333      29    14748       2376   362    48.25   4068 taskhost
    118      12     3884       4912   110   125.22   7436 taskmgr
    211      23     7684        476    65    24.69   1896 tmcsvc
    141      12     3364       2964    75   182.46    332 TPAutoConnect
    136      12     3028       1716    59    33.38   2876 TPAutoConnSvc
   1449      36   293640        292   435   307.20   5020 TrustedInstaller
如果要取得別台機器的process呢?

PS C:\Windows\system32> Get-Process -Name T* -ComputerName web1 

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                             
-------  ------    -----      ----- -----   ------     -- -----------                             
    138       8     4760       8020    32            2176 taskeng                                 
    188      14     6364       9540    85           16632 taskhost                                
    225      23     9496      12736    63            1688 tmcsvc                                  
如果某個process掛掉了,要kill某個process:
PS C:\Projects> Stop-Process -Name ssexp -Verbose
VERBOSE: Performing the operation "Stop-Process" on target "ssexp (6592)".
要停掉別台伺服器的process,就要透過Invoke-Command來做:

Invoke-Command -ComputerName web1 {Stop-Process -Name ssexp }

如何計算目錄內的檔案個數

我們可以透過 Get-ChildItem <目錄名稱> -Recurse 來找出目錄內所有的檔案,同時利用 Measure-Object 來計算物件的個數,如下:
PS C:\Projects> Get-ChildItem C:\Projects\Dev1 -Recurse | Measure-Object


Count    : 42664
Average  :
Sum      :
Maximum  :
Minimum  :
Property :

但上述方式是包括子目錄及檔案的,如果你只想計算檔案數,而不包含子目錄的話,可利用以下語法:
PS C:\Projects> Get-ChildItem C:\Projects\Dev1 -Recurse | ? { ! $_.PsIsContainer } | Measure-Object


Count    : 36209
Average  :
Sum      :
Maximum  :
Minimum  :
Property :