擴充PowerShell Core指令集,以SqlServer模組為例

擴充PowerShell Core指令集,以SqlServer模組為例

在前面談到 PowerShell Core 的指令可能沒有 PowerShell 來的全面,預設 PowerShell Core 只提供最核心的模組功能,但放心,從 PowerShell 時期就能通過模組(Module)來擴充,我可以透過 https://www.powershellgallery.com 來查詢與安裝,或利用 Get-Module 來查詢:

PS C:\> Get-Module -ListAvailable


    Directory: C:\program files\powershell\6\Modules

ModuleType Version    Name                                PSEdition ExportedCommands
---------- -------    ----                                --------- ----------------
Manifest   6.1.0.0    CimCmdlets                          Core      {Get-CimAssociatedInstance, Get-CimClass, Get-CimInstance, Get-CimSession…}
Manifest   1.2.3.0    Microsoft.PowerShell.Archive        Desk      {Compress-Archive, Expand-Archive}
Manifest   6.1.0.0    Microsoft.PowerShell.Diagnostics    Core      {Get-WinEvent, New-WinEvent}
Manifest   6.1.0.0    Microsoft.PowerShell.Host           Core      {Start-Transcript, Stop-Transcript}
Manifest   6.1.0.0    Microsoft.PowerShell.Management     Core      {Add-Content, Clear-Content, Clear-ItemProperty, Join-Path…}
Manifest   6.1.0.0    Microsoft.PowerShell.Security       Core      {Get-Acl, Set-Acl, Get-PfxCertificate, Get-Credential…}
Manifest   6.1.0.0    Microsoft.PowerShell.Utility        Core      {Export-Alias, Get-Alias, Import-Alias, New-Alias…}
Manifest   6.1.0.0    Microsoft.WSMan.Management          Core      {Disable-WSManCredSSP, Enable-WSManCredSSP, Get-WSManCredSSP, Set-WSManQuickConfig…}
Script     1.3.2      PackageManagement                   Desk      {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource…}
Script     2.1.3      PowerShellGet                       Desk      {Find-Command, Find-DSCResource, Find-Module, Find-RoleCapability…}
Script     0.0        PSDesiredStateConfiguration         Desk      {ValidateNoCircleInNodeResources, StrongConnect, New-DscChecksum, Test-NodeResources…}
Script     6.1.0.0    PSDiagnostics                       Core      {Disable-PSTrace, Disable-PSWSManCombinedTrace, Disable-WSManTrace, Enable-PSTrace…}
Script     2.0.0      PSReadLine                          Desk      {Get-PSReadLineKeyHandler, Set-PSReadLineKeyHandler, Remove-PSReadLineKeyHandler, Get-PSReadLineOption…}
Binary     1.1.2      ThreadJob                           Desk      Start-ThreadJob

假設,我們想要執行一個 Invoke-Sqlcmd 指令,它在 PowerShell 是由 SqlServer 模組提供:

Get-Module -Name SqlServer

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     21.1.18068 SqlServer                           {Add-RoleMember, Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupListenerStaticIp, Add-SqlAzureAuthenticationContext...}

本來在 PowerShell Core 是沒有提供,不過在 2019/03 它也正式提供 PowerShell Core 的支援,我們可以參考 https://www.powershellgallery.com/packages/SqlServer 查詢與安裝:

Install-Module -Name SqlServer

離線安裝 NuGet 套件

由於公司伺服器環境無法線上安裝,我們參考手動下載與安裝NuGet套件的文件:

  • .nupkg 副檔案改為 .zip
  • 將目錄改為無版號名稱,例如:sqlserver.21.1.18147 改為 sqlserver
  • 將下列 NuGget 規則資料給刪除,
    • 名稱 _rels 資料夾
    • 名稱 package 資料夾
    • 名稱 [Content_Types].xml 檔案
    • 名稱 <name>.nuspec 檔案
  • sqlserver 目錄複制至 $env:PSModulePath 任一目錄下,PowerShell Core 應該能自動載入。
PS C:\> Import-Module SqlServer
PS C:\> Get-Module -ListAvailable


    Directory: C:\Users\BruceChen\Documents\PowerShell\Modules

ModuleType Version    Name                                PSEdition ExportedCommands
---------- -------    ----                                --------- ----------------
Script     21.1.18147 SqlServer                           Desk      {Add-RoleMember, Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupListenerStaticIp, Add-SqlAzureAuthenticationContext…}

這樣就能在透過模組來擴充 PowerShell Core 的指令集。不過有點小缺點,目前 https://www.powershellgallery.com 上的模組,並無法很直覺的分辨是否支援 PowerShell Core,像有個常使用 Posh-SSH 模組目前就還不支援 PowerShell Core,我也只能下載回來測試指令看到一堆紅字才能區分。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。