2013年9月24日火曜日

Vbscriptでサービスの存在を確認

  • このエントリーをはてなブックマークに追加


プログラムをインストールしたかどうか確認する場合があります。プログラムインストール後、サービスに追加されるのであれば、サービスが存在しているかどうかを確認することで、プログラムがインストールされたどうかを判断できます。

コードは以下です

'ローカルコンピュータに接続する。
Set objLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer
'クエリー条件をWQLにて指定する。
Set objClassSet = objService.ExecQuery("SELECT * FROM Win32_Service WHERE Name='Winmgmt'")

if objClassSet.count = 1 then
    wscript.echo("サービスが存在している")
end if

2013年9月9日月曜日

Windows 8.1 Workplace Join 参加失敗

  • このエントリーをはてなブックマークに追加


以下の手順を参照して、

http://technet.microsoft.com/en-us/library/dn280939.aspx#BKMK_4

Workplace join機能を試そうとしたのですが、Windows 8.1でWorkplace Joinできません。サービスイベントログに以下のようなエラーログが出力されました。

ログの名前:         Microsoft-Windows-Workplace Join/Admin
ソース:           Microsoft-Windows-Workplace Join
日付:            2013/09/04 13:41:30
イベント ID:       102
タスクのカテゴリ:      なし
レベル:           エラー
キーワード:        
ユーザー:          WIN81\user01
コンピューター:       WIN81
説明:
ワークプレース参加の検出に失敗しました。
終了コード: 0x80072F19。
エラー メッセージ: 失効サーバーに接続できなかったか、最終応答を取得できませんでした。

'https://EnterpriseRegistration.abc.com:443/EnrollmentServer/contract?api-version=1.0' に接続できませんでした。

イベント XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Workplace Join" Guid="{76AB12D5-C986-4E60-9D7C-2A092B284CDD}" />
    <EventID>102</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2013-09-04T04:41:30.602681300Z" />
    <EventRecordID>20</EventRecordID>
    <Correlation />
    <Execution ProcessID="2388" ThreadID="3364" />
    <Channel>Microsoft-Windows-Workplace Join/Admin</Channel>
    <Computer>WIN81</Computer>
    <Security UserID="S-1-5-21-2480084168-1165307853-2024782340-1001" />
  </System>
  <EventData>
    <Data Name="ExitCode">0x80072f19</Data>
    <Data Name="ErrorMessage">失効サーバーに接続できなかったか、最終応答を取得できませんでした。
</Data>
    <Data Name="ServiceUri">https://EnterpriseRegistration.abc.com:443/EnrollmentServer/contract?api-version=1.0</Data>
  </EventData>
</Event>

原因は未だにわかっていません。

2013年9月6日金曜日

ASP.net Webサーバーからファイルをダウンロードする

  • このエントリーをはてなブックマークに追加


Asp.netでWebサーバーからファイルをダウンロードするコードです。

private void DownloadFile(string filePath)
      {
          if (filePath != "")
          {
              string path = Server.MapPath(filePath);
              System.IO.FileInfo file = new System.IO.FileInfo(path);
              if (file.Exists)
              {
                  //Response.Cache.SetCacheability(HttpCacheability.NoCache);
                  //Response.ClearContent();
                  Response.Clear();
                  Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                  Response.AddHeader("Content-Length", file.Length.ToString());
                  Response.ContentType = "application/octet-stream";
                  //Response.WriteFile(file.FullName);
                  Response.TransmitFile(file.FullName);
                  Response.End();

              }
              else
              {
                  Response.Write(filePath + "が存在しません。管理者にご連絡ください。");
              }
          }
 
      }

DownloadFile(./download/<filename>)

Javascript Asp.net クライアントのMACアドレスを取得

  • このエントリーをはてなブックマークに追加


JavaScriptでクライアントのMacアドレスを取得してWebサーバーに渡す方法をメモします。

default.apxに以下のコードを追加

<asp:HiddenField ID="hdnResultValue" Value="0" runat="server" />
<asp:Button ID="btn1" runat="server"  OnClientClick="GetMacAddr();" onclick="Btn1_Click" Text="GetMAC"/>

<script type="text/javascript">

  function GetMacAddr() {
        //This function requires following option to be enabled without prompting
        //In Internet Options for IE 5.5 and up
        //Tab Security (Local Internet Sites)
        //Custom Level button
        //"Initialize and script ActiveX control not marked as safe." option enabled
        try {
            var locator = new ActiveXObject("WbemScripting.SWbemLocator");
            var service = locator.ConnectServer(".");

            //Get properties of the network devices with an active IP address
            var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration" +
            " WHERE IPEnabled=TRUE");

            var e = new Enumerator(properties);

            //Take first item from the list and return MACAddress
            var p = e.item(0);
        }
        catch (exception) {
            //alert('Add your domain to Trusted Sites.');
            window.location = "about:blank";
        }
        document.getElementById("hdnResultValue").value = p.MACAddress;
        //return p.MACAddress;
    }
</script>

 

C#の方でhdnResultValueに対して操作する。

protected void Btn1_Click(object sender, EventArgs e)
   {
           string macAddr = hdnResultValue.Value.Replace(":", "");
           label2.Text = hdnResultValue.Value;
   }

※注意
・IEでしか動かない。

・IE⇒インタネットオプション⇒セキュリティでサイトを信頼済みサイトに追加し、信頼済みサイトのセキュリティレベル設定で「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」を有効にする

image

2013年9月5日木曜日

Windows Serve 2012 Backup ディスク領域が不足しているため、保存場所にボリュームのシャドウ コピーを作成できません

  • このエントリーをはてなブックマークに追加


Hyper-vホストのバックアップ(Cボリューム、システム予約済み、システム状態など)を行うときに、以下のようなエラーが発生しました。


------------------------------------------
ディスク領域が不足しているため、保存場所にボリュームのシャドウ コピーを作成できません。バックアップ
するすべてのボリュームについて、シャドウ コピーの作成に必要な最小限のディスク領域が利用可能であることを確認してください。これは、バックアップの保存先と、バックアップに含まれるボリュームの両方について
行う必要があります。
最小要件: 500 MB 未満のボリュームに対して 50 MB の空き領域、500 MB を超えるボリュームに対して 320 MBの空き領域が必要です。
推奨事項: ボリュームのサイズが 1 GB を超える場合、各ボリュームについて、少なくとも 1 GB の空きディス
ク領域が必要です。
エラーの詳細: シャドウ コピーの記憶域ファイルまたはその他のシャドウ コピー データを作成するために利
用できる十分な記憶域がありません。
------------------------------------------


確認してみたら、システム予約済みボリューム(300MBくらい)に空き領域が26MBしかない、50MBの条件を満たしていないため、エラーが発生しました。


仮想マシンのバックアップ、リストア何度もやっていたため、システム予約済みボリュームにWindowsImageBackupのようなゴミデータが残ってました。そのせいで空き領域が少なくなってしましました。

 

image
「ディスクの管理」でシステム予約済みボリュームにドライブ文字(Z:)を割り当てて、エクスプローラーで開き、中のゴミを消したところ、うまくバックアップできました。Zドライブ文字を最後に削除してください。

PowershellでHyper-V仮想マシンをバックアップする

  • このエントリーをはてなブックマークに追加


Windows Server 2012 でホストのバックアップ機能で仮想マシンをバックアップすることができます。

仮想マシンバックアップ用のPowershellコマンドを紹介します。

主な流れとしては、

1:バックアップポリシーを作成する

2:バックアップデータの保存場所、バックアップ対象の仮想マシン、バックアップスケジュールなどをポリシーに紐付ける

3:バックアップポリシーをセット、もしくは開始する

#既存のバックアップポリシーを削除
try { Remove-WBPolicy -all -force }
Catch { Write-Host "No existing Jobs to remove"}

#新しいバックアップポリシーを作成
$bkPolicy = New-WBPolicy

#バックアップデータの保存先を作成
#ローカルボリュームを使う
$bkTarget = New-WBBackupTarget -VolumePath B:

#ネットワーク共有の場合
#$bkTarget = New-WBBackupTarget -NetworkPath \\Server01\BackupStorageLocation


#保存先をポリシーに追加
Add-WBBackupTarget -Policy $bkPolicy -Target $bkTarget

#バックアップ対象となる仮想マシンをポリシーに追加
$VMs = Get-WBVirtualMachine | where vmname -like "et-lab*"
Add-WBVirtualMachine -Policy $bkPolicy -VirtualMachine $VMs

#バックアップスケジュールを設定し、ポリシーに追加
$bkTime = [datetime] "22:00"
Set-WBSchedule -Policy $bkPolicy -Schedule $bkTime


#ポリシーをアクティブする
Set-WBPolicy -Policy $bkPolicy -AllowDeleteOldBackups

#バックアップを直ちに開始。この場合は、スケジュールを設定する必要はない
#Start-WBBackup -Policy $bkPolicy -AllowDeleteOldBackups