問題タブ [powershell-2.0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - Powershellでelseifの結果が得られた場合は、foreachに基づいて書き込みホストの出力色を変更します
PowershellのSQLServerジョブのlastrunoutcomeプロパティに基づいて書き込みホスト出力の色を変更しようとしています...ジョブが成功した場合、lastrunoutcomeの出力は緑色で「成功」になります。 ...失敗した場合は、赤で「失敗」します。目的のジョブステータスを取得するためにスクリプトを実行しています...色を変更する方法がわかりません。
これが私がこれまでに持っているものです:
これは私が得たものに最も近いようです...しかし、「LastRunOutcomeはReadOnlyプロパティです」というエラーが表示されます。
どんな助けでも大歓迎です!
ありがとう!
エモ
powershell - これは、PowerShellの型解決メカニズムのエッジケースですか?
これが私の状況です。PowerShell-JSONライブラリをインポートするPowerShellモジュールがあります。このライブラリは、JSON文字列をPowerShellオブジェクトに変換します。私のモジュールはCouchDBへのインターフェースを提供するので、私のJSON文字列はHTTP呼び出しから取得されます。Send-CouchDbRequest
CouchDBにHTTPリクエストを送信し、応答データを文字列として返す関数、があります(応答データはを使用して取得されますStreamReader.ReadToEnd()
)。
別の関数ではGet-CouchDbDocument
、Send-CouchDbRequestを呼び出し、出力を変数に保存します$json
。とによる$json.GetType()
と$json | Get-Member
、これはタイプSystem.String
です。次に、この文字列をにフィードすると、提供されたJSONドキュメントに従って定義されたプロパティを持つConvertFrom-JSON
が返されることを期待しています。PSCustomObject
代わりに、PowerShellハッシュテーブルの文字列表現を取得します@{name1=value; name2=value2; name3=value3}
。返されるオブジェクトSystem.String
も、期待されるものではなく、上記と同じテストに基づくタイプですPSCustomObject
。ここでは、PowerShellが何らかの自動(および不要/不要)型変換を行っているように見えます。
バグはPowerShell-JSONにはありません-私はすでに作成者と話し合っておりConvertFrom-JSON
、ダミーモジュールで動作するように同じ呼び出しを取得することができました。したがって、エラーはコードのどこかにあるはずであると結論付けます。おそらく、文字列がHTTP経由で受信されたという事実の結果です。
Get-CouchDbDocumentのコードは次のとおりです。
Send-CouchDbRequestのコードは非常に長く、GitHubにあります。私が説明したシナリオでは失敗し、他の場所で機能するサンプルJSON文字列は次のとおりです。
何かご意見は?よろしくお願いします。
powershell - 一見同じ入力データのstring[]への不思議な異なる変換
いくつかの問題の調査中に、その理由は、一見同じ入力データのstring[]への予期しない異なる変換であることがわかりました。つまり、以下のコードでは、2つのコマンドの両方が同じ2つのアイテムFile1.txtとFile2.txtを返します。ただし、string []に変換すると、異なる結果が得られます。コメントを参照してください。
なぜそれなのか?これはバグの可能性があります。誰かもそう思うなら提出します。しかし、何が起こっているのかを理解し、そのような罠を避けるのは良いことです。
sql-server - SMO ConnectionContext.StatementTimeout 設定は無視されます
Powershell と SMO を使用して、ほとんどのデータベースを正常にバックアップしています。ただし、「タイムアウト」エラー「System.Data.SqlClient.SqlException: タイムアウト期限切れ」を受け取る大規模なデータベースがいくつかあります。タイムアウトは常に 10 分で発生します。ConnectionContext.StatementTimeout を 0、6000、および [System.Int32]::MaxValue に設定しようとしました。設定に違いはありませんでした。0 に設定すると無制限になることを示す多くの Google リファレンスを見つけました。何を試しても、タイムアウトは一貫して 10 分で発生します。サーバーの Remote Query Timeout を (Studio Manager 経由で) 0 に設定しても無駄です。以下は、タイムアウトと実際のバックアップ機能を設定した SMO 接続です。さらに下は、私のスクリプトからの出力です。
更新 興味深いことに、私は VS 2008 を使用して C# でバックアップ関数を作成しましたが、タイムアウトのオーバーライドはその環境内で機能します。Powershell だけではタイムアウトのオーバーライドが機能しない理由がわかるまで、その C# プロセスを Powershell スクリプトに組み込む作業を行っています。これは非常に迷惑です!
}
powershell - Powershell: Get-Process が「無効な」VM サイズを返す
Windows XP SP3 で PowerShell 2.0 を実行していて、次を実行します。
そして、次のように返します。
ただし、Windows タスク マネージャーには、firefox.exe の次の統計が表示されます。
PowerShell からの VM 出力が、Windows タスク マネージャーからの出力よりも 300 MB 多いのはなぜですか?
編集: PowerShell から
のPM
( PagedMemorySize
) プロパティ出力は、Windows タスク マネージャーからの「VM サイズ」出力と密接に並んでいるようです。ただし、 MSDNによると、このPagedMemorySize
プロパティは廃止されています。PM
仮想メモリを取得するためにプロパティに依存する必要がありますか? プロパティは何VM
を表していますか?
function - PsBoundParameters にない既定値を持つパラメーター?
一般コード
次のコードを検討してください。
どちらの場合も変数の$PsBoundParameters
レコードが含まれると思います。$p
それは正しい行動ですか?
質問
多くの機能で次のように機能するスプラッティングを使用したいと思います。
列挙されたすべてのパラメーターで SomeFuncWithManyRequiredParams を呼び出したくありません。
出来ますか?
performance - V2 で PowerShell スクリプトを高速化しますか?
PowerShell V2 を使用して多数のスクリプトを実行していますが、コンソール ウィンドウが最初に読み込まれるときに長い一時停止が発生することに気付きました。スクリプトのパフォーマンスを改善するにはどうすればよいですか?
ありがとう、マジックアンディ
exception - How to catch an exception thrown in another Powershell script?
I have a two Powershell scripts; main.ps1 and sub.ps1. main.ps1 calls sub.ps1. Sometimes sub.ps1 throws an exception. Is it possible to catch the exception thrown by sub.ps1 from main.ps1 ?
Example main.ps1:
Example sub.ps1:
c#-4.0 - パイプラインを閉じて破棄すると、C#PowerShell出力リーダーイテレーターが変更されます
C#からPowerShellスクリプトを呼び出しています。スクリプトは非常に小さく、「gps; $ host.SetShouldExit(9)」であり、プロセスを一覧表示してから、PSHostオブジェクトによってキャプチャされる終了コードを送り返します。
私が抱えている問題は、パイプラインが停止されて破棄されたときに、出力リーダーのPSHostコレクションがまだ書き込まれているようで、いっぱいになっていることです。そのため、自分の出力オブジェクトにコピーしようとすると、反復しようとするとOutOfMemoryExceptionが発生します。コレクションが変更されたというメッセージを除いて、場合によってはそれが行われます。これがコードです。
これは、パイプラインを実行用にセットアップするPipelineExecutorクラスです。
これは、例外が発生するDataAddメソッドです。
Data.Addの周りにforループを配置すると、コレクションが600k以上でいっぱいになるため、gpsコマンドがまだ実行されているように感じますが、その理由は何ですか。何か案は。
前もって感謝します。
scripting - Powershell2.0でのプロファイルの管理
私が理解している限り、PowerShellにはユーザーごとに1つのプロファイルがあります。頭にかぶることができるさまざまな「帽子」のために、複数の環境を準備したいと思います。特別なデータベースを操作するためのショートカットのセットを提供する「データベースワーカーシェル」を開始するように。後で、他のショートカットを提供する「データ処理シェル」である可能性のある環境を開始します。
それを管理するための最良の方法は何ですか?
乾杯、アキム