久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    愛上PowerShell

     睡神在在 2017-08-08

    Shell帶來的好處是毋庸置疑的,當然也需要大量的時間去練習。PowerShell作為后起之秀,同時試圖打造一款更加人性化,更加易用的Shell。隨著PowerShell開源跨平臺的戰略以及在Windows下的的崛起,PowerShell有望成為下一個更加流行的Shell。
    當然,PowerShell吸引我的地方不僅僅是開源跨平臺,而在于PowerShell吸收了Shell的眾多優點,同時進行了精心設計,從一個程序員的角度出發,PowerShell簡單而又貼心的設計吸引著我去學習它并使用它。


    下面列舉一些PowerShell讓我著迷的地方:

    完善的幫助文檔

    學習Powershell應該從Get-Help學起,熟練使用這個命令將增加使用者的信心,掌握Get-Help的用法可以避免你把Powershell的每個命令都學習一遍。
    下面用一個簡單例子說明如何Get-Help,設想這樣一個場景:
    你想通過命令行查看所有進程,你第一個反應應該是用一個跟Process相關的命令來達到此目的,所以你可能會嘗試執行:

    Get-Command *Process

    于是你得到了下面的列表:
    Get-Command
    再通過Get-Help命令來查看詳細用法:

    Get-Help Get-Process -full

    就能得到Get-Process的詳細用法和Examples,當然你還可以通過Get-Help Get-Process -Examples只查看Examples。
    Get-Help


    一致性

    這種一致性體現在PowerShell的方方面面,他只有少許簡單的規則,使用者只需要記住少量規則就能推斷出代碼的意圖。
    以Powershell的命令為例,只需簡單一步即可弄清楚各種文件操作命令:

    1. Get-Help FileSystem

    下面截取了一段關于文件和文件夾的復制操作例子:
    Get-Help
    再看看有哪些命令用來操作文件:

    New-Item #新建
    Rename-Item #重命名
    Copy-Item #復制
    Get-ChildItem #列出所有文件
    ...

    你能推斷出移動文件和刪除文件的命令嗎?沒錯,他們分別是:Move-ItemRemove-Item
    讀/寫文件分別是:Get-ContentSet-Content

    想快速搞清楚New-Item的用法?使用 Get-Help New-Item -Examples

    也許你覺得這些命令相對于ls/cp.rm/rmdir/mv/cat有些繁瑣,你可以使用Alias:

    Get-Alias -Definition New-Item

    Get-Alias
    所以New-Itemni是等效的,不過在智能提示和Tab鍵的幫助下,New-Item表達的意圖比起ni清晰多了。

    你之所以能快速掌握PowerShell對文件的操作,一個重要的因素就是因為他的命令和參數遵循了一致性的設計原則,你可以通過復制文件命令Copy-Item推斷出移動文件命令為Move-Item,你可以把時間花費在如何解決問題上,而不是去鉆研各種稀奇古怪的命令和用法。

    正如王垠所言,一門優秀的語言應該像中國象棋,只需少量規則就可以玩,或者說每條規則都很直截了當。反之有著復雜規則的語言像國際象棋,會有“王車易位”這樣復雜古怪的規則。


    提供了可以被flow的模塊化機制

    作為一個輕量級的腳本語言,一個可以被flow的骨架或者模塊化機制是必要的,PowerShel提供了普通的腳本文件用來編寫規模較小的腳本。

    針對一個函數提供了一個模板,促使你寫出更加規范的腳本:

    function Get-PSFiles()
    {
        begin{
            #...
        }
    
        process{
            #...
        }
    
        end{
            #...
        }
    }

    同時提供了Module來編寫模塊化的腳本。使用Export-ModuleMember還可以決定某個函數是不是可以暴露給用戶。


    一個面向對象的Shell

    不同于Linux下的Bash, 你需要熟練掌握字符串的操作方法, PowerShell是一個面向對象的shell,所有命令和返回結果都是基于對象的,這意味著你可以通過調用返回對象的方法來達到同樣的目的。
    通過管道符列出對象的所有成員:
    Get-Member
    由于返回值是一個對象,所以我們可以通過調用對象本身的方法、屬性來達到操作字符串的目的。
    基于對象還可以很輕松的做出排序、分組、過濾操作,例如按照屬性vm排序就可以通過下面的命令來完成:
    Get-Process | Sort-Object -Property vm

    再想想你在Bash下如何實現這個功能。


    鑒于PowerShell有著以上眾多優秀的設計,我幾乎沒花費多久就可以輕松使用這個工具,這讓我想起學習Linux Bash的經歷,我曾經花費了大把的時間浪費在折騰各種稀奇古怪的問題上,把自己沉浸在別人設計的復雜的規則中,更郁悶的是好不容易記住的一些命令及其參數,一旦不去使用就會忘記。

    開始我們的PowerShell之旅吧!

    PsGet-Powershell中的包管理工具

    PsGet本身是一個PowerShell的Module,PsGet可以通過兩種安裝方式,

    • 方式一:直接在PowerShell執行這個命令
    (new-object Net.WebClient).DownloadString("http:///GetPsGet.ps1") | iex

    iexInvoke-Expression的別名,用來執行一段PowerShell腳本,所以上面的命令等價于:

    Invoke-Expression (new-object Net.WebClient).DownloadString("http:///GetPsGet.ps1")

    而http:///GetPsGet.ps1返回了一段PowerShell腳本,腳本的大概內容是將PsGet的Module保存在PowerShell默認的Module目錄。Module一旦被安裝在PowerShell的缺省目錄,就可以直接在PowerShell命令行使用該Module了。

    • 方式二:既然能夠通過PowerShell腳本來自動安裝,就可以通過手動的方式完成同樣的操作。該手動安裝方法同樣適用于其他無法通過PsGet管理的Module。
      該手動安裝過程包括兩步:
    1. 從https://github.com/psget/psget/ 下載PsGet.psm1
    2. 把PsGet.psm1拷貝到PowerShell默認的Module目錄
      通過$env:PSModulePath命令得到默認的Module目錄
      Module-path

    PsGet安裝完畢,安裝幾個常用的PowerShell工具來試試看:


    文件夾書簽-go

    Install-Module go

    go非彼go, 這里的go是PowerShell中的一個書簽工具,玩shell的痛點之一在于經常需要在不同的文件夾下切換,據我觀察隔壁耍命令行的大叔90%都是cd,看看這個工具如何來幫助我們?

    通過 gd -help 來查看go的玩法

    通過gd label -add的方式把當前目錄加入的書簽中

    C:\Windows> gd windows -add

    然后在任意目錄即可通過gd label的方式切入到書簽所在的目錄

    C:\Works> gd windows
    C:\Windows>

    pscx工具集

    Install-Module pscx

    pscx是PowerShell Community Extensions的縮寫,很明顯這個工具集是對PowerShell的補充,提供了諸多命令:

    Get-Command -Module pscx

    pscx


    構建自動化build腳本工具psake

    Install-Module psake

    psake是一個用來構建自動化build腳本的工具,他的靈感來源于Ruby中的rake,當然跟一些前端的工具諸如gulp也有點類似。利用該工具,用戶可以通過簡單且模塊化的腳本方式來構建build腳本。

    一個具有編譯、打包.net控制臺程序的腳本如下:

    task -name Build -description "builds artifacts" -action{
        exec{
            msbuild ./ConsoleApplication1/ConsoleApplication1.csproj /t:build /p:Configuration=debug
        }
    }
    
    task -name Clean -description "deletes artifacts" -action{
        exec{
            msbuild ./ConsoleApplication1/ConsoleApplication1.csproj /t:clean /p:Configuration=debug
        }
    }
    
    task -name Rebuild -depends Clean,Build -description "rebuilds all artifacts from source"
    
    task -name PackageZip -depends Build -description "produces a zip archive of the build output" -action{
        dir ./ConsoleApplication1/bin/debug | write-zip -output app.zip
    }

    以上腳本定義了4個task,分別為Build,Clean,Rebuild,PackageZip。

    通過下面命令來執行Rebuild任務

    Invoke-psake -buildFile .\default.ps1 Rebuild

    psake

    當然你可以在PsGet的倉庫中找到更多的工具。


    通過PSSession來執行遠程命令

    PowerShell容許你在遠程機器上運行命令,這種方式有點類似于在遠程Terminal上使用SSH。

    Enter-PSSession -ComputerName 127.0.0.1 -Port 5985 -Credential richie

    以本機為例,通過Enter-PSSession命令開啟了遠程命令行,進而以登錄用戶的權限執行PowerShell命令。
    pssession


    跨平臺

    2016年8月份,微軟宣布開源PowerShell,并且發布基于dotnet core的linux和mac版本,github提供了不同平臺的安裝方式。

    下圖展示了如何在Mac下使用PowerShell,有沒有覺得很帥氣。
    Mac-ps


    Azure PowerShell

    Azure提供了一整套的PowerShell腳本來管理Azure,你可以使用Azure提供的PowerShell來創建和配置云服務、虛擬機、虛擬網絡以及應用程序。

    例如,你可以使用下面的命令登錄你的Azure賬號:

    Login-AzureRmAccount

    用下面的命令創建資源組

    New-AzureRmResourceGroup

    使用下面的命令來創建一臺虛擬機

    New-AzureRmVM
    ...

    所有這些操作都等同于你直接操作Azure Portal


    PowerShell Desired State Configuration(DSC)

    DSC是基于PowerShell的一套資源管理組件,用來幫助用戶部署和管理應用程序。該擴展吸取了一些語言或者框架的設計靈感,旨在通過申明的方式來達到配置和維護應用程序環境的目的。

    例如下面的腳本片段用來安裝IIS以及創建一個Website

     WindowsFeature IIS  
            {  
                Ensure          = "Present"
                Name            = "Web-Server"
            }  
    
            WindowsFeature IISManagement  
            {  
                Ensure          = "Present"
                Name            = "Web-Mgmt-Console"
                DependsOn       = "[WindowsFeature]IIS"
            } 
      
            xWebsite DefaultSite   
            {  
                Ensure          = "Present"
                Name            = "Default Web Site"
                State           = "Stopped"
                PhysicalPath    = "C:\inetpub\wwwroot" 
                DependsOn       = "[WindowsFeature]IIS"
            }  

    DSC通過聲明的方式來完成對資源的管理和配置,將使用者的重心從如何實現轉移到達到何種目的


    總結

    正如本文所說,PowerShell是一款經過精心設計的shell,也是對開發人員和管理人員十分友好的一個工具,本文總結了PowerShell的一些使用場景,感興趣的同學可以繼續學習如何編寫PowerShell腳本,雖然PowerShell已經跨平臺,但是目前階段還只在Windows下發力,期待在未來,PowerShell能夠在Linux和Mac上發展的越來越好。

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 成年女人片免费视频播放A| 中文字幕亚洲无线码A| 国产尤物精品自在拍视频首页| 中文字幕国产精品日韩| 2021国产精品视频网站| 国产欧美综合在线观看第十页| 一区二区三区鲁丝不卡| 天堂久久久久VA久久久久| 亚洲国产精品久久电影欧美 | 免费又黄又爽又猛的毛片| 无码人妻精品一区二区三区蜜桃| 夜夜爽妓女8888视频免费观看| 中文有无人妻vs无码人妻激烈| 亚洲人成小说网站色在线 | 午夜通通国产精品福利| 丰满少妇2中文在线观看| 久久久久波多野结衣高潮| 四虎在线播放亚洲成人| 国产毛1卡2卡3卡4卡免费观看| 久久婷婷综合色丁香五月| 亚洲第一极品精品无码久久| 国产香蕉尹人综合在线观看| 国产丰满美女A级毛片| 国产尤物精品自在拍视频首页| 又黄又无遮挡AAAAA毛片| 综合偷自拍亚洲乱中文字幕| 最新国产麻豆AⅤ精品无码| 亚洲av成人无码天堂| 一区二区三区无码高清视频| av中文字幕一区二区| 又大又粗又爽A级毛片免费看| 中文亚洲成A人片在线观看| 久久精品国产亚洲AV高清热| 国产97人人超碰CAO蜜芽PROM| 色狠狠色婷婷丁香五月| 久久精品国产久精国产一老狼| 国产成AV人片久青草影院| gogogo高清在线观看视频中文| 国产在线高清视频无码| 丰满无码人妻热妇无码区| 最新亚洲av日韩av二区|