PS C:\Users\sas> $X=WMIC PROCESS WHERE "CommandLine LIKE '%sas.exe -nodms -batch%' and caption = 'sas.exe'" GET /FORMAT:LIST | select-string "^ProcessId=" | % { $($_ -split"=")[1] }
PS C:\Users\sas> $X | Foreach-object -process{Get-Process -id "$_" }
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
126 10 3644 10784 99 0.05 28172 sas
PS C:\Users\sas>
SASプログラムとログを解析するユーティリティを開発するための備忘録です。This is a memo to develop utility that analyzes the SAS log.
2017年6月29日木曜日
PowerShellでSAS.EXEを停止する。
PowerShellを運用スクリプトの問い合せが少し増えてきました。
バッチ実行しているSAS.EXE処理を見つけて、プロセスの情報を表示するサンプルです。
Get-Processの部分を書き換えれば、プロセスを停止できます。
2015年12月26日土曜日
EGPからログを取り出す方法
SAS Enterprise Guide Projectファイルからログを取り出す方法を調べました。調べてみるといくつか技術的な課題あり、てこずったのでここに記しておきます。EGのバージョンは7.1です。さて、その方法ですが、4種類みつけました。
OLE AutomationからVBSやPowerShellでログを取り出す
この方法は、スケジューリングで出力されるVBSのファイルを開いて、手を加えればできます。しかしながら、クエリ、コードタスク以外のログが取れませんでした。ProjectItemsの中をループで探りましたがランクや転置などデータ加工のタスク、グラフ作成のタスクが捕捉できませんでした。何故かは分かっていませんが、そういう実装なのだと割り切って考えています。
EGのツール、オプションでカスタムコードを書いてログの出力先を変える
proc printtoでログの出力先を変えます。この方法が使えるかと思いきや、クライアント/サーバ構成だとログがサーバ上に出力されて、クライアントPCから参照するためにもう一工夫必要になりあます。サーバ側でログの加工をするのであれば、問題ありません。カスタムのコードを設定する箇所が複数ありますが、使い分けは調べてください。
EGPの拡張子をZIPに変えて、フォルダの中からログを取り出す
元ネタはココの記事です。試してみると、サブフォルダのなかにresult.logがありますので、これをピックアップすればログを抽出できます。サブフォルダの中を見ると、削除されたと思しきタスクの殻フォルダがいくつかあります。ゴミがあるやも知れないので、この方法を使うときには検証をしてください。Non Supportです。
Tools、Options、Application Loggingでログを出力する
元ネタはココです。カスタムコードでproc printtoと似ていますが、サーバが出力するコード以外のログが含まれます。
EGPからログを取り出すときの検討項目を挙げます。
参考まで
- OLE AutomationでVBScriptやPowerShellから取り出す
- EGのツール、オプションでカスタムコードを書いてログの出力先を変える
- EGPの拡張子をZIPに変えて、フォルダの中からログを取り出す
- EGのツール、オプション、Application Loggingでログを出力する
OLE AutomationからVBSやPowerShellでログを取り出す
この方法は、スケジューリングで出力されるVBSのファイルを開いて、手を加えればできます。しかしながら、クエリ、コードタスク以外のログが取れませんでした。ProjectItemsの中をループで探りましたがランクや転置などデータ加工のタスク、グラフ作成のタスクが捕捉できませんでした。何故かは分かっていませんが、そういう実装なのだと割り切って考えています。
EGのツール、オプションでカスタムコードを書いてログの出力先を変える
proc printtoでログの出力先を変えます。この方法が使えるかと思いきや、クライアント/サーバ構成だとログがサーバ上に出力されて、クライアントPCから参照するためにもう一工夫必要になりあます。サーバ側でログの加工をするのであれば、問題ありません。カスタムのコードを設定する箇所が複数ありますが、使い分けは調べてください。
EGPの拡張子をZIPに変えて、フォルダの中からログを取り出す
元ネタはココの記事です。試してみると、サブフォルダのなかにresult.logがありますので、これをピックアップすればログを抽出できます。サブフォルダの中を見ると、削除されたと思しきタスクの殻フォルダがいくつかあります。ゴミがあるやも知れないので、この方法を使うときには検証をしてください。Non Supportです。
Tools、Options、Application Loggingでログを出力する
元ネタはココです。カスタムコードでproc printtoと似ていますが、サーバが出力するコード以外のログが含まれます。
EGPからログを取り出すときの検討項目を挙げます。
- プロジェクトファイル名を取得するか否か
- ログは時系列で取り出す必要があるか
- SASログ以外のログが含まれても良いか
- ログの出力先はローカルのPC、又はサーバ上?
- 抽出するファイルは1本にまとめるか、複数バラバラで良いか?
参考まで
2011年6月26日日曜日
PowerShellでSASからユーザ登録
仕事のメモです。とある仕事で、リモートコンソールが使えなくなるということで、SASのリモート実行でユーザ登録、削除を行えるようにしようとしています。まずは、PS1のスクリプトが実行できるようにPowerShellから設定を変更します。
Set-ExecutionPolicy RemoteSigned次に、RSUBMITするSASコード
%macro adduser(name, passwd, fullname, desc);最後に、ユーザ追加のPS1を示します。
%let script=%bquote("C:\Documents and Settings\suzuki\desktop\foo1.ps1");
options noxwait xsync;
x "powershell.exe -file &script &name %quote(&passwd) %quote(&fullname) %quote(&desc)";
%if &sysrc=0 %then %do;
%put INFO: adduser success &name;
%end;
%else %do;
%put INFO: adduser error &name;
%end;
%mend;
options nomprint nosource;
%adduser(a, Sas4passworddayo!, %str(my name), %str(test desc));
%adduser(b, Sas4passworddayo!, %str(my name), %str(test desc));
%adduser(c, Sas4passworddayo!, %str(my name), %str(test desc));
#
# 変数宣言
#
$USER_NAME = $args[0]
$USER_PASSWORD = $args[1]
$USER_FULLNAME = $args[2]
$USER_DESCRIPTION = $args[3]
#
# ローカルユーザー作成
#
$computer = [ADSI]"WinNT://."
$user = $computer.Create("user", $USER_NAME)
$user.SetPassword($USER_PASSWORD)
$user.SetInfo()
$user.FullName = $USER_FULLNAME
$user.Description = $USER_DESCRIPTION
$user.UserFlags = 0x10000 #パスワードを無期限に設定
try {
$user.SetInfo()
}
catch {
exit 99
}
exit 0
登録:
投稿
(
Atom
)