Sql-Server-Agent
DBATools - 將平面文件配置傳遞給代理作業命令
我正在嘗試將我的 SQL 代理作業和計劃作為
.json
文件進行原始碼控制,並使用dbatools SQL 代理命令套件進行部署。給定
$sa = Get-Credential
並foo.config
具有以下形式…{ "Schedule": "Foo", "Disabled": false, "FrequencyType": "Weekly", "FrequencyInterval": "EveryDay", "FrequencySubdayType": "Time", "FrequencySubdayInterval": 0, "FrequencyRelativeInterval": "Unused", "FrequencyRecurrenceFactor": 1, "StartDate": "20180823", "EndDate": "20181023", "StartTime": "070000", "EndTime": "235959" }
嘗試
foo.config
在解決方案中使用會導致基本解析失敗,並顯示以下消息:~> $foo = Get-Content foo.config | ConvertFrom-Json ~> New-DbaAgentSchedule @foo -ServerInstance "." -SqlCredential $sa
警告:
$$ 15:50:04 $$$$ New-DbaAgentSchedule $$沒有提供時間表!請提供時間表名稱。
好吧,這很糟糕……特別是因為以下工作很好……
$bar = @{ Schedule= "Foo" Disabled= $false FrequencyType= "Weekly" FrequencyInterval= "EveryDay" FrequencySubdayType= "Time" FrequencySubdayInterval= 0 FrequencyRelativeInterval= "Unused" FrequencyRecurrenceFactor= 1 StartDate= "20180823" EndDate= "20181023" StartTime= "070000" EndTime= "235959" } New-DbaAgentSchedule @bar -ServerInstance "." -SqlCredential $sa
我真的不想費心輸入每個人
... -Param1 $foo.Param1 -Param2 $foo.Param2 ...
,因為我很懶。我真的更願意將我的配置文件放入各種命令中。為什麼這不起作用!?!1!
您可以做的一件事是,當您從 json 轉換為實際將其轉換為 hastable 時,有一個選項可供您使用……因此它可以節省幾行程式碼。
(Get-Content C:\temp\foo.config | ConvertFrom-Json).GetType() <# IsPublic IsSerial Name BaseType -------- -------- ---- -------- True False PSCustomObject System.Object #> (Get-Content C:\temp\foo.config | ConvertFrom-Json -AsHashtable).GetType() <# IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Hashtable System.Object #>
我沒有任何可訪問的伺服器來確認,但第二個命令的輸出雖然顯示它是名稱/值格式:
Name Value ---- ----- EndTime 235959 StartDate 20180823 FrequencySubdayInterval 0 FrequencyType Weekly Schedule Foo Disabled False FrequencyRelativeInterval Unused EndDate 20181023 FrequencySubdayType Time FrequencyInterval EveryDay StartTime 070000 FrequencyRecurrenceFactor 1
由於上述內容只能在 PowerShell Core 6.1(現在普遍可用)上執行,您需要使用WindowsCompatibility模組來利用 PS Core 中的 dbatools。您可以使用 PS Core 中的以下程式碼執行此操作:
Install-Module WindowsCompatibility Import-WinModule dbatools
第二個命令利用 WinRm 來支持隱式遠端處理。以上意味著您已經在 Windows 機器上安裝了 PowerShell Core。如果需要,該文件顯示瞭如何為遠端機器執行此操作。
從那裡您可以根據需要執行 dbatools 命令: