ラベル PowerShell の投稿を表示しています。 すべての投稿を表示
ラベル PowerShell の投稿を表示しています。 すべての投稿を表示

2017年6月29日木曜日

PowerShellでSAS.EXEを停止する。

PowerShellを運用スクリプトの問い合せが少し増えてきました。 バッチ実行しているSAS.EXE処理を見つけて、プロセスの情報を表示するサンプルです。 Get-Processの部分を書き換えれば、プロセスを停止できます。
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>



2015年12月26日土曜日

EGPからログを取り出す方法

SAS Enterprise Guide Projectファイルからログを取り出す方法を調べました。調べてみるといくつか技術的な課題あり、てこずったのでここに記しておきます。EGのバージョンは7.1です。さて、その方法ですが、4種類みつけました。

  1. OLE AutomationでVBScriptやPowerShellから取り出す
  2. EGのツール、オプションでカスタムコードを書いてログの出力先を変える
  3. EGPの拡張子をZIPに変えて、フォルダの中からログを取り出す
  4. 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);


  %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));
最後に、ユーザ追加のPS1を示します。
#
# 変数宣言
#
$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