2017-01-12

powershell 基本語法筆記

最近工作上的需要,用了 powershell 語法來處理,怪不得百敬老師非常推薦 powershell , powershell 功能十分強大,只可惜學習資源比較零碎,所以特別紀錄一下最近用到的語法,避免很快忘記又查了老半天XD


數字處理

  1. 比較大小

    $a -gt $b #($a 是否大於 $b)

字串處理

  1. 字串分割

    • 1-1.

      $$serveritem -split ','

    • 1-2.

      $serveritem.Split(',')

  2. 檢查是否為空值 (string.IsNullOrWhiteSpace)

    [string]::IsNullOrWhiteSpace($serveritem.ExcludeFolder)

  3. 比對字串開頭

    $stringVariable.StartsWith('startString','CurrentCultureIgnoreCase')

  4. 字串比對

    $stringVariable -eq "Value"

檔案處理

  1. 檔案內容轉成 json

    Get-Content -Raw -Path $filelocation | ConvertFrom-Json

  2. 檔案壓縮與解壓縮

    • v5
      • 壓縮
        • Compress-Archive -Path $sourceFolder -DestinationPath $archiveFile
        • e.g. Compress-Archive -Path D:\Downloads\Demo -DestinationPath D:\Downloads\demo.zip
      • 解壓縮
        • Expand-Archive -Path $archiveFile -DestinationPath $targetFolder
        • e.g. Expand-Archive -Path D:\Downloads\demo.zip -DestinationPath D:\Downloads\testPS
    • other
      • 壓縮
        • 語法
          Add-Type -AssemblyName 'System.IO.Compression.Filesystem'
          [System.IO.Compression.ZipFile]::CreateFromDirectory($folderSource,$fileDestination)
          
        • e.g.
          $folderSource='D:\Downloads\Demo'
          $fileDestination='D:\Downloads\demo.zip'
          
          Add-Type -AssemblyName 'System.IO.Compression.Filesystem'
          [System.IO.Compression.ZipFile]::CreateFromDirectory($folderSource,$fileDestination)
          
      • 解壓
        • 語法
          Add-Type -AssemblyName 'System.IO.Compression.Filesystem'
          [System.IO.Compression.ZipFile]::ExtractToDirectory($fileSource, $folderDestination)
          
        • e.g.
          $fileSource='D:\Downloads\demo.zip'
          $folderDestination='D:\Downloads\testPS'
          Add-Type -AssemblyName 'System.IO.Compression.Filesystem'
          [System.IO.Compression.ZipFile]::ExtractToDirectory($fileSource, $folderDestination)
          

List 處理

  1. 多個 List 取交集或是聯集

    $a = (1,2,3,4)
    $b = (1,3,4,5)
    
    • 1-1. 聯集

      $a + $b | select -uniq #union

    • 1-2. 交集

      $a | ?{$b -contains $_} #intersection

  2. List 加入 item

    • 2-1. 宣告個空的 List

      $a = New-Object System.Collections.ArrayList

    • 2-2. 加入項目
      • $a.Add('data')
      • $a.Add('test')

Credential 相關

  1. 指定 Credential
    #用來儲存密碼(僅需輸入一次,會加密儲存)
    read-host -assecurestring | convertfrom-securestring | out-file C:\securestring.txt 
    #取出密碼(以下兩句效果相同)
    $pass = ConvertTo-SecureString -String (Get-Content C:\securestring.txt)  
    #$pass = cat C:\securestring.txt | convertto-securestring  
    #使用 username 及 密碼  建立 credential
    $Cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "AD\username",$pass    
    
  2. 取得密碼明碼

    $cred.GetNetworkCredential().Password

Windows 服務相關

  1. 取得服務狀態

    Get-Service -Name "serviceName" #Get-Service -Name "aspnet_state"

  2. 停用服務

    Stop-Service -Name "aspnet_state"

  3. 啟用服務

    Start-Service -Name "aspnet_state"

IIS 相關

  1. AppPool
  • 1-1. 取得特定 AppPool 狀態

    Get-WebAppPoolState -Name "appPoolName"

  • 1-2. 停用 AppPool

    Stop-WebAppPool -Name "appPoolName"

  • 1-3. 啟用 AppPool

    Start-WebAppPool -Name "appPoolName"

  1. Website
  • 2-1. 取得特定網站狀態

    Get-WebsiteState -Name "websiteName"

  • 2-2. 停用特定網站

    Stop-Website -Name "websiteName"

  • 2-3. 啟用特定網站

    Start-Website -Name "websiteName"

動態組成指令

$ExecutionContext.InvokeCommand.NewScriptBlock(" /XD $parameter")

遠端執行

- Invoke-Command
    - e.g. `Invoke-Command –ComputerName Production1 {$env:COMPUTERNAME}`
    - 傳遞參數
        `Invoke-Command -ComputerName $Computer -ScriptBlock {param($comp) write-host "This script is running on machine: $Comp" } -ArgumentList $Computer`
- New-PSSession
    - e.g. 
        ```
        New-PSSession –ComputerName Production1
        Enter-PSSession {sessionID}
        ```

無線網路服務

  1. 確認無線網路服務的狀態

    Get-WindowsFeature *Wireless*

  2. 安裝無線網路服務

    Install-WindowsFeature -Name Wireless-Networking

  3. 啟動服務

    net start WlanSvc

參考資料

  1. passing array of strings into function
  2. Arrays
  3. Windows PowerShell: When to Choose Workflow Versus Script Functions
  4. Creating a Workflow by Using a Windows PowerShell Script
  5. Invoke-Command
  6. POWERSHELL 常見問題 (繁體中文)
  7. 如何在遠程伺服器上運行PowerShell命令?
  8. PowerShell - Testing if a String is NULL or EMPTY
  9. 執行遠端命令
  10. Using the Get-Service Cmdlet
  11. How to pass a param to script block when using invoke-command
  12. 基本操作手冊參考
  13. Windows PowerShell 5.0

沒有留言:

張貼留言