本文給大家簡單描述了一下POWERSHELL和CMD的區別,簡單的說,Powershell是cmd的超集,換句話說,cmd能做的事情,Powershell都能做,但是Powershell還能額外做許多cmd不能做的活。
cmd是和powershell都可以做命令行交互,批處理和powershell腳本功能也相當。
我不知道你怎么理解cmd,但下面是powershell是基於.net的,只要你足夠了解.net,你可以使用她做任何你想做的事情。
Windows PowerShell 是專為系統管理員設計的新 Windows 命令行 shell。Windows PowerShell 包括交互式提示和腳本環境,兩者既可以獨立使用也可以組合使用。
與接受和返回文本的大多數 shell 不同,Windows PowerShell 是在 .NET Framework 公共語言運行時 (CLR) 和 .NET Framework 的基礎上構建的,它接受和返回 .NET Framework 對象。環境中的這一根本更改帶來了管理和配置 Windows 的全新工具和方法。
Windows PowerShell 引入了 cmdlet(讀作“command-let”)的概念,這是內置到 shell 中的一個簡單的單一功能命令行工具。可以分別使用每個 cmdlet,但是組合使用這些簡單的工具執行復雜任務時才發揮其作用。Windows PowerShell 包括一百多個基本的核心 cmdlet,您可以編寫自己的 cmdlet 並與其他用戶共享它們。
與許多 shell 一樣,Windows PowerShell 為您提供了對計算機上文件系統的訪問。此外,使用 Windows PowerShell 提供程序還可以訪問其他數據存儲,如注冊表和數字簽名證書存儲,就像訪問文件系統一樣容易。
簡單的說,Powershell是cmd的超集,換句話說,cmd能做的事情,Powershell都能做,但是Powershell還能額外做許多cmd不能做的活。
主要是系統管理功能、腳本語言和在線幫助更強大,你確實可以只把它當成cmd來用,也可以學和用得更深
powershell的優點
沒有做不到,只有想不到。用 PowerShell 甚至可以 Load C/C++ 寫的 dll,然后執行里面的代碼,COM 就不說了。跑題了,題主問不同,竊以為 PowerShell 和 cmd 最大的不同,並且也是和其它 *nix Shell 最大的不同在於 PowerShell 的 pipe 傳遞的是 .net object,而不是 raw 字符串,於是這就打開了一扇神奇的大門,因為 PowerShell 的一切組件都可以和諧地共存,彼此不用互相猜忌,不用猜你喂給我的數據合不合法,也不用擔心我喂給你的參數格式對不對。大家共享一個 CLR,擁有豐富的 metadata,自由自在地在 .net 的世界里徜徉和探索。順帶宣傳一下 https://chocolatey.org/ ,Windows 的 apt-get,基於 PowerShell
PowerShell為什么強大
微軟是一個很”低調”的公司,取名為微軟,感覺有“微微軟下去”的意思,這是個玩笑了。windows 操作系統 和office辦公軟件,如此之優秀,微軟也沒敢命名為PowerOS 和 PowerOffice,但是在Monad(PowerShell的前身)發布后的第二年(2006年),微軟就直接就發布了Windows PowerShell 1.0,並且”大言不慚“地命名為PowerShell,這也有點太不淡定了。
今天我根據自己的體驗來稍微總結一下為什么PowerShell如此之強大。
破天荒的方便
諸如存儲計算中GB,MB,KB單位等;數組聲明中的1..n和下標為-1的處理;還有所見即所得,通俗易懂的動詞+名詞結構Cmdlet。
面向對象
與面向過程相比,面向對象更方便更容易描述現實世界,也算趕上了時髦。
綁上.NET這棵大樹
正所謂大樹下面好乘涼,PowerShell綁上.NET這個大款了,借助.NET Framework平台強大的類庫,幾乎讓一切都成為可能。
強大的兼容性
完全兼容windows 平台上其它調用,如可執行文件(exe),批處理bat和vb script等。
基於平台的可擴展性
微軟有個優點,與應用相比,它更喜歡做平台。PowerShell早已變成一個平台,在PowerShell 剛發布的第二年,微軟的System Center Operations Manager 和 SharePoint就提供了針對該平台的組件,后來的活動目錄,Hyper-V,Windows Azure,Office 365就更不用說了。除了微軟,亞馬遜的雲平台管理,Dell的out-of-hand 管理,也都提供了基於PowerShell的管理組件。PowerShell 儼然變成了一個標准,變成了一個規范。
舉例介紹
如果您第一次聽說過PowerShell,想稍微觀望下,且看下面的10個例子。
[數學計算] (39+79-51)*497/28 = ?
心算再快,應當也沒有敲回車鍵快吧:
1
2
|
PS
> (39+79-51)*497/28
1189.25
|
[日期] 距離下一個情人節還有多少分鍾?
我知道距離多少天好算,如果變成分鍾呢?
1
2
3
4
5
6
7
8
|
$now
=
Get-Date
$day
=[datetime]
'2-14'
if(
$now
-lt
$day
){
$day
.Subtract(
$now
).TotalMinutes
}
else{
$day
.AddYears(1).Subtract(
$now
).TotalMinutes
}
|
[容量] 3GB > 3145726KB嗎 ?
1
2
|
PS
> 3gb
-gt
3145726kb
True
|
[ID]能產生一個GUID嗎?
1
2
3
4
5
|
PS
> [guid]::NewGuid()
Guid
----
0f283ab4-f402-400c-98ce-359442f11f1a
|
[文件] Windows目錄下所有可執行文件exe的大小是多少?
1
|
dir
$env
:windir
-Filter
*.exe | measure
-Sum
Length
|
[注冊表] 注冊表路徑HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 下 ‘Enable64Bit'的值是多少?
1
|
(
Get-ItemProperty
-Path
hklm:SOFTWARE\Microsoft\.NETFramework ).Enable64Bit
|
[證書] 指紋為[28DE15612AFF1CD69596AB17AF06AE86CB9C003B]的證書在證書存儲區嗎?
1
2
|
ls
Cert:\LocalMachine\My\ |
where
{ $_.Thumbprint
-eq
'28DE15612AFF1CD69596AB17AF06AE86CB9C003B'
}
|
[服務] 打印機服務有沒有啟動呢?
1
|
Get-Service
spooler
|
[進程] 當前運行了多少個IE進程?
1
|
(
Get-Process
iexplore ).count
|
[報表] 將所有運行的進程信息導出為HTML報表?
1
|
Get-Process
|
ConvertTo-Html
|
Out-File
a.html
|
現在知道了powershell的強大了吧,在windows平台powershell還是比較好用的。
--Windows常用工具類:
運行程序 運行命令
記事本 notepad
計算器 calc
畫圖 mspaint
寫字板 write
Windows放大鏡 magnify
輔助工具管理器 utilman
Telnet客戶端 telnet
任務管理器 taskmgr
關閉Windows shutdown
掃描儀與相機 sticpl.cpl
遠程桌面 mstsc
可移動存儲 ntmsmgr.msc
注冊表編輯器 regedit
TrueType造字程序 eudcedit
打印機文件夾 printers
打印機和傳真 control printers
控制面板 control
屏幕鍵盤 osk 網絡連接 ncpa.cpl 或control netconnections
從Windows注銷 logoff 字體文件夾 fonts 或control fonts
磁盤管理 diskmgmt.msc
快速查找 findfast.cpl
磁盤碎片整理程序 dfrg.msc
磁盤檢查工具 chkdsk
磁盤清理工具 cleanmgr
剪貼簿查看器 clipbrd
輔助功能選項 access.cpl
添加硬件向導 hdwwiz.cpl
添加或刪除程序 appwiz.cpl
常用管理配置工具
設備管理器 devmgmt.msc
Direct X控制面板(如果已經安裝) directx.cpl
Direct X診斷工具 dxdiag
磁盤分區管理器 diskpart 顯示屬性 desk.cpl 或 control desktop
文件夾選項 control folders
顯示屬性的外觀選項卡 control color
文件簽名驗證 sigverif
IP配置實用程序 ipconfig
鍵盤屬性 control keyboard
鼠標屬性 main.cpl 或 control mouse
Internet屬性 inetcpl.cpl
密碼屬性 assword.cpl
電話與調制解調器選項 telephon.cpl
電源選項屬性 powercfg.cpl
性能 perfmon
區域和語言選項 intl.cpl
系統屬性 sysdm.cpl
用戶帳戶管理 nusrmgr.cpl
Windows防火牆 firewall.cpl
運行Windows更新 wupdmgr
系統配置實用程序 msconfig
聲音和音頻設備屬性 mmsys.cpl
共享文件夾 fsmgmt.msc
服務 services.msc
Windows安全中心 wscui.cpl
————————————————
下面我們看看能由Windows PowerShell完成的最常見的25個任務。不止是這些任務很簡單,顯示語句的命令架構和其他PowerShell命令也很簡單。掌握好這些基本命令是成為PowerShell專家的必經之路。
入門級別
1. 像文件系統那樣操作Windows Registry——cd hkcu:
2. 在文件里遞回地搜索某個字符串——dir –r | select string "searchforthis"
3. 使用內存找到五個進程——ps | sort –p ws | select –last 5
4. 循環(停止,然后重啟)一個服務,如DHCP——Restart-Service DHCP
5. 在文件夾里列出所有條目——Get-ChildItem – Force
6. 遞歸一系列的目錄或文件夾——Get-ChildItem –Force c:\directory –Recurse
7. 在目錄里移除所有文件而不需要單個移除——Remove-Item C:\tobedeleted –Recurse
8. 重啟當前計算機——(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(2)
收集信息
9. 獲取計算機組成或模型信息——Get-WmiObject -Class Win32_ComputerSystem
10. 獲取當前計算機的BIOS信息——Get-WmiObject -Class Win32_BIOS -ComputerName .
11. 列出所安裝的修復程序(如QFE或Windows Update文件)——Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .
12. 獲取當前登錄計算機的用戶的用戶名—— Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .
13. 獲取當前計算機所安裝的應用的名字——Get-WmiObject -Class Win32_Product -ComputerName . | Format-Wide -Column 1
14. 獲取分配給當前計算機的IP地址——Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress
15. 獲取當前機器詳細的IP配置報道——Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
16. 找到當前計算機上使用DHCP啟用的網絡卡——Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .
17. 在當前計算機上的所有網絡適配器上啟用DHCP——Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}
軟件管理
18. 在遠程計算機上安裝MSI包——(Get-WMIObject -ComputerName TARGETMACHINE -List | Where-Object -FilterScript {$_.Name -eq "Win32_Product"}).Install(\\MACHINEWHEREMSIRESIDES\path\package.msi)
19. 使用基於MSI的應用升級包升級所安裝的應用——(Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='name_of_app_to_be_upgraded'").Upgrade(\\MACHINEWHEREMSIRESIDES\path\upgrade_package.msi)
20. 從當前計算機移除MSI包——(Get-WmiObject -Class Win32_Product -Filter "Name='product_to_remove'" -ComputerName . ).Uninstall()
機器管理
21. 一分鍾后遠程關閉另一台機器——Start-Sleep 60; Restart-Computer –Force –ComputerName TARGETMACHINE
22. 添加打印機——(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection(\\printerserver\hplaser3)
23. 移除打印機——(New-Object -ComObject WScript.Network).RemovePrinterConnection("\\printerserver\hplaser3 ")
24. 進入PowerShell會話——invoke-command -computername machine1, machine2 -filepath c:\Script\script.ps1