<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요,
JSL 스크립트를 작성하여 JMP 사용을 모니터 할 수 있습니까?
예를 들어, JMP를 열 때 자동으로 시작되는 코드를 작성할 수 있습니까?
여러 사용자가 있다고 가정하면 말하자면 (1) 도구를 사용하는 사람과 (2) 얼마나 자주 그리고 얼마나 오랫동안 도구를 사용하고 있는지 확인하는 것이 좋습니다.
또는 그게 가능하지 않더라도 우리 그룹의 누군가 JMP를 열면 자동으로 저에게 이메일을 보내는 스크립트일까요?
미리 감사드립니다.
추적 기능을 추가 기능으로 설치하는 경우 종료 스크립트를 사용할 수 있습니다. 스크립팅 설명서 526 페이지의 "시작 및 종료 스크립트 지정 (선택 사항)"을 참조하십시오.
추적을 위해 공유 테이블을 사용할 때주의해야 할 사항은 두 명의 사용자가 파일을 열려고 할 때의 사용자 경합입니다. 더 구체적으로 말하면, user1이 열리면 user2가 시작되어 열려고 시도합니다. 이 문제를 해결할 수있는 몇 가지 방법은 다음과 같습니다.
- 전체 스크립트에 try ()를 넣으십시오! user2 추적은 느슨하지만 user2는 오류가 발생하지 않습니다.
- 파일 잠금 - JMP 테이블을 열기 전에 user1이 "lock.txt"파일을 만듭니다.이 파일은 비워 둘 수 있습니다. User2가 시작되면 스크립트는 먼저 lock.txt의 존재 여부를 확인합니다. absent이면이를 생성하고 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 개의 큰 파일에 추가하는 스크립트를 작성해야합니다.
또한 인터넷에서 광고주의 방법을 빌려서 사용자 추적을 수행하는 것도 보았습니다. 즉 웹 비콘입니다. 웹 ()을 사용하여 웹 페이지를 열 수 있습니다.
마지막으로, "개인 정보 보호 정책"을 게시하고 사용자에게 사용 현황을 모니터링하고, 수집 할 데이터를 파악하고, 어떻게 사용할 것인지 알려주도록 권장합니다. 향후 데이터 사용이 변경되면 데이터의 새로운 사용을 명시한 개정 된 "개인 정보 보호 정책"을 게시하십시오.
나는 klaus819에 동의하며 관리자의 관점에서 소프트웨어 설치 및 소프트웨어 사용을 추적하는 비 JMP 방법이 있습니다.
JMP 내부에는 전자 메일 보내기 외에 몇 가지 옵션이 있습니다. 나는 최근에 JMP 시작 스크립트를 사용하여 내 자신의 JMP 사용을 추적하기위한 아이디어를 가지고 놀고있었습니다. 이를 수행하는 방법에 대한 자세한 내용은 257 페이지 주변의 JMP Scripting Guide를 참조하십시오.
아래 스크립트는 Windows 7에서 실행되는 JMP10 용이지만 다른 운영 체제 나 버전에는 약간의 조정이 필요합니다 (위 참조 참조). 이 스크립트는 JMP가 명시 될 때마다 데이터 테이블에 새로운 행을 씁니다. 그것의 설정은 표시되지 않고 실행됩니다.
"이벤트"변수에 다른 정의가있는 다른 유사한 스크립트를 사용했으며 스크립트는 지정된 시간에 Windows 스케줄러에 의해 실행됩니다. 이 경우 스크립트는 내 랩톱이 실행되고있는 경우에만 실행됩니다.이 랩톱은 실행중인 대리인이기도합니다.
이 스크립트는 특정 열 이름을 가진 특정 데이터 테이블을 갖는지 여부에 달려 있습니다. 이 테이블 스크립트는 아래 스크립트 끝에 포함되어 있습니다.
//!
// "//!" 스크립트의 첫 번째 줄에 스크립트를 표시하고 표시하지 않고 실행할 수 있습니다.
//이 스크립트가 열리면 실행되고 닫힙니다. 열려면 편집하려면 JMP 홈 윈도우 파일 목록에서 마우스 오른쪽 버튼을 클릭하고 "편집"을 선택하십시오.
//노트:
//이 스크립트는 Data1.jmp라는 파일을 엽니 다. 빈 테이블에 대한 스크립트가 아래에 포함되어 있습니다.
// 실제로 "log"파일은 모든 사용자가 액세스 할 수있는 디렉토리에 있습니다.
// 사용자가이 컴퓨터에서 JMPon을 열면 스크립트가 실행됩니다.
//
// 스크립트의 이름은 jmpStartAdmin.jsl이어야합니다.
// 스크립트는 Windows 7의 여러 위치에있을 수 있습니다.
// ref : 스크립팅 가이드 p.257 (JMP 10)
// 여기에 스크립트를 저장하십시오 (JMP가 여기에 설치되었다고 가정). C : \ ProgramData \ SAS \ JMP \ jmpStartAdmin.jsl
// jmpStartAdmin.jsl 파일이 이미있는 경우에는이 파일을 덮어 쓰는 것이 좋습니다.
///////////////////////////////////////////////////////////////////// ////// 스크립트
기본 이름은 여기에 있습니다 (1);
//////// 1 단계 : 사용자 이름 및 ID 가져 오기 (R. Lucas (thank you))
// See http://msdn2.microsoft.com/en-us/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);
쇼 (UserName);
쇼 (사용자 ID);
ver = JMP 버전 ();
///////// 2 단계 : 정보를 추가 할 파일을 엽니 다.
// note : 데이터 테이블의 위치에 대한 파일 경로를 직접 추가해야합니다.
dt = open ( "C : \ file path \ Data1.jmp", invisible); // 보이지 않는 인자는 그것을 사용자로부터 숨 깁니다.
//////// 3 단계 : 데이터 테이블에 정보 추가
dt << AddRows ({Col1 = 오늘 (), 이벤트 = "시작", 이름 ( "사용자 이름") = 사용자 이름, 사용자 ID = 사용자 ID, 버전 = 버전});
//////// 4 단계 : 로그 데이터 테이블 닫기
close (dt, save ( "C : \ file path \ Data1.jmp"));
//출구(); 그러면 스크립트가 실행 된 직후에 JMP가 닫힙니다.
//이 스크립트가 windows 스케줄러와 함께 실행되면
// 실행할 수있는 편리한 단계가 되겠지만,이 경우 정말 짜증이납니다.
///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////
// 이것은 "Data1.jmp"에 대한 테이블 스크립트이며, 이것을 실행하여 초기 빈 데이터 테이블을 만듭니다
// 그런 다음 스크립트에서 사용할 수 있도록 파일 경로로 저장합니다.
/ *
새 테이블 ( "Data1",
행 추가 (0),
새 열 ( "타임 스탬프",
숫자,
마디 없는,
형식 ( "m / d / yh : m : s", 23, 0),
입력 형식 ( "m / d / yh : m : s", 0),
값 설정 ([])
),
새 열 ( "이벤트", 문자, 공칭, 설정 값 ({})),
새 열 ( "사용자 이름", 문자, 공칭, 선택 집합, 값 설정 ({})),
새 열 ( "사용자 ID", 문자, 공칭, 설정 값 ({})),
새 열 ( 'Version',
숫자,
마디 없는,
형식 ( "최고", 12),
값 설정 ([])
),
새 열 ( "날짜",
숫자,
마디 없는,
형식 ( "m / d / y", 12),
입력 형식 ( "m / d / y"),
수식 (: 타임 스탬프 - 시간대 (: 타임 스탬프))
),
새 열 ( "작업 완료 기간",
숫자,
마디 없는,
형식 ( "hr : m", 12),
입력 형식 ( "hr : m"),
수식 (시간대 (: 시간대 - : 대상 시간))
),
새 열 ( "대상 시간",
숫자,
마디 없는,
형식 ( "h : m", 8),
입력 형식 ( "h : m"),
값 설정 ([])
),
새 열 ( "요일",
숫자,
마디 없는,
형식 ( "최고", 12),
수식 (요일 (: 타임 스탬프))
)
)
JMP가 시작될 때 자동으로 실행되는 jsl 스크립트를 가질 수 있습니다. JMP 스크립팅 가이드 페이지 259 (JMP 10)를보십시오.
이 스 니펫은 누군가 JMP를 시작할 때마다 사용자 및 시간 정보가 포함 된 메일을 보내야합니다. 스크립트의 이름은 jslStart.jsl이어야하고 C : \ ProgramData \ SAS \ JMP \에 로컬로 있어야합니다 (Windows 버전마다 다를 수 있음).
그러나 JMP를 종료하면 활성화되는 명령을 인식하지 못합니다. 아마도 OS 솔루션이 더 강력 할 것입니다. 필자는 Macintosh 용 JMP를 사용할 때 아래 스크립트를 테스트하지 않았습니다.
// JMP가 시작될 때 사용자 이름과 시작 시간에 대한 정보로 메일을 보냅니다.
만약 ( 호스트 ( Windows ) ,
우편 (
" to@me.com " ,
"사용자 " || 워드 ( 삼 , 기본 디렉토리 가져 오기 () , "/" ) || "JMP를 실행합니다" ,
"사용자 " || 워드 ( 삼 , 기본 디렉토리 가져 오기 () , "/" ) || "에서 JMP 세션을 시작했습니다. ||
체재 ( 오늘 () , "mdy hm" ) || "."
) ,
"메일은 Windows에서만 사용할 수 있습니다."
) ;