Powershell(3)

megachen發表於2018-08-20

Powershell

可以使用powershell管理的服務

  • share point, exchange, lync, windows azure, window server, system center, vmware, sql server, visual studio, 硬體
  • .NET Framework是一個量身為windows定製的框架, 一款API, 解決了很多問題, .NET Framework解決了C/C++的記憶體管理, 大部分的程式執行在.NET Framework上, Window Management Frame安裝的前提是安裝了.NET Framework, 在windows上可以安裝多個.NET framework, 這樣是為了相容性考慮, 多裝一點好一點, 他是一個程式設計體系, 簡單的講這就是個類庫,有很多遊戲或者軟體都呼叫這個類庫裡的方法
  • WinRM(預設不開啟, 是協議的實現)
  • WMF(Windows Management Framework)可以安裝在Linux上
  • windows 羨慕Linux的命令列, 但是因為Linux的設計裡面是檔案, 而windows是API, 所以採用了powershell這個平臺, ps的引擎一直都是沒有變的
  • system Int 32
  • system string
  • system boolean
  • system collection hashtable

    命令

  • get-service
  • format-volume
  • 服務: bit, bits一般不怎麼用
  • update-help -UIculture zh-CN
  • set, new, add, remove等涉及到修改類的需要指定-Name
  • 如果get-help沒有更新, 也不影響卡語法
  • enable-bitlocker: 對driver加密
  • 輸出的為物件, print物件的string
  • get-member: 獲取物件成員 –> get-service | get-member –> 通過管道返回service物件的屬性(屬性和方法, 類似於python中的dir(obj))
  • 輸出的列明為屬性名, 輸出的不一定是該物件所有的屬性, 而是一些可以輸出的屬性, 如果要全部, get-service | select-object *, 簡短的; 或者 get-service | get-member 複雜的
  • 輸出的都是一行一行的表格, 其實他們是一個system.array物件, 輸出的是該物件中的物件的str資訊, 學過java和python懂得
  • 接受管道傳來的物件是命令的引數, 通過get-help檢視paramter, 檢視是否接受管道, 還有接受管道的優先順序別

命令使用案例

  1. $var = “1” –> $var.gettype().fullname
  2. [system.int32]$a = “1” –> 提供強制轉型
  3. $services = get-services –> (services | foreach-object {)_.name}
  4. foreach-object必須在管道後面, foreach必須另起一行

    foreach ($item in $services) {
        $item.name
        $item.start()
        $item.stop()
    }
  5. for迴圈
    for ($i = 0; $i -le 100; $i++) { $i }

  6. 定義陣列$arr = @(`a`, `b`, `c`)
  7. 陣列: .count[元素個數], $arr[0]
  8. $host.ui.writedebugline(`error`)
  9. $error為內建的全域性變數, 是一個array, 存放異常物件
  10. $env:path –> 顯示環境變數的值, $env:pathext等等
  11. write-host, write-output, write –> echo
  12. `符是Linux中的作用
  13. $args為引數變數
  14. $erroractionperformance –> 命令錯誤的動作
  15. invokecommand -ComputerName name -ScriptBlock {…}–> 對遠端計算機執行命令, 類似於rpc, 但是在win上是WinRM, 將scriptblock內部東西推送到執行
  16. 反序列化物件沒有close和dispose等方法
  17. system.object是所有的類的父類, 有gettype和tostring方法


為了深入瞭解序列化與反序列化的案例

    enable-psremoting -force
    set-wsmanquickconnfig -force

    invoke-command -computername win2012 scriptblock {get-service -name alg} | get-member
    那麼對於get-member命令是在本地執行的, 而get-service -name alg是推送到遠端主機執行的, 遠端執行完畢之後將得到的物件序列化返回給本地主機, 本地主機將該序列化物件進行反序列化轉為反序列化
物件, 此物件是沒有close(), dispose()等方法的
    invoke-command -computername win2012 scriptblock {get-service -name alg | get-member}

服務

  • alg: application layer gateway service
  • bit, bits, winrm

遠端連線(在windows server 2012 r2預設已經配置好了)

  • HTTP/HTTPS
  • 偵聽器
  • 開啟服務 set-msmanquickconfig
  • 註冊偵聽器 http5985 https5986
如何開啟(powershell管理遠端, 客戶端與服務端):
    enable-psremoting -force
    set-wsmanquickconfig -force
  • 本地信任列表

提供程式(這裡面的項看起來是檔案, 其實不是)

  • get-childitem wsman: –> 與遠端連線有關, 使用set-item trusthost -value 192.168.1.7 新增信任
  • cert
  • hklm
  • hkcu
  • IIS


相關文章