Powershell————2、Powershell互動式

FLy_鵬程萬里發表於2018-05-24

Powershell進行數學運算

我們可以把powershell當成一個計算器。和鍵入命令列那樣輸入數學表示式,回車,powershell會自動計算並把結果輸出。常用的加減乘除模(+,-,*,/,%)運算和小括號表示式都支援。

PowerShell也能自動識別計算機容量單位,包括KB,MB,GB,TB,PB

假如一個網站每個頁面大小為80kb,統計顯示每天的PV操作為800,1個月下來佔用的頻寬:


假如一個網站的每天人均PV操作為5,頁面大小為80Kb,主機提供商限制的總流量為10G,那平均每天的最大訪客數為:


執行外部命令

通過netstat檢視網路埠狀態

PS C:\PS> netstat

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    192.168.0.100:3049    192.168.0.88:7575       ESTABLISHED
  TCP    192.168.0.100:3052    192.168.0.88:7575       ESTABLISHED
  TCP    192.168.0.100:3061    192.168.0.88:7575       ESTABLISHED

使用ipconfig檢視自己的網路配置

PS C:\PS> ipconfig

Windows IP Configuration

Ethernet adapter Local Area Connection:

   Connection-specific DNS Suffix  . : www.mossfly.com
   Link-local IPv6 Address . . . . . : fe80::b9dd:91e33:33f0:7885%10
   IPv4 Address. . . . . . . . . . . : 192.168.140.100
   Subnet Mask . . . . . . . . . . . : 255.255.252.0
   Default Gateway . . . . . . . . . : 192.168.140.1

Tunnel adapter isatap.www.mossfly.com:

   Connection-specific DNS Suffix  . : www.mossfly.com
   Link-local IPv6 Address . . . . . : fe80::5efe:192.168.140.100%11
   Default Gateway . . . . . . . . . :

Tunnel adapter Teredo Tunneling Pseudo-Interface:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

檢視路由資訊

PS C:\PS> route print
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0     192.168.140.1   192.168.140.100     20
        192.0.0.0        255.0.0.0         On-link         192.0.0.1    306
        192.0.0.1  255.255.255.255         On-link         192.0.0.1    306
  192.255.255.255  255.255.255.255         On-link         192.0.0.1    306
     192.168.140.0    255.255.252.0         On-link    192.168.140.100    276
   192.168.140.100  255.255.255.255         On-link    192.168.140.100    276
   192.168.143.255  255.255.255.255         On-link    192.168.140.100    276
        224.0.0.0        240.0.0.0         On-link         192.0.0.1    306
        224.0.0.0        240.0.0.0         On-link    192.168.140.100    276
  255.255.255.255  255.255.255.255         On-link         192.0.0.1    306
  255.255.255.255  255.255.255.255         On-link    192.168.140.100    276
===========================================================================
Persistent Routes:
  None

IPv6 Route Table
===========================================================================
Active Routes:
 If Metric Network Destination      Gateway
  1    306 ::1/128                  On-link
 10    276 fe80::/64                On-link
 11    281 fe80::5efe:192.168.140.100/128
                                    On-link
 10    276 fe80::b965:91f3:33a0:7285/128
                                    On-link
  1    306 ff00::/8                 On-link
 10    276 ff00::/8                 On-link
===========================================================================
Persistent Routes:
  None

啟動CMD控制檯鍵入cmd或者cmd.exe,退出cmd可以通過命令exit。

PS C:\PS> cmd
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\PS>exit
PS C:\PS>

查詢可用的cmd控制檯命令

cmd.exe 通過 /c 來接收命令引數,在cmd中help可以檢視可用的命令,所以可以通過dmd /c help 查詢可用的cmd控制檯命令

PS C:\PS> cmd /c help
有關某個命令的詳細資訊,請鍵入 HELP 命令名
ASSOC          顯示或修改副檔名關聯。
ATTRIB         顯示或更改檔案屬性。
BREAK          設定或清除擴充套件式 CTRL+C 檢查。
BCDEDIT        設定啟動資料庫中的屬性以控制啟動載入。
CACLS          顯示或修改檔案的訪問控制列表(ACL)。
CALL           從另一個批處理程式呼叫這一個。
CD             顯示當前目錄的名稱或將其更改。
CHCP           顯示或設定活動內碼表數。
CHDIR          顯示當前目錄的名稱或將其更改。
CHKDSK         檢查磁碟並顯示狀態報告。
CHKNTFS        顯示或修改啟動時間磁碟檢查。
CLS            清除螢幕。
CMD            開啟另一個 Windows 命令解釋程式視窗。
COLOR          設定預設控制檯前景和背景顏色。
COMP           比較兩個或兩套檔案的內容。
COMPACT        顯示或更改 NTFS 分割槽上檔案的壓縮。
CONVERT        將 FAT 卷轉換成 NTFS。您不能轉換
               當前驅動器。
COPY           將至少一個檔案複製到另一個位置。
DATE           顯示或設定日期。
DEL            刪除至少一個檔案。
DIR            顯示一個目錄中的檔案和子目錄。
DISKCOMP       比較兩個軟盤的內容。
DISKCOPY       將一個軟盤的內容複製到另一個軟盤。
DISKPART       顯示或配置磁碟分割槽屬性。
DOSKEY         編輯命令列、呼叫 Windows 命令並建立巨集。
DRIVERQUERY    顯示當前裝置驅動程式狀態和屬性。
ECHO           顯示訊息,或將命令回顯開啟或關上。
ENDLOCAL       結束批檔案中環境更改的本地化。
ERASE          刪除一個或多個檔案。
EXIT           退出 CMD.EXE 程式(命令解釋程式)。
FC             比較兩個檔案或兩個檔案集並顯示它們之間的不同。
FIND           在一個或多個檔案中搜尋一個文字字串。
FINDSTR        在多個檔案中搜尋字串。
FOR            為一套檔案中的每個檔案執行一個指定的命令。
FORMAT         格式化磁碟,以便跟 Windows 使用。
FSUTIL         顯示或配置檔案系統的屬性。
FTYPE          顯示或修改用在副檔名關聯的檔案型別。
GOTO           將 Windows 命令解釋程式指向批處理程式
               中某個帶標籤的行。
GPRESULT       顯示機器或使用者的組策略資訊。
GRAFTABL       啟用 Windows 在圖形模式顯示擴充套件字符集。
HELP           提供 Windows 命令的幫助資訊。
ICACLS         顯示、修改、備份或還原檔案和
 目錄的 ACL。
IF             在批處理程式中執行有條件的處理過程。
LABEL          建立、更改或刪除磁碟的卷標。
MD             建立一個目錄。
MKDIR          建立一個目錄。
MKLINK         建立符號連結和硬連結
MODE           配置系統裝置。
MORE           逐屏顯示輸出。
MOVE           將一個或多個檔案從一個目錄移動到另一個目錄。
OPENFILES      顯示遠端使用者為了檔案共享而開啟的檔案。
PATH           為可執行檔案顯示或設定搜尋路徑。
PAUSE          停止批處理檔案的處理並顯示資訊。
POPD           還原由 PUSHD 儲存的當前目錄上一次的值。
PRINT          列印一個文字檔案。
PROMPT         改變 Windows 命令提示。
PUSHD          儲存當前目錄,然後對其進行更改。
RD             刪除目錄。
RECOVER        從損壞的磁碟中恢復可讀取的資訊。
REM            記錄批處理檔案或 CONFIG.SYS 中的註釋。
REN            重新命名檔案。
RENAME         重新命名檔案。
REPLACE        替換檔案。
RMDIR          刪除目錄。
ROBOCOPY       複製檔案和目錄樹的高階實用程式
SET            顯示、設定或刪除 Windows 環境變數。
SETLOCAL       開始用批檔案改變環境的本地化。
SC             顯示或配置服務(後臺處理)。
SCHTASKS       安排命令和程式在一部計算機上按計劃執行。
SHIFT          調整批處理檔案中可替換引數的位置。
SHUTDOWN       讓機器在本地或遠端正確關閉。
SORT           將輸入排序。
START          開啟單獨視窗執行指定程式或命令。
SUBST          將驅動器號與路徑關聯。
SYSTEMINFO     顯示機器的具體的屬性和配置。
TASKLIST       顯示包括服務的所有當前執行的任務。
TASKKILL       終止正在執行的程式或應用程式。
TIME           顯示或設定系統時間。
TITLE          設定 CMD.EXE 會話的視窗標題。
TREE           以圖形顯示啟動器或路徑的目錄結構。
TYPE           顯示文字檔案的內容。
VER            顯示 Windows 的版本。
VERIFY         告訴 Windows 驗證檔案是否正確寫入磁碟。
VOL            顯示磁碟卷標和序列號。
XCOPY          複製檔案和目錄樹。
WMIC           在互動命令外殼裡顯示 WMI 資訊。

啟動外部程式

為什麼可以通過notpad開啟記事本,不能通過wordpad開啟寫字板?
因為notepad.exe位於C:Windows\system32這個目錄,而這個目錄已經預設被包含在Powershell的環境變數$env:Path中。

C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x
86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program File
s (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files\Microsoft\Web Platform Installer\

而wordpad.exe 所在的“%ProgramFiles%\WindowsNT\Accessories\wordpad.exe“目錄卻沒有包含,可以先進入這個目錄,再執行wordpad,或者將wordpad所在的目錄加入到環境變數中,
$env:Path=$env:Path+”%ProgramFiles%\Windows NT\Accessories”。
預設鍵入一個字串,powershell會將它原樣輸出,如果該字串是一個命令或者啟動程式,在字串前加‘&’可以執行命令,或者啟動程式。

PS C:\PS> "ls"
ls
PS C:\PS> &"ls"

    Directory: C:\PS

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2011/11/23     17:25            ABC
-a---        2011/11/23     17:36         14 a.txt
-a---        2011/11/23     17:25          0 b.txt
-a---        2011/11/23     17:25          0 c.txt
-a---        2011/11/23     17:25          0 d.txt
-a---        2011/11/23     17:37        242 test.txt

PS C:\PS> "cmd.exe"
cmd.exe
PS C:\PS> &"cmd.exe"
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

別名

cmdlet 的名稱由一個動詞和一個名片語成,其功能對使用者來講一目瞭然。但是對於一個經常使用powershell命令的人每天敲那麼多命令也很麻煩啊。能不能把命令縮短一點呢?於是“別名”就應運而生了。Powershell內部也實現了很多常用命令的別名。例如Get-ChildItem,列出當前的子檔案或目錄。它有兩個別名:ls 和 dir,這兩個別名來源於unix 的shell和windows的cmd。
因此別名有兩個作用:

繼承:繼承unix-shell和windows-cmd。

方便:方便使用者使用。

處理別名:

查詢別名所指的真實cmdlet命令。

PS C:\PS> Get-Alias -name ls

CommandType     Name                                                Definition
-----------     ----                                                ----------
Alias           ls                                                  Get-ChildItem

PS C:\PS> Get-Alias -name dir

CommandType     Name                                                Definition
-----------     ----                                                ----------
Alias           dir                                                 Get-ChildItem

PS C:\PS> Get-Alias -name fl

CommandType     Name                                                Definition
-----------     ----                                                ----------
Alias           fl                                                  Format-List

PS C:\PS> Get-Alias -name ft

CommandType     Name                                                Definition
-----------     ----                                                ----------
Alias           ft                                                  Format-Table

檢視可用的別名

檢視可用的別名,可以通過” ls alias:” 或者 ”Get-Alias“
如何檢視所有以Remove打頭的cmdlet的命令的別名呢?

PS C:\PS> dir alias: | where {$_.Definition.Startswith("Remove")}

CommandType     Name                                                Definition
-----------     ----                                                ----------
Alias           del                                                 Remove-Item
Alias           erase                                               Remove-Item
Alias           rbp                                                 Remove-PSBreakpoint
Alias           rd                                                  Remove-Item
Alias           rdr                                                 Remove-PSDrive
Alias           ri                                                  Remove-Item
Alias           rjb                                                 Remove-Job
Alias           rm                                                  Remove-Item
Alias           rmdir                                               Remove-Item
Alias           rmo                                                 Remove-Module
Alias           rp                                                  Remove-ItemProperty
Alias           rsn                                                 Remove-PSSession
Alias           rsnp                                                Remove-PSSnapin
Alias           rv                                                  Remove-Variable
Alias           rwmi                                                Remove-WMIObject

說明:dir alias:獲取的是別名的陣列,通過where對陣列元素進行遍歷,$_代表當前元素,alias的Definition為String型別,因為powershell支援.net,.net中的string類有一個方法Startswith。通過where過濾集合在powershell中使用非常廣泛。

有的cmdlet命令可能有2-3個別名,我們可以通過下面的命令檢視所有別名和指向cmdlet的別名的個數。

PS C:\PS> ls alias: | Group-Object definition | sort -Descending Count

Count Name                      Group
----- ----                      -----
    6 Remove-Item               {del, erase, rd, ri...}
    3 Set-Location              {cd, chdir, sl}
    3 Get-History               {ghy, h, history}
    3 Get-ChildItem             {dir, gci, ls}
    3 Get-Content               {cat, gc, type}
    3 Move-Item                 {mi, move, mv}
    3 Copy-Item                 {copy, cp, cpi}
    2 Start-Process             {saps, start}
    2 Set-Variable              {set, sv}
    2 Write-Output              {echo, write}
    2 Get-Process               {gps, ps}
    2 Invoke-History            {ihy, r}
    2 New-PSDrive               {mount, ndr}
    2 Stop-Process              {kill, spps}
    2 Rename-Item               {ren, rni}
    2 Get-Location              {gl, pwd}
    2 Compare-Object            {compare, diff}
    2 Where-Object              {?, where}
    2 ForEach-Object            {%, foreach}
    2 Clear-Host                {clear, cls}
    1 Out-Host                  {oh}
    1 New-PSSession             {nsn}
    1 New-Variable              {nv}
    1 Out-GridView              {ogv}
    1 Pop-Location              {popd}
    1 Tee-Object                {tee}
    1 Remove-PSBreakpoint       {rbp}
    1 Receive-Job               {rcjb}
    1 Push-Location             {pushd}
    1 mkdir                     {md}
    1 Measure-Object            {measure}
    1 help                      {man}
    1 Remove-PSSnapin           {rsnp}
    1 Out-Printer               {lp}
    1 New-Item                  {ni}
    1 New-Module                {nmo}
    1 New-Alias                 {nal}
    1 Move-ItemProperty         {mp}
    1 Wait-Job                  {wjb}
    1 Remove-PSDrive            {rdr}
    1 Start-Service             {sasv}
    1 Set-PSBreakpoint          {sbp}
    1 Set-ItemProperty          {sp}
    1 Start-Job                 {sajb}
    1 Set-Alias                 {sal}
    1 Start-Sleep               {sleep}
    1 Set-Item                  {si}
    1 Select-Object             {select}
    1 Set-Content               {sc}
    1 Sort-Object               {sort}
    1 Remove-WMIObject          {rwmi}
    1 Remove-Module             {rmo}
    1 Rename-ItemProperty       {rnp}
    1 Stop-Service              {spsv}
    1 Set-WMIInstance           {swmi}
    1 Remove-Job                {rjb}
    1 Remove-Variable           {rv}
    1 Resolve-Path              {rvpa}
    1 Stop-Job                  {spjb}
    1 Remove-ItemProperty       {rp}
    1 Remove-PSSession          {rsn}
    1 Exit-PSSession            {exsn}
    1 Format-Custom             {fc}
    1 Enter-PSSession           {etsn}
    1 Export-Csv                {epcsv}
    1 Export-PSSession          {epsn}
    1 Format-List               {fl}
    1 Get-PSBreakpoint          {gbp}
    1 Get-Command               {gcm}
    1 Get-Alias                 {gal}
    1 Format-Table              {ft}
    1 Format-Wide               {fw}
    1 Export-Alias              {epal}
    1 Clear-History             {clhy}
    1 Clear-Item                {cli}
    1 Clear-Content             {clc}
    1 Add-Content               {ac}
    1 Add-PSSnapIn              {asnp}
    1 Clear-ItemProperty        {clp}
    1 Disable-PSBreakpoint      {dbp}
    1 Enable-PSBreakpoint       {ebp}
    1 Convert-Path              {cvpa}
    1 Clear-Variable            {clv}
    1 Copy-ItemProperty         {cpp}
    1 Invoke-Expression         {iex}
    1 Invoke-Item               {ii}
    1 Invoke-Command            {icm}
    1 Get-Variable              {gv}
    1 Get-WmiObject             {gwmi}
    1 Import-Alias              {ipal}
    1 powershell_ise.exe        {ise}
    1 Invoke-WMIMethod          {iwmi}
    1 Import-PSSession          {ipsn}
    1 Import-Csv                {ipcsv}
    1 Import-Module             {ipmo}
    1 Get-Unique                {gu}
    1 Get-Job                   {gjb}
    1 Get-Member                {gm}
    1 Get-Item                  {gi}
    1 Get-PSCallStack           {gcs}
    1 Get-PSDrive               {gdr}
    1 Get-Module                {gmo}
    1 Get-PSSnapIn              {gsnp}
    1 Get-Service               {gsv}
    1 Get-PSSession             {gsn}
    1 Get-ItemProperty          {gp}
    1 Group-Object              {group}

建立自己的別名

給記事本建立一個別名,並檢視該別名;

PS C:\PS> Set-Alias -Name Edit -Value notepad
PS C:\PS> Edit
PS C:\PS> $alias:Edit
notepad

刪除自己的別名

別名不用刪除,自定義的別名在powershell退出時會自動清除。但是請放心,powershell內建別名(諸如ls,dir,fl等)不會清除。如果你非得手工刪除別名。請使用

PS C:\PS> del alias:Edit

儲存自己的別名

可以使用Export-Alias將別名匯出到檔案,需要時再通過Import-Alias匯入。但是匯入時可能會有異常,提示別名已經存在無法匯入:

PS C:\PS> Import-Alias alias.ps1
Import-Alias : Alias not allowed because an alias with the name 'ac' already exists.
At line:1 char:13
+ Import-Alias <<<<  alias.ps1
    + CategoryInfo          : ResourceExists: (ac:String) [Import-Alias], SessionStateException
    + FullyQualifiedErrorId : AliasAlreadyExists,Microsoft.PowerShell.Commands.ImportAliasCommand

這時可以使用Force強制匯入。

PS C:\PS> Export-Alias alias.ps1
PS C:\PS> Import-Alias -Force alias.ps1

Powershell 通過函式擴充套件別名

在Powershell中設定別名的確方便快捷,但是在設定別名的過程中並設定引數的相關資訊。儘管別名會自動識別引數,但是如何把經常使用的引數預設設定在別名裡面呢?例如Test-Connection-Count 2 -ComputerName,讓-“-Count 2” 固化在別名中。
這時簡單的別名無法完成上述需求,可以通過函式來完成它,並且一旦把函式拉過來,定義別名會變得更加靈活。

PS C:\PS> function test-conn { Test-Connection  -Count 2 -ComputerName $args}
PS C:\PS> Set-Alias tc test-conn
PS C:\PS> tc localhost

Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms)
------        -----------     -----------      -----------                              -----    --------
test-me-01   localhost       127.0.0.1        ::1                                      32       0
test-me-01   localhost       127.0.0.1        ::1                                      32       0

Powershell執行檔案和指令碼

像執行可執行檔案一樣,Powershell執行檔案和指令碼,也必須使用絕對路徑或者相對路徑,或者要執行的檔案必須定義在可受信任的環境變數中。

關於指令碼

指令碼和批處理都屬於偽可執行檔案,它們只是包含了若干命令列直譯器能夠解釋和執行的命令列程式碼。

執行批處理檔案

批處理是副檔名為”.bat”的文字檔案,它可以包含任何cmd控制檯能夠處理的命令。當批處理檔案被開啟,Cmd控制檯會逐行執行每條命令。那Powershell能夠直接執行批處理嗎?
將下列命令儲存為ping.bat

@echo off
echo batch File Test
pause
Dir %windir%/system

然後執行ping
螢幕會列印ping命令幫助,說明呼叫的ping cmd 而不是ping.bat。
改為:

PS C:\PS> ./ping
batch File Test
Press any key to continue . . .
 Volume in drive C has no label.
 Volume Serial Number is 4E9B-D846

 Directory of C:Windowssystem

2009/06/11  05:21            69,584 avicap.dll
2009/06/11  05:21           109,456 avifile.dll
2009/07/14  05:41            32,816 COMMDLG.DLL
2009/07/14  05:41             2,000 keyboard.drv
2009/06/11  05:42             9,936 lzexpand.dll
2009/06/11  05:21            73,376 mciavi.drv
2009/06/11  05:21            25,264 mciseq.drv
2009/06/11  05:21            28,160 mciwave.drv
2009/07/14  05:41            68,992 MMSYSTEM.DLL
2009/07/14  05:41             1,152 mmtask.tsk
2009/07/14  05:41             2,032 mouse.drv
2009/06/11  05:21           126,912 msvideo.dll
2009/06/11  05:42            82,944 olecli.dll
2009/07/14  05:41            24,064 OLESVR.DLL
2009/07/14  05:41             5,120 SHELL.DLL
2009/07/14  05:41             1,744 sound.drv
2009/06/11  05:25             5,532 stdole.tlb
2009/07/14  05:41             3,360 system.drv
2009/07/14  05:41             4,048 TIMER.DRV
2009/06/11  05:42             9,008 ver.dll
2009/07/14  05:41             2,176 vga.drv
2009/07/14  05:41            12,704 WFWNET.DRV
              22 File(s)        700,380 bytes
               2 Dir(s)  75,927,420,928 bytes free

這時執行的是批處理。

通過cmd進入cmd控制檯輸入ping發現執行的不是ping命令,而是直接執行ping.bat ,也就是說可以通過.bat 覆蓋cmd命令。這種機制很危險,如果有人侵入電腦,並將系統內部命令篡改成自己批處理,那就太悲劇了。 這種命令與指令碼的混淆不會發生在powershell中,因為powershell有更安全的機制。

執行VB指令碼檔案

將下列命令儲存為test.vbs

Set wmi = GetObject("winmgmts:")
Set collection = wmi.ExecQuery("select * from Win32_Process")
For Each process in collection
WScript.Echo process.getObjectText_
Next

執行 .\test.vbs 會遍歷當前Win32程式,並把每個程式的詳細資訊通過視窗顯示出來。
怎樣讓VB指令碼的通過控制檯輸出呢?
Wscript //H:CScript
怎樣還原VB指令碼通過視窗輸出呢?
WScript //H:WScript
在powershell中執行VB指令碼

PS C:\PS> cscript.exe .test.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

instance of Win32_Process
{
        Caption = "System Idle Process";
        CreationClassName = "Win32_Process";
        CSCreationClassName = "Win32_ComputerSystem";
        CSName = "test-me-01";
        Description = "System Idle Process";
        Handle = "0";
        HandleCount = 0;
        KernelModeTime = "484113379271";
        Name = "System Idle Process";
        OSCreationClassName = "Win32_OperatingSystem";
        OSName = "Microsoft Windows 7 Enterprise |C:Windows|DeviceHarddisk0Partition2";
        OtherOperationCount = "0";
        OtherTransferCount = "0";
        PageFaults = 0;
        PageFileUsage = 0;
        ParentProcessId = 0;
        PeakPageFileUsage = 0;
        PeakVirtualSize = "0";
        PeakWorkingSetSize = 0;
        Priority = 0;
        PrivatePageCount = "0";
        ProcessId = 0;
        QuotaNonPagedPoolUsage = 0;
        QuotaPagedPoolUsage = 0;
        QuotaPeakNonPagedPoolUsage = 0;
        QuotaPeakPagedPoolUsage = 0;
        ReadOperationCount = "0";
        ReadTransferCount = "0";
        SessionId = 0;
        ThreadCount = 2;
        UserModeTime = "0";
        VirtualSize = "0";
        WindowsVersion = "6.1.7601";
        WorkingSetSize = "24576";
        WriteOperationCount = "0";
        WriteTransferCount = "0";
};

執行powershell指令碼

Powershell擁有自己的指令碼,副檔名為“.ps1”

PS C:\PS> echo "dir;Get-PSProvider;help dir" >test.ps1
PS C:\PS> Get-Content ./test.ps1
dir;Get-PSProvider;help dir
PS C:\PS> ./test.ps1

初次執行指令碼時,可能會碰到一個異常:
File ” C:\PS\test.ps1″ cannot be loadedbecause the
execution of scripts is disabled on this system. Please see
“get-help about_signing” for moredetails.
At line:1 char:10
+ .test.ps1 <<<<

這是powershell的預設安全設定禁用了執行指令碼,要啟用這個功能需要擁有管理員的許可權。

Powershell呼叫入口的優先順序

別名:控制檯首先會尋找輸入是否為一個別名,如果是,執行別名所指的命令。因此我們可以通過別名覆蓋任意powershell命令,因為別名的優先順序最高。

函式:如果沒有找到別名,會繼續尋找函式,函式類似別名,只不過它包含了更多的powershell命令。因此可以自定義函式擴充cmdlet 把常用的引數給固化進去。

命令:如果沒有找到函式,控制檯會繼續尋找命令,即cmdlet,powershell的內部命令。

指令碼:沒有找到命令,繼續尋找副檔名為“.ps1”的Powershell指令碼。

檔案:沒有找到指令碼,會繼續尋找檔案,如果沒有可用的檔案,控制檯會丟擲異常。
The term ‘now’ is notrecognized as the name of a cmdlet, function, script file, or operable program.Chec
g of the name, or if a path was included, verify that the path is correct andtry again.
At line:1 char:4
+ now <<<<
+ CategoryInfo : ObjectNotFound: (now:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

參考:pstips

相關文章