Sql-Server-Agent

DBATools - 將平面文件配置傳遞給代理作業命令

  • October 11, 2018

我正在嘗試將我的 SQL 代理作業和計劃作為.json文件進行原始碼控制,並使用dbatools SQL 代理命令套件進行部署。

給定$sa = Get-Credentialfoo.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 命令:

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/219777