質問者
リモートからのsmo取得に関して

質問
-
お世話になります。
以下の内容で、リモートからSMOのDB内容を取得しようとしているのですが失敗してしまいます。 [void][Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") $server = New-Object Microsoft.SqlServer.Management.Smo.Server("DB名") $server.ConnectionContext.LoginSecure = $false $server.ConnectionContext.Login = "username" $server.ConnectionContext.Password = "password" $dbinfos = @() #フォーマット $fmt = "#,##0.0" foreach($db in $server.Databases | where-object{!($_.IsSystemObject)}) { foreach($fileGroup in $db.FileGroups) { foreach($dataFile in $fileGroup.Files) { $space = ($dataFile.Size - $dataFile.AvailableSpace) $output = New-Object -TypeName PSObject -Property @{ DBName = $db.Name FileName = $dataFile.FileName Type = "Data File" UsedSpace = ($space / 1KB).Tostring($fmt) } $dbinfos += $output; } } ------エラー内容----- コレクションの列挙中に次の例外が発生しました: "Culture is not supported. Parameter name: culture 66577 (0x10411) is an invalid culture identifier."。 発生場所 C:\Users\管理者ID\Desktop\output\sizecalc.ps1:12 文字:27 + foreach($fileGroup in $db.FileGroups) + ~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException + FullyQualifiedErrorId : ExceptionInGetEnumerator 尚、DBのローカル上から実行すると問題無く取得できます。 原因と対処方法はどの様なものが考えられるでしょうか。
宜しくお願い致します。
すべての返信
-
こんにちは、
回答では有りませんが当方の状況を、ご参考までに。
以下のような感じに最小ロジックにして試してみましたが、特に問題はなさそうでした。
[void][Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") $server = New-Object Microsoft.SqlServer.Management.Smo.Server("SV1") $server.ConnectionContext.LoginSecure = $false $server.ConnectionContext.Login = "sa" $server.ConnectionContext.Password = "hogehoge" #データベースの数だけ繰り返し foreach ( $db in $server.Databases ) { $db.Name }
環境は、
サーバー側が、2008ServerR2,SQLServer2012
クライアントはWindows7とWindows8で試しました。(SMOのバージョンは10と11が入っているっぽい・・・)なかなか検索しても当該エラーメッセージはヒットしないようなので難しいですね。
別のサーバーで試してみたり、クライアントで試した見たりと、何かしら依存環境を絞り込むしか無いのですかね・・・。
- 編集済み minminnana_prof 2014年11月14日 13:39
-
私も回答ではないのですが…
INF: 照合順序指定子 Japanese_Unicode を使用する場合の注意点、照合順序 - 文字の比較と並び順 (その 1) - Microsoft SQL Server Japan Support Team Blog - Site Home - MSDN Blogsなどの記述によると、ロケールID 66577(Japanese_Unicode)は、SQL Server 7.0との互換性のために残された古い日本語照合順序指定子のようです。
エラーメッセージには"Culture is not supported."とあるので、文字通りリモート側OSでサポートされていないロケールなのではないでしょうか。