我正在尝试将我的 SQL Agent 作业和计划作为.json
文件进行源控制,并使用dbatools SQL Agent 命令套件部署它们。
给定$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!
好吧,4 小时前的自己......如果你费心检查 和 的类型
$foo
,$bar
你可能不会浪费整个下午在你的开放式办公室平面图上大声咒骂,因为你毫无结果地滚动浏览文档......在这个问答网络上什至有一个方便的通用解决方案,用于将 a
PSCustomObject
转换为HashTable
.简单的豌豆,柠檬汁。
所以扑通一声,你个大疯子。当您不再觉得自己很愚蠢时,也许可以在线分享解决方法,以防对其他人有所帮助。如果您感觉非常主动,可以考虑留出一些时间来为该模块做贡献。
您可以做的一件事是,当您从 json 转换为实际将其转换为 hastable 时,有一个选项……因此它可以节省几行代码。
我没有任何可访问的服务器来确认,但第二个命令的输出显示它是名称/值格式:
由于以上仅适用于 PowerShell Core 6.1(现已普遍可用),您将需要使用WindowsCompatibility模块在 PS Core 中使用 dbatools。您可以在 PS Core 中使用以下代码执行此操作:
第二个命令利用 WinRm 来支持隐式远程处理。以上意味着您已经在 Windows 机器上安装了 PowerShell Core。文档显示了如何在需要时为远程机器执行此操作。
从那里您可以根据需要运行 dbatools 命令: