SQLエージェントのジョブとスケジュールを.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 ...
怠け者だから。私は本当にむしろ splat 私の設定ファイルをさまざまなコマンドに入れたいと思います。 なぜこれが機能しないのか!!?!1!
あなたができることの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
#>
確認するためにアクセスできるサーバーがありませんが、2番目のコマンドの出力は、名前/値の形式であることを示しています。
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
上記はPowerShellCore 6.1(現在一般提供中)でのみ機能するため、PS Core内でdbatoolsを利用するには、 WindowsCompatibility モジュールを使用する必要があります。 PSCore内で次のコードを使用してこれを行うことができます。
Install-Module WindowsCompatibility
Import-WinModule dbatools
2番目のコマンドは、暗黙的なリモート処理をサポートするためにWinRmを利用します。上記は、WindowsマシンにPowerShellCoreをインストールしたことを意味します。ドキュメントには、必要に応じてリモートマシンでこれを行う方法が示されています。
そこから、必要に応じてdbatoolsコマンドを実行できます。
ええと、4時間前に自分自身... $foo
と$bar
のタイプをわざわざ調べていたら、無駄にスクロールするときに、OpenOfficeのフロアプランで大声で宣誓する午後全体を無駄にしなかったかもしれません。ドキュメントを介して...
~> ($foo | Get-Member).TypeName[0]
System.Management.Automation.PSCustomObject
~> ($bar | Get-Member).TypeName[0]
System.Collections.Hashtable
PSCustomObject
をHashTable
に変換するための このQ&Aネットワークの便利で一般化されたソリューション もあります。
$foo.psobject.properties | foreach -begin {
$foo=@{}
} -process {
$foo."$($_.Name)" = $_.Value
} -end {$foo}
~> New-DbaAgentSchedule @foo -ServerInstance "." -SqlCredential $sa
簡単なピーシー、レモンスクイーズ。
だから飛び散る、あなたは大きな狂気。そして、あなたが愚かだと感じ終わったら、他の誰かを助ける場合に備えて、回避策をオンラインで共有してください。そして、あなたが非常に積極的だと感じているなら、多分、 モジュールに貢献する に時間を取っておくことを検討してください。