擴充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,我也只能下載回來測試指令看到一堆紅字才能區分。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。