JavaScriptにJavaScriptが含まれる方法について少し

こんにちは友人。



すべてが新しい-忘れ去られた古い!

これはHTML / JavaScriptについてではなく、JavaScriptについてのみです!

このトピックをHabréで検索しましたが、見つかりませんでした...



私は会社(Windowsドメイン)でシステム管理者として働いているため、多くの場合、さまざまなスクリプトを記述する必要があります。 作業中に、関数のライブラリが作成され(.prototypeからWMIへ)、常にファイルからファイルにドラッグする必要があり、これは非常に面倒で負担の多いコードです。 ライブラリ関数(JavaScriptで記述されている)の変更が開始されると、非常に不快になります。 次に、この関数が既に使用されている場所を確認する必要がありますか? 検索プロセスは退屈であり、いくつかのファイルをデバッグする手間さえかかります。 そして、数年前、フォーラムのどこか(過去数年で、どれを忘れていましたか)を読んで、そのような「含める」ことができると思いました



この機能は.WSFと呼ばれます。 技術は白亜紀と同じくらい古いです。 .jsを1つ記述すると、このテクノロジーにとって非常に重要であり、スラー化されたxmlでコードを悪化させたくありませんが、「あの」スクリプトから「これ」に関数を追加できることを思い出すとすぐに、このテクノロジーなしではできません。

ここに良い説明があります: http : //www.osp.ru/win2000/2007/08/4684940/



.wsfファイルの先頭にエントリが表示されると、コードボリュームがすぐに減少したことを自分から付け加えます。

 <?xml version = "1.0" encoding = "UTF-8"?>
 <パッケージ>
   <ジョブID = "id01">
     <スクリプト言語= "JScript" src = "\\ server03 \ install \ AdminScripts \ frameWork.js" />
     <スクリプト言語= "JScript">
       <![CDATA [//ここで関数を記述します...
 ]]>
     </ script>
   </ job>
 </ package>




さらに、JavaScriptだけでなくVBScriptも含めることができます。



しかし、別の問題が発生しました。 私はjs / vbsを強調表示する構文を使いたいのですが、xml、javascript / vbscriptが混在しているため、エディタは.wsf形式を解析できません。 さて、時々、ノートブックを使って優れたテクノロジーを使用する方法を疑問に思う必要があります。 すでにwsfファイルを編集するこの方法と和解しましたが、突然、このような問題を心配しているのは自分だけではないことがわかりました!!! そして、このために賢い人が見つかり、優れたエディターを書いたことが判明しました:

スクリプトエディター (試用版ですが...)

優れた機能があります:インテリセンスとの類似性(関数がctrl-Spaceによって「include」を介して取得されたファイルへのパスを強調表示)、エディターウィンドウから直接プログラムを実行する機能( scriptomaticを使用する人なら誰でも感謝します:スクリプトからコードを取得このエディタに挿入して転送します-改訂のため)。 WScript、WshNetworkなどのオブジェクトの組み込みヘルプ。

このエディターの欠点は、知的インデントがなく、テキストエディター設定がほとんどないことです。 しかし、間違いなくプラスは、表の代わりに4つのスペースが書かれていることです(これは私の好みのためです、私は4つのスペースが好きです!)。



以下に例を示します。

frameWork.jsファイルに書き込む関数。このファイルをディレクトリ「\\ server03 \ install \ AdminScripts \ frameWork.js」に配置します。

 //画面にメッセージを表示します(WScript.Echo()を頻繁に記述しないように):
 //エコー出力を抑制するには、この変数をfalseに設定するだけです。
 //何も出力されないように、デバッグプロセスの最後に非常に便利です。
 var boolShowEchoFunction = true;
関数エコー(str)
 {
    if(boolShowEchoFunction == false)
    {
      帰る
    }
     if(typeof(window)!= 'undefined')
     {
       window.alert(str);
     }
     if(typeof(WScript)!= 'undefined')
     {
       WScript.Echo(str);
     }
 }

 //ファイルを開き、その行を保存します(テキストファイルに多くのログを書き込みます)。
関数appendStrToFile(fileName、strData)
 {
   試してみる
    {
      var fso = WScript.CreateObject( "Scripting.FileSystemObject");

      //パスをコンポーネントに展開し、ファイルを書き込むディレクトリがあるかどうかを確認します。
      var arrPath = new Array();
          fileName = fileName.replace(/ [[\ /] + / gi、 "\\")。replace(/ ^ \\\\ /、 "//").replace(/\\/gi,"\n") .replace(/ ^ \ / \ // gi、 "\\\\");
          arrPath = fileName.split( "\ n");
      //パスをたどって、各ディレクトリの存在を確認します。
      var fileName = arrPath [0];
      var n = 0;
          for(n = 1; n <= arrPath.length-2; n ++)
          {
             fileName + = "\\" + arrPath [n];
             if(!fso.FolderExists(fileName))
             {
                  fso.CreateFolder(fileName);
             }
          }
          fileName + = "\\" + arrPath.last();
          if(!fso.FileExists(fileName))
          {
              var file = fso.CreateTextFile(fileName);
                  file.Close();
          }
      var f = fso.GetFile(fileName);
      var file = f.OpenAsTextStream(ForAppending、TristateTrue);
          file.Write(strData);
          file.Close();
    }
   キャッチ(e)
    {
      echo( "書き込みエラー:\ nappendStrToFile(" + fileName + "、" + strData + "):\ n" + e.description + "、\ n");
    }
   帰る
 }

 //今日の日付の文字列を取得します(ゼロで整列):

関数getStrToday()
 {
    var now = new Date();
    var strNowDate = now.getYear()+ "-" +((now.getMonth()+ 1)<= 9? "0": "")+(now.getMonth()+ 1)+ "-" +( now.getDate()<= 9? "0": "")+ now.getDate();
    return strNowDate;
 }

関数getStrTime()
 {
    var now = new Date();
    var strNowTime =(now.getHours()<= 9? "0": "")+ now.getHours()+ ":" +(now.getMinutes()<= 9? "0": "")+ now .getMinutes()+ ":" +(now.getSeconds()<= 9? "0": "")+ now.getSeconds();
    return strNowTime;
 }

 //ミリ秒単位の正確な時間を返します。
関数getStrTimeM()
 {
    var now = new Date();
    var strNowTime =(now.getHours()<= 9? "0": "")+ now.getHours()+ ":" +(now.getMinutes()<= 9? "0": "")+ now .getMinutes()+ ":" +(now.getSeconds()<= 9? "0": "")+ now.getSeconds()+ ":" +(now.getMilliseconds()<= 99?now.getMilliseconds ()<= 9? "00": "0": "")+ now.getMilliseconds();
    return strNowTime;
 }






ライブラリを使用します。

スクリプトは、このスクリプトが実行されたコンピューターの名前をファイルに書き込みます(ファイルをパス「\\ server03 \ install \ AdminScripts \ powerOnToFile.wsf」に書き込みます)。

 <?xml version = "1.0" encoding = "UTF-8"?>
 <パッケージ>
   <ジョブID = "id01">
     <スクリプト言語= "JScript" src = "\\ server03 \ install \ AdminScripts \ frameWork.js" />
     <スクリプト言語= "JScript">
       <![CDATA [//ログエントリイベント
関数logonToFile()
 {
        WshShell = WScript.CreateObject( "WScript.Shell");
        WshNetwork = WScript.CreateObject( "WScript.Network");

    var maxLen = 0;
    var now = new Date();
    var fileName = "\\\\ server03 \\ Files \\ log \\ powerOn \\" + getStrToday()+ "\\ powerOn-[" + WshNetwork.ComputerName + "] [" + getStrToday()+ "]";  // infaがマージするファイルのサフィックス。
    var strNowDate = getStrToday();
    var strNowTime = getStrTime();
        appendStrToFile(fileName + "。txt"、 "\ r \ n [" + strNowDate + "] [" + strNowTime + "] [" + WshNetwork.ComputerName + "]");
 }
 logonToFile();
 ]]>
     </ script>
   </ job>
 </ package>


GPOのActive Directory経由->コンピューターの構成-> Windowsの構成->スクリプトの開始/終了->スタートアップ->「cscript.exe」、「\\ server03 \ Install \ AdminScripts \ powerOnToFile.wsf」



今日、コンピューターの電源が入っていたことがわかりました。



2番目のスクリプトは、このスクリプトが実行されているコンピューター上のユーザーのユーザー名を決定します。

(ファイルをパス「\\ server03 \ install \ AdminScripts \ logonToFile.wsf」に書き込みます):



 <?xml version = "1.0" encoding = "UTF-8"?>
 <パッケージ>
   <ジョブID = "id01">
     <スクリプト言語= "JScript" src = "\\ server03 \ install \ AdminScripts \ frameWork.js" />
     <スクリプト言語= "JScript">
       <![CDATA [//ログエントリイベント
関数logonToFile()
 {
        WshShell = WScript.CreateObject( "WScript.Shell");
        WshNetwork = WScript.CreateObject( "WScript.Network");

    var maxLen = 0;
    var now = new Date();
    var fileName = "\\\\ server03 \\ Files \\ log \\ powerOn \\" + getStrToday()+ "\\ powerOn-[" + WshNetwork.ComputerName + "] [" + getStrToday()+ "]";  // infaがマージするファイルのサフィックス。
    var strNowDate = getStrToday();
    var strNowTime = getStrTime();
        appendStrToFile(fileName + "。txt"、 "\ r \ n [" + strNowDate + "] [" + strNowTime + "] [" + WshNetwork.ComputerName + "]");
 }
 logonToFile();
 ]]>
     </ script>
   </ job>
 </ package>




GPOのActive Directory経由->ユーザーの構成-> Windowsの構成->スクリプトの開始/終了->スタートアップ-> "cscript.exe"、 "\\ server03 \ Install \ AdminScripts \ logonToFile.wsf"

ユーザーが午前中にコンピューターの電源を入れてログインすると、ディレクトリ

\\ server03 \\ファイル\\ログ

必要な情報を含むファイルには、コンピューターの電源がオンになっており、ユーザーが特定のログインで特定のコンピューターにアクセスしたことが記載されています。 ご覧のとおり、両方のファイルで関数echo()とappendStrToFile()が使用され、ライブラリファイルframeWork.jsから取得されたgetStrToday()が使用されました。



これで、管理者として、今日どのコンピューターがオンになり、どのユーザーがログインしたかについての情報が得られました。



このエディターを使用したこのようなシンプルなテクノロジーが、誰かに大きな利益をもたらすことを願っています。



All Articles