タグ付けされた質問 「powershell」

WindowsPowerShell™は、Windowsタスクの自動化のために特別に設計されたタスクベースのコマンドラインシェルおよびスクリプト言語です。このタグを使用する質問は、データベース層との直接のやり取りに限定する必要があります。一般的なPowerShellスクリプトの質問は、[StackOverflow](/programming/tagged/powershell)に送信する必要があります

3
SQL Serverと通信するには、どのPowerShellテクニックを使用する必要がありますか?
最終的には、PowerShellを使用して、SQLインスタンスモニターに使用する古いKornShellスクリプトを置き換えたいと思います。ただし、PowerShellが実際にSQLサーバーと通信できるさまざまな方法を頭に入れて苦労しています。これがすべてかどうかはわかりませんが、SQLサーバーのバージョンを照会できる5つのまったく異なる方法を次に示します。 1. SQLConnection .NETクラス $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=MyServer;Database=Master;Integrated Security=True" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = "Select @@version as SQLServerVersion" $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet = New-Object System.Data.DataSet $SqlAdapter.Fill($DataSet) $SqlConnection.Close() $DataSet.Tables[0] 2. WMIプロバイダー $sqlProperties = Get-WmiObject -computerName "MyServer" -namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlServiceAdvancedProperty …

6
PowerShellを使用してSQL Serverの実行中のすべてのインスタンスを検出する最も効果的な方法は何ですか?
私は、ドメイン内で実行されているSQL Serverのすべてのインスタンスを検出するタスクを担当しました。いくつかの場合、サーバーごとに複数のインスタンスがあります。これらのインスタンスを見つける2つの異なるPowerShellメソッドを見てきましたが、いずれもすべてのインスタンスを見つけるようには見えません。 1)WMIを使用する $srvr = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer $computerName $instances = $srvr | ForEach-Object {$_.ServerInstances} | Select @{Name="fullName";Expression={$computerName +"\"+ $_.Name}} return $instances 2)リモートレジストリを使用する(Get-SQLInstance 1と同様) 私が直面している最大の問題は、私が知っているすべてのサーバーがSQL Server WMIプロバイダーで実行されておらず、すべてがリモートレジストリを許可していないことです。3番目の方法はありますか?リモートデスクトップを使用してすべてのサーバーにアクセスできますが、約30台のマシンを見ているため、可能であれば手動の手順を避けたいと思います。これは、SQL Server 2008以降でのみ機能する必要があり、他のSQL Serverサービス(SSIS / SSAS / SSRS)について知っておくといいのですが、主な焦点はSQL Server自体にあります。

2
SQL Agent PowerShellコンテキストリファレンス
私の新しい仕事では、各サーバーに複数の名前付きインスタンスがあります。例えば Server1 \ Dev Server1 \ DevIntegrated Server1 \ QA OSを呼び出すSQL PowerShellスクリプトがあり、呼び出しますFoo.exeが、コマンドラインパラメーター(接続文字列)を渡す必要があります。SQLエージェントジョブは各インスタンスに存在し、PowerShellタイプのステップで、現在のコンテキストが何であるかを知る必要があります。つまり、この実行はDevIntegratedで始まりました。 すべてのスクリプトを最初から始めたいとは思いません... $thisInstance = "Dev" ...特に、今後数か月で環境(新しいサーバーと名前付きインスタンス)に移行するときに編集する必要があるためです。 SQLPSを起動すると、Get-Locationまたは実行の結果をスライスしてダイシングすることにより、インスタンスを特定できます。 (Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName SQLエージェントがPowerShellタイプのジョブを開始すると、C:\ windows \ system32で開始さGet-Locationれ、SQLSERVERコンテキストではないため、ルートは機能しません。そのコンテキストに変更できますが、SQL Serverの「ルート」にいるので、どのインスタンスにいるべきかわかりません。Invoke-Sqlcmdルートを使用しても同じ理由で機能しません(技術的には、デフォルトのインスタンスではありません) 私の知る限り、ジョブログに記録できる基本的な「もの」をすべて列挙しましたが、何も表示されないようです SQLSERVER:\SQL\Server1\DevIntegrated Get-ChildItem Get-Host Get-Location Get-Process Get-PSDrive Get-PSProvider Get-Service Get-TraceSource Get-Variable Get-Process私はそれと、インスタンスをヒットしてspidを一致させることによって物事を一緒にしようとするいくつかのブードゥー教を使用することができるようですが、それは地獄からの血まみれのハックのように聞こえます。私が見逃している基本的なものがあるはずです、誰かが光を当てることができますか? 調査されたPowerShellの代替 他のジョブタイプを使用して調査したところ、満足のいく解像度が得られませんでした。調査の結果、SQL Agentの下にリストされているPowerShellはSQLPSであり、Agentを右クリックしてインスタンスを起動すると、自動的に正しい場所にドロップされました。前述のように違いを知ったのは、ジョブコードに対話型コードを貼り付けたときだけです。 OSのジョブタイプは、どのインスタンスがコマンドシェルにドロップしたかを判別する方法を見つけることができなかったという点で、同じ状態になりました。もちろん、sqlcmdで値を取得できますが@@servername、sqlcmdを開始する接続がわかっていれば、データベースを照会する必要はありません;) TSQLは有効にすればおそらく動作する可能性xp_cmdshellがありますが、オンになっているかどうかはわかりません。それでも、私は動的SQLに夢中になり、PowerShellが提供する表現力とパワーの多くを失います。 少し不格好ですが、最初のステップで変数を定義し、それを後続のステップに渡すことを考えましたが、この記事で複数のジョブステップの処理(BOL) ジョブステップは自己完結型でなければなりません。つまり、ジョブは、ジョブステップ間でブール値、データ、または数値を渡すことはできません。ただし、永続テーブルまたはグローバル一時テーブルを使用して、1つのTransact-SQLジョブステップから別のステップに値を渡すことができます。ファイルを使用して、あるジョブステップから別のジョブステップに実行可能プログラムを実行するジョブステップから値を渡すことができます。 よく知られたファイル/環境変数/レジストリ設定のような一般的なトリックを使用することはできませんFoo.exe。 …

1
PowershellでSSMSから印刷されたメッセージを取得する
私たちのDBAチームは、以下を使用してバックアップを検証していませんTSQL(バックアップ後に簡単に実行でき、ほとんど時間がかからないので、理由がわかりません)。 RESTORE VERIFYONLY FROM DISK = 'D:\Backups\LOCATION' 彼らは過去に問題を抱えていたので、そこから学べると思っていても、そうではありません。約100台以上のサーバーがあり、すべてのバックアップに対してこのスクリプトを実行して、それらが有効であることを確認するため、これを行うためにPowershellスクリプトを作成しました。以下のスクリプトは正しく実行されます(エラーが発生したり、エラーが発生したりしないため)、PowerShellで印刷されたメッセージを取得する方法があり、SSMSで通常取得する方法があり、ファイル1のバックアップセットは検証として有効です。 $SqlCon = New-Object System.Data.SqlClient.SqlConnection $SqlCon.ConnectionString = "SERVER=SERV\INST;Integrated Security=true;DATABASE=master" $baks = Get-ChildItem "D:\Backups\" -Filter *.BAK foreach ($bak in $baks) { $SqlCon.Open() $cd = New-Object System.Data.SqlClient.SqlCommand $cd.Connection = $SqlCon $cd.CommandText = "RESTORE VERIFYONLY FROM DISK = @f" $cd.Parameters.Add("@f", $bak.FullName) $cd.ExecuteNonQuery() $SqlCon.Close() }

4
実行中のジョブ内からジョブIDまたはジョブ名を取得する
すべてのサーバーでジョブの結果を書き戻す中央DBがあります。SQLジョブでpowershellを介して3つのパラメーターを中央サーバーのspに戻し、ジョブがその時点で実行されていることを確認します。次に、情報がSSRSを介して公開されるため、ジョブの失敗/長時間実行されているジョブ/ &まだ実行されていないはずのジョブ(または誰かがスケジュールをめちゃくちゃにした場合)。 これを行うには、すべてのサーバーの各ジョブに2つのジョブステップを追加します。スクリプトを各ジョブに1ステップだけ追加して、ネットワーク共有から呼び出すこともできます。 しかし、私の問題は、渡す3つのパラメーターの1つです。実行中のジョブ内から実行中のジョブIDまたはジョブ名を取得する必要があるので、nameパラメーターをハードコーディングする必要はありません。私が渡す3つのパラメーターは、jobid、status(success / fail)、errormsgです。私が書いたPowerShellスクリプトは非常に単純です。 Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database remoteDB -Query "exec dbo.JOB_LOG 'JOBNAME / ID'、 'Success / FAIL'、 'BAD MESSAGE HERE'" これにより、必要なものがテーブルに書き込まれます。msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs /を見てきましたが、実行中のジョブが複数ある場合に、正しい実行ジョブのIDまたは名前を取得できることは保証されません同時に。 私もsys.sysprocessesを調べてみましたが、エージェントジョブはpowershellスクリプトなので、「。Net SqlClient Data Provider」と表示されるので、「SQLAgent-」と表示されるジョブからバイナリJOBIDをトリミングできません。 TSQL JobStep(Job 0xF1800243164745429C30474FFD5C990C:Step 1) "---これはデニーチェリーの投稿から学んだ-感謝デニー - 実行中のジョブIDを取得する方法についてのアイデアは、大歓迎です。 おかげで、 クリス

1
データベースがRESTORING状態で止まっている根本的な原因を特定する
データベースがスタックRESTORING状態になるという問題を解決する質問があることを知っており、それらのソリューションを使用してデータベースを手動でオンラインに戻しましたが、私のシナリオは多少異なります。 本番環境のコピーをDEVインスタンスに復元するPowershellスクリプトを使用した自動復元があります。スクリプトは約1年間変更されず、復元プロセスが終了するRESTORINGこともありますが、復元されたデータベースが停止した状態になることがあります(スクリプトが正常に機能することもあれば、このように失敗することもあります)。 プロセスを手動で再実行するか、SSMSのユーザーインターフェイスまたはT-SQLを使用してデータベースを手動で復元するたびに、問題なく完了します。 CHECKDB復元されたDBで実行することを推奨する回答を見つけましたが、この問題の原因として何も出てきませんでした。 復元スクリプトはデータベースの完全バックアップを復元し、"WITH RECOVERY"オプションを使用するため、実際にはを使用して復元しているのに、復元プロセスを停止している可能性があるものを見つけようとしています"WITH RECOVERY"。 私はこれが時々起こっている理由を理解しようとすることに行き詰まっているので、どんな提案も本当に感謝しています。 症状を治療するのではなく、問題の根本的な原因を解決したいと思います。つまり、手動でDBを再度復元することです。 更新: @Brentが推奨するGithub Gist- こちら。

1
PowerShellでSQLCMDを介してLocalDBに接続する
SQLCMDユーティリティを使用して、PowerShellを介してコンピューター上の "localdb \ MSSQLLocalDB"サーバーにアクセスしようとしています。PowerShell v5、.NET v5.0を使用していますが、サーバー名は(localdb)\MSSQLLocalDBMicrosoft SQL Server Management Studio 2014で接続するときに使用されます。 PS C:\> sqlcmd -S localdb\MSSQLLocalDBそしてPS C:\> sqlcmd -S .\localdb\MSSQLLocalDB、このエラーが発生し: Sqlcmd:エラー:SQL ServerのMicrosoft ODBCドライバー11:SQL Serverネットワークインターフェイス:指定されたサーバー/インスタンスの検索エラー[xFFFFFFFF]。 Management Studioでサーバー名を照会し、上記のコマンドでSELECT @@ServerNameそれを使用した-Sところ、同じエラーが発生しました。 PS C:\> sqlcmd -S localdb このエラーが発生します: Sqlcmd:エラー:SQL Server用Microsoft ODBCドライバー11:名前付きパイププロバイダー:SQL Serverへの接続を開けませんでした[53] その他の注意事項:この接続文字列を使用して、サーバーに接続し、C#コンソールアプリでtestdb01という名前のデータベースを操作できSystem.Data.SqlClientます。 "Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"

2
SQLエージェント-PowerShellステップ「構文エラー」
実行されていないSQLエージェントジョブステップで次のコードを設定しています。受け取ったメッセージは単純です: ステップ1の実行を開始できません(理由:line(46):構文エラー)。ステップは失敗しました。 ジョブの期間は次のとおりです。 00:00:00 このスクリプトの46行目はhere-string: ,@DriveLetter = '$($c.DriveLetter)' このスクリプトは、SQL Serverエージェントの外部で完全に実行されます。 ServerNamesテーブル: CREATE TABLE ServerTable ( ServerName varchar(50) ) ディスクスペーステーブルは次のようになります。 CREATE TABLE DiskSpace ( ID int IDENTITY(1,1), ServerName varchar(50), DriveLetter varchar(2), DiskSpaceCapacityGB decimal(12,5), DiskSpaceFreeGB decimal(12,5) ) PowerShellスクリプト: This command is to allow SQL Agent job to show failure in event PowerShell …

2
SQL ServerエージェントでのPowershellスクリプトの実行エラー
SQL Serverエージェント(SQL Server 2012 Enterpriseの実行)を介して実行されるSQLジョブがあります。ジョブの最後のステップは、ネットワーク共有にあるアプリケーションを実行することです。残念ながら、アプリケーションが入っているフォルダーの名前(フォルダーはバージョン番号です)がわからないので、PowerShellを使用して検索します。 set-location "\\server\companydocuments\MyApp\Application Files\" $name = Get-ChildItem | sort name -desc | select -f 1 | select name cd $name.name & ".\Application.exe" SQL ServerでPowerShellウィンドウを開くと、正常に動作します。これをSQL Serverエージェントで実行すると、次のエラーが発生します。 A job step received an error at line 1 in a PowerShell script. The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'" アクセス許可の問題かもしれないと思ったので、資格情報(運用サーバーではなくテストサーバー)でSQL …

2
SQL Serverのメンテナンスタスクに役立つPowerShellスクリプトのコレクションはありますか?
私はPowerShellを研究しており、日々のDBAタスクに(ゆっくりと)取り入れています。 これまでのところ、多くの異種の管理アクティビティーのために切断されたPowerShellスクリプトの束を見てきました。 私が知りたいのは、一般的なDBAアクティビティ(Ola HallengrenのT-SQLスクリプトのようなもの)のSQL Server PowerShellスクリプトに通常アクセスする公式(または認識可能な)PowerShellスクリプトコレクションまたはリポジトリがあるかどうかです。

2
SQLサーバーのメモリカウンターを取得して値を表示するPowerShell
次のSQLサーバーカウンターをキャプチャするPowerShellスクリプトを書いています。 SQL Server:メモリマネージャー:合計サーバーメモリ(KB) SQL Server:メモリマネージャー:ターゲットサーバーのメモリ(KB) 私のマシンにはSQLサーバーの3つのインスタンスがあるため、このスクリプトですべてのカウンターを動的にキャプチャし、1つのサンプルの値のみを報告します。私は以下を書いてみました: Get-counter -List *SQL*Memory* | Select paths, counter | format-list # doesn't display full list Get-counter -List *SQL*Memory* | Select paths, counter | where {_.counter -like "*server memory*"} |format-list # displays nothing 最終的には、これを-computernameパラメーター付きで複数のサーバー間で実行したいので、動的にキャプチャーしたいと思います。 誰かが欠けているものを見つけるのを手伝ってくれませんか?以下は、私が実行している正確なスクリプトです。 Function checkTransactionsPerSecond([string] $Hostname ) { (Get-Counter -ListSet "*Databases").Counter | Where {$_ …

1
フォルダー内の複数の.DTSXパッケージファイルのPackageFormatVersionを決定する
Kenneth Fisherが、私のSSISパッケージとはどのSQLバージョンであるかを判断する方法についてブログ投稿しました。2015年4月。 これにはPackageFormatVersion、XMLメタデータで見つかったSSISパッケージのどれにSQLバージョンがマップされているかのテーブルがあります。これは、1つの個別のパッケージを確認するときに役立ちます。 約100のSSIS .DTSXパッケージのフォルダーがあり、それらのSQLバージョンをすべて知る必要があります。 フォルダー(ファイルシステム)内のPackageFormatVersion複数の.DTSXパッケージの何(つまり、SQLバージョン)を一括して決定することができますか? 最終的な目標は、現在ソース管理システムが存在しないため、これらのパッケージを取得するために取得および実装する適切なTFSバージョンを決定することです。Kennethが提示する表は、この質問に答えるのに役立ちますが、最初に、SQLバージョンのパッケージを確認する必要があります。 BIDSもSSDTもインストールされていないとします。 必要な出力が次のようなものであると想定します。ここで、pipeは新しい列を指定します。 PackageFilename | PackageFormatVersion -------------------------------------- Package1.dtsx | 3 Package2.dtsx | 4 PowerShell、TSQL、ディレクトリ構造をクロールできるサードパーティツール、またはその他のツールを歓迎します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.