Powershell————2、Powershell交互式


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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com