問題タブ [wmi-service]
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.
scripting - ドライブを監視します。VB スクリプトの使用
VBScript を使用して、ドライブのファイル変更を監視したいと考えています。以下のコードがあります。と で問題なく動作InstanceCreationEvent
しInstanceDeletionEvent
ます。しかしInstanceModificationEvent
、起こっていません。グーグルから、監視するCIM_DataFile
代わりに使用する必要があることがわかりました。コードを変更する方法がわかりません。誰でも助けることができます。CIM_DirectoryContainsFile
InstanceModificationEvent
参考までに: 1 つのスクリプトで、ドライブ内のすべてのフォルダーとサブフォルダーを監視する必要があります。
PS: コードとパフォーマンスを改善するための提案やその他のアイデアも歓迎します。
私のコード:
visual-c++ - WMI IWbemClassObject::GetNames ステータスの完了
WMI クエリを作成しますSELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'
そして、COM オブジェクトIWbemClassObject (メソッドIWbemObjectSink::Indicateの実装内で取得) のインスタンスでメソッドGetNamesを呼び出す前に、常に問題ありません。IWbemClassObject::GetNamesを呼び出すと、一部の WMI メカニズムが IWbemObjectSink::SetStatus をフラグWBEM_STATUS_COMPLETEで呼び出し、新しいイベントは何も発生しません!!! キャンセル非同期メソッドは呼び出しません。
私は何を間違っていますか?WMI イベントの停止を防ぐ方法は? GetNames を安全に呼び出す方法は? IWbemClassObject::GetNamesを呼び出した後も、新しいイベントをサブスクライブしたいと考えています。
UDPATE: GetNamesの呼び出し方法:
piappObjは、この回答に示されている方法で取得されたオブジェクトです
wmi - 非同期モードが選択されている場合、リモート マシンの wmi クエリが失敗する
wbemtest を使用して、リモート マシンでwmi クエリ ( select * from win32_ntlogevent )を実行しようとしています。準同期モードで成功します。非同期モードが選択されている場合、クエリは失敗し、 Access is Deniedを示すエラー メッセージが返されます。
なぜこれが起こっているのか誰でも説明できますか??
c# - Win32_Service がありません
WMI オブジェクト - Win32_Service からいくつかのプロパティをロードしようとする C# コードがあります。しかし、「System.Management.ManagementException: Invalid class」エラーが返されます。
私の簡略化されたコード:
また、PowerShellコマンドでWMIオブジェクトのリストを読み込もうとしました-
Get-WmiObject -List | 名前を選択
91 個のオブジェクトを返しますが、Win32_Service オブジェクトがありません。再インストールする方法をグーグルで検索しましたが、見つかりませんでした。どうにかして再インストールする方法はありますか?
ありがとうございました
更新 1: Powershell コマンドの出力:
windows - WMIPRVSE は、デフォルトでネットワーク サービスの下で実行する必要があります
私は2つの別々のサーバー(Windowsサーバー2008 r2)を持っており、そこからMicrosoftスケジューラ(私のコンピューター>マネージャー>スケジュール)を介してvbsスクリプトを実行しています。vbs スクリプトをローカルで実行すると正常に動作しますが、スケジューラを介して実行するとサーバーの 1 つがスタックします。もう一方は正常に動作しています。また、タスク マネージャーから、動作中のサーバーが Network Service ユーザーを介して WMIPRVSE.exe を実行し、もう一方のサーバーが SERVICES をユーザーとして表示していることに気付きました。
WMIPRVSE.exe が常にネットワーク サービスで実行されるようにする方法。ありがとう
編集:
サービスからログオン ユーザーを変更しようとしましたが、サービスの開始に失敗しました。
powershell - Powershell セキュリティ get-service インタラクティブとスケジュールされたタスクの結果が異なる
この問題を特定するために何時間も費やしました。さまざまなサービスが実行されているかどうかを確認するために、PowerShell を実行しています。Windows タスク スケジューラから 5 分ごとに実行したい。
他のサーバー上のサービスと、それが実行されている同じマシン上のいくつかのサービスをチェックします。インタラクティブに実行しているのと同じユーザーIDで、タスクスケジューラの下で実行すると、異なる結果が得られます。インタラクティブに、ローカル マシン上のすべてのサービスが実行されていることを示します。タスク スケジューラを実行すると、サービスが見つからないことがわかります。
これは、より大きなプログラムのほんの一部です。サーバー/サービス名を CSV ファイルから取得し、最後に素敵な HTML メールを送信します。Add-Content を追加して、これが起こっていることを証明するトレース ファイルを作成しました。
新しいシンプルなバージョン (まったく同じ問題があります): $Service = (get-wmiobject win32_service -ComputerName "DAL-BIZ-APP01" -filter "name = 'LanManServer'") if ($Service -eq $null) { $reportStatus = "サービスが見つかりません" } else { $reportStatus = "サービスが見つかりました" } $myDate = Get-Date Write-Host $reportStatus Add-Content D:\scripts\ServiceTestTrace.txt "$myDate $reportStatus"
インタラクティブな結果:
スケジュールされたジョブの結果:
これを含むコマンドファイルから実行します:
管理者以外のコマンド プロンプト ウィンドウまたはスケジューラからコマンド ファイルを実行すると、結果も異なるようです。
新しいシンプルなバージョンを試してみたい場合は、2 つのコンピューター名を置き換えてください。
結果:
16:07:48 はコマンド プロンプトから、16:08:03 はタスク スケジューラからのものです。
c# - WMI を使用した既存のクエリのイベント
何かのステータスを取得するための WMI クエリがある場合、そのステータスへの変更をリッスンできる関連イベントはありますか。たとえば、マザーボードのシリアル番号を照会することはできますが、イベントの形でシリアル番号の変更を検出することは可能ですか。または、少なくとも私はそれを見つけることができません。Microsoft の wmi コード クリエーターを使用すると、特定のクエリのイベントがないように見えます。