<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
JMPの使用状況を監視するためのJSLスクリプトを作成することは可能でしょうか。
たとえば、JMPを開いたときに自動的に起動するようなコードを書くことができますか。
複数のユーザーがいる場合、理想的には、(1)誰がこのツールを使用していたか、(2)どのくらいの頻度でどれくらいの期間そのツールを使用していたかを確認します。
それが不可能であったとしても、私たちのグループの誰かがJMPを開くと自動的に私にEメールを送るというスクリプトだけ?
前もって感謝します
追跡をアドインとしてインストールする場合は、終了スクリプトを作成できます。スクリプトマニュアルの526ページの「起動スクリプトと終了スクリプトの指定(オプション)」を参照してください。
追跡に共有テーブルを使用するときの注意点 - 2人のユーザーがファイルを開こうとしているときのユーザーの競合。具体的には、user1がそれを開いています - それからuser2が起動してそれを開こうとします。これに対処する方法はいくつかあります。
- スクリプト全体をtry()してください。user2のトラッキングは緩められますが、user2はエラーになりません。
- ファイルをロックする - JMPテーブルを開く前に、user1は "lock.txt"ファイルを作成します。これは空白でもかまいません。 User2が起動すると、スクリプトは最初にlock.txtの存在を確認します - 異常であれば作成してJMPテーブルを開きます。 lock.txtが存在する場合は、1)数秒待ってから再試行するか、2)ログ開始情報を試行せずにスクリプトを正常に終了します。 user1がJMPデータテーブルの更新を完了すると、user1はlock.txtファイルを削除します。 この方法で発生する可能性がある問題は、lock.txtファイルが共有ディレクトリに存続し、削除されないことです。これは、たとえば、lock.txtが削除される前にuser1がクラッシュした場合に発生します。
- ロックファイルを使用する代わりに、JMPテーブルを開いたときにエラーを潜在的にトラップすることもできます。後続のテーブル操作に時間がかかる場合は、ロックファイルが適しています。JMPトラッキングファイルのサイズは着実に大きくなり、毎回ユーザーが開くのに時間がかかります。少し時間を置いてからエラーをトラップして再試行する場合は、必ずカウンターと最大再試行回数を設定してください。利用できなくなるファイルの場合。
- 1つのファイルにログインする代わりに、複数のファイルにログインすることもできます。ユーザーがJMPを起動すると、datetimeとusernameを含むファイル名でJMPテーブルを作成します。次に、これら1行のJMPテーブルをすべて読み取り、それらを1つの大きなファイルに追加するスクリプトを作成する必要があります。
私はまた、インターネット上で広告主の方法を借りることによって行われるユーザー追跡、すなわちウェブビーコンを見ました。あなたはwebページを開くためにweb()を使うことができます。
最後に、私はあなたが「プライバシーポリシー」を公表し、そして彼らの使用が監視されていること、どんなデータが集められているか、そしてそれがどのように使われることになるかをユーザーに知らせることを勧めます。将来、データの使用方法が変わる場合は、データの新しい使用方法を記載した改訂版「プライバシーポリシー」を発行してください。
私はklaus819に同意します。管理者の観点からすると、ソフトウェアのインストールやソフトウェアの使用を追跡するためのJMP以外の方法があります。
JMPの中には、電子メールを送信する以外にもいくつかの選択肢があります。私は最近、JMP起動スクリプトを使用して自分のJMPの使用状況を追跡するという考えで遊んでいました。その方法の詳細は、JMPスクリプトガイドの257ページのどこかにあります。
以下のスクリプトは、Windows 7で実行されているJMP10用です。他のオペレーティングシステムまたはバージョンには、少し調整が必要です(上記の参考文献を参照)。このスクリプトは、JMPが指定されるたびにデータテーブルに新しい行を書き込みます。表示されずに実行するように設定されています。
私は "event"変数が別の定義を持っている別の同様のスクリプトを使いました、そしてスクリプトは指定された時間にウィンドウズスケジューラによって実行されます。この場合、スクリプトは私のラップトップが実行されている場合にのみ実行されます。これも私が実行していることの代理です。
スクリプトは、特定の列名を持つ特定のデータテーブルを持つことに依存しています。このテーブルスクリプトは、以下のスクリプトの最後に含まれています。
//!
// "//!"スクリプトの最初の行にスクリプトを表示しないでスクリプトを開いて実行できます。
//このスクリプトが開かれると、実行されてから閉じられます。開くには、JMPホームウィンドウのファイルリストからそれを右クリックして//「編集」を選択して編集します。
//ノート:
//このスクリプトはData1.jmpというファイルを開きます。空のテーブルのスクリプトは次のとおりです。
//実際には、"log"ファイルはすべてのユーザーがアクセスできるディレクトリにあります。
//誰かがこのコンピュータでJMPを開くとスクリプトが実行されます
//
//スクリプトの名前はjmpStartAdmin.jslにする必要があります
//スクリプトはwindows 7のいくつかの場所にあります
// ref:スクリプティングガイドp.257(JMP 10)
//ここにスクリプトを保存します(ここにJMPがインストールされていると仮定します)C:\ ProgramData \ SAS \ JMP \ jmpStartAdmin.jsl
//すでにjmpStartAdmin.jslファイルがある場合は、それを上書きすることはお勧めできません。
//////////////////////////////////////////////////// //////スクリプト
デフォルトはここにあります(1)。
////////手順1:ユーザー名とIDを取得する(R. Lucasから(ありがとう))
// 見る http://msdn2.microsoft.com/ja-jp/library/ms724435.aspx
NameUnknown = 0;
NameFullyQualifiedDN = 1;
NameSamCompatible = 2;
NameDisplay = 3;
NameUniqueId = 6;
NameCanonical = 7;
NameUserPrincipal = 8;
NameCanonicalEx = 9;
NameServicePrincipal = 10;
NameDnsDomain = 12;
securDll = DLLをロードする( "Secur32.dll"、AutoDeclare(false));
securDLL << DeclareFunction(
"GetUserNameExW"、
Arg(Int32)、//名前の形式(上記のコードを使用)
Arg(UnicodeString(80)、output)、//ネームバッファ
Arg(UInt32、update)//バッファ長
;
UserName = "";
Userid = "";
NameLen = 80。
securDLL << GetUserNameExW(NameDisplay、UserName、NameLen);
securDLL << GetUserNameExW(NameSamCompatible、Userid、NameLen);
表示(ユーザー名);
表示(ユーザーID)。
ver = JMPバージョン();
/////////ステップ2:情報を追加したいファイルを開く
// note:データテーブルの場所に独自のファイルパスを追加する必要があります
dt = open( "C:\ファイルパス\ Data1.jmp"、非表示); //見えない引数はユーザーには見えません。
////////手順3:データテーブルに情報を追加する
dt << AddRows({Col1 = today()、Event = "起動"、:name( "ユーザー名")= UserName、UserID = Userid、Version = ver});
////////手順4:ログデータテーブルを閉じる
close(dt、save( "C:\ファイルパス\ Data1.jmp"));
//出口();スクリプトの実行直後にJMPを閉じます(終了します)。
//このスクリプトがWindowsスケジューラで実行された場合
//実行するのに便利な手順ですが、この場合は本当に厄介です。
//////////////////////////////////////////////////// /////////////////スクリプト終了
//これは "Data1.jmp"のテーブルスクリプトです。これを実行して最初の空のデータテーブルを作成します。
//次にスクリプトで使用できるようにファイルパスとして保存します。
/ *
新しいテーブル( "Data1"、
行を追加(0)、
新しい列( "タイムスタンプ"、
数値、
連続した、
フォーマット( "m / d / yh:m:s"、23、0)
入力フォーマット( "m / d / yh:m:s"、0)
設定値([])
)
新しい列( "イベント"、文字、公称、設定値({}))、
新しい列( "ユーザー名"、文字、公称、選択セット、値設定({}))、
新しい列( "UserID"、文字、公称、設定値({}))、
新しい列( "バージョン"、
数値、
連続した、
フォーマット( "最高"、12)、
設定値([])
)
新しい列( "日付"、
数値、
連続した、
フォーマット( "m / d / y"、12)、
入力フォーマット( "m / d / y")
式(:タイムスタンプ - 時刻(:タイムスタンプ))
)
新しい列( "タスクを完了するまでの時間"、
数値、
連続した、
フォーマット( "hr:m"、12)
入力フォーマット( "hr:m")、
計算式(時刻(:タイムスタンプ - :目標時間))
)
新しい列( "目標時間"、
数値、
連続した、
フォーマット( "h:m"、8)
入力フォーマット( "h:m")
設定値([])
)
新しいコラム( "曜日"、
数値、
連続した、
フォーマット( "最高"、12)、
式(曜日(:タイムスタンプ))
)
)
すみませんが、私はここで大いに役立つことができるとは思わない。Outlookには、通常のMicrosoftの方法では、デフォルトでオンになっていてJMPとの通信を妨げる一連のセキュリティ対策が施されている可能性があります。見通しに関連するセキュリティ設定があるか、一般的には緩和できるかどうかを確認してください。
ご返事ありがとうございます。上記のコードを使用しましたが、電子メールを送信できません。
次に、このフォーマットを使用してメールを送信するスクリプトを実行するだけでコードを単純化しました。
郵便物(" john.doe@company.com "、"件名 "、"メッセージ "、)
私は以下のような返事を受け取り続けます。

Microsoft Outlookを使用しています。ここで問題は何ですか?
これは、ターミナルサーバー環境にユーザーがいる可能性があるようです。 あれは正しいですか?これを行う最も簡単な方法は、コンピューターの起動時に開始されるvbscriptを作成することです。 これは、誰かがjmpを起動してあなたにEメールを送るか、あるいはログに書き込むことができるまで、ただ眠ります。 経験から、ログに書き込むことをお勧めします。 あなたは本当にそのようにスパムされるようにあなた自身を設定したくありません。 あなたが同様に集めることを望むかもしれないユーザセッションに関する他の情報があります。
JMPの起動時に自動的に実行されるjslスクリプトを用意できます。JMPスクリプトガイドページ259(JMP 10)を調べてください。
以下のこのスニペットは、誰かがJMPを起動するたびに、ユーザーと時間の情報を含むメールを送信する必要があります。スクリプトはjslStart.jslという名前で、C:\ ProgramData \ SAS \ JMP \にローカルに配置する必要があります(Windowsのバージョンによって異なる場合があります。スクリプトガイドを参照してください)。
しかし、JMPを終了することによってアクティブになるコマンドを知りません。OSのソリューションはおそらくもっと強力です。私はJMP for Macintoshを使用しているので、以下のスクリプトはテストしていません。
// JMPが起動したときに、ユーザー名と開始時刻の情報を含むメールを送信する
もし ( ホストは ( Windows ) 、
郵便物 (
「 to@me.com 「 、
「ユーザー」 || ワード ( 3 、デフォルトディレクトリを取得 () 、 "/" ) || 「JMPを実行します」 、
「ユーザー」 || ワード ( 3 、デフォルトディレクトリを取得 () 、 "/" ) || 「JMPセッションを開始しました」 ||
フォーマット ( 今日 () 、 "mdy hm" ) || ""
) 、
「メールはWindowsでのみ利用可能です。」
) ;