2013年12月20日金曜日

AD管理PowerShellコマンドで連絡先(Contact)を作成

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


 

AD管理用のPowershellでADのユーザー、グループなどに対していろんな操作ができます。New-ADUser、New-ADGroupなどのコマンドが用意されています。しかし、連絡先オブジェクトを操作するコマンドが提供されていません。どうやらNew-ADContact、Set-ADContactのようなコマンドがないです。

で、どうしたらいいですか?

実はNew-ADObjectというコマンドがあります。これを使って、連絡先を作ることができます。

  • 「Users」コンテナにC2という連絡先が作成される。属性には何の値が付与されていない状態
New-ADObject -Name c2 -Type contact -Path "cn=users,dc=contoso,dc=local"

 

  • Set-ADObjectで連絡先の属性を変更する

#連絡先オブジェクトをゲットして、変更しようとする属性を指定する
$contactPara=Get-ADObject -Identity "cn=c2,cn=users,dc=contoso,dc=local" -Properties "DisplayName","sn","GivenName","mail"

#各属性に値を設定する
$contactPara.DisplayName="Contact2"
$contactPara.sn="Test"
$contactPara.GivenName="Contact2"
$contactPara.mail=”contact2@contoso.local

#値を反映する
Set-ADObject -Instance $contactPara

属性がmulti-valued の場合は、配列に設定すればいいです。

$contactPara.url=@("www.contoso.com","www.f.com")

 

  • 連絡先を削除する
Remove-ADObject -Identity "cn=c1,cn=users,dc=contoso,dc=local"

 

参考

http://technet.microsoft.com/en-us/library/ee617254.aspx

2013年12月19日木曜日

選択した仮想マシンの起動中にエラーが発生しました。復元できません

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


Hyper-V仮想マシンを前のスナップショットに戻す時に以下のようなエラーが発生する場合があります。

‘仮想マシン名’は復元できませんでした。
仮想マシンは、物理コンピューター’ホスト名’でサポートされていないプロセッサー固有の機能を使用しています。
......

 

image

これは、仮想マシンをホスト間で移行した場合に発生します。移行前のスナップショットを移行後のホストで復元できないようです。

回避策としては、元のホストに戻して復元する必要があるそうです。

2013年12月8日日曜日

東京タワー

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


2013年12月3日火曜日

Windows Server 2012 Hyper-V Live Migration (0x8009030E)

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


クライアント(Windows 8/7)のHyper-Vマネージャーで仮想マシンを別のホストに移動する時に、以下のエラーが出る場合があります。

ホスト’host name’との接続を確立できませんでした:セキュリティパッケージで利用できる資格情報がありません(0x8009030E)。

仮想マシン管理サービスは、ソースホストで仮想マシンの移行のための接続を認証できませんでした:適切な資格情報がありません。移行のソースホストで操作が開始されていること、またはソースホストが移行の接続の認証にKerberosを使用するように構成されていて、Active Directoryでホストに対して制約付き委任が有効になっていることを確認してください。

......

 

Configure Live Migration and Migrating Virtual Machines without Failover Clustering

 

Step1~3を実施してもダメだった場合は、Hyper-vを起動しているPCを再ログオンしてみてください。再ログオンすることでうまくいく時があります。

2013年11月28日木曜日

Exchange 2013 「メールボックスサーバー」「送信接続失敗時の再試行間隔(分)」で設定する数値は分ではなく、秒数です

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


Exchange 2013で「サーバー」→「メールボックスサーバー」→「トランスポートの制限」→「再試行:送信接続失敗時の再試行間隔(分)」で設定した数値は分ではなく、秒数です。

例えば、500を設定した場合は、500分じゃなくて500秒です。

image

対応のパラメータ(OutboundConnectionFailureRetryInterval)を見ると"00:08:20"になっている。8分20秒です。

下記コマンドで確認できます。

Get-TransportService ws12mbx1 | fl OutboundConnectionFailureRetryInterval

2013年11月18日月曜日

Exchange 2013 DAGメンバーサーバーの追加時のエラ-

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


EACからデータベース可用性グループを作成して、メンバーサーバーを追加したところ、以下のようなエラーが出ました。

サーバー側のデータベース可用性グループの管理操作に失敗しました。エラー:操作が失敗しました。CreateClusterエラーは静的アドレスが正しく設定されていないために発生した可能性があります。クラスタの操作中にエラーが発生しました。エラー:クラスターAPI’”0x5でCreateCluster()が失敗しました。エラー:アクセスが拒否されました。"’。「サーバー:<サーバーFQDN>」

アクティブマネージャーの操作は一時的なエラーが原因で失敗しました。操作を再施行してください。エラー:ノード<仮想サーバーFQDN>の完全修飾ドメイン名が見つかりませんでした。

 

どうやら仮想サーバーのオブジェクト作成に権限がないようです。

DAGを作成する前に、cluster name object (CNO)を作成したほうがいいです。

手順は以下です。


Pre-stage the CNO


  1. Open Active Directory Users and Computers.
  2. Expand the forest node.
  3. Right-click the organizational unit (OU) in which you want to create the new account, select New, and then select Computer.
  4. In New Object - Computer, type the computer account name for the CNO in the Computer name box. This is the name that you'll use for the DAG. Click OK to create the account.
  5. Right-click the new computer account, and then click Disable Account. Click Yes to confirm the disable action, and then click OK.

Assign permissions to the CNO


  1. Open Active Directory Users and Computers.
  2. If Advanced Features aren't enabled, turn them on by clicking View, and then clicking Advanced Features.
  3. Right-click the new computer account, and then click Properties.
  4. In <Computer Name> Properties, on the Security tab, click Add to add either the computer account for the first node to be added to the DAG or to add the Exchange Trusted Subsystem USG:
    • To add the Exchange Trusted Subsystem, type Exchange Trusted Subsystem in the Enter the object names to select field. Click OK to add the USG. Select the Exchange Trusted Subsystem USG and in the Permissions for Exchange Trusted Subsystem field, select Full Control in the Allow column. Click OK to save the permission settings.
    • To add the computer account for the first node to be added to the DAG, click Object Types. In the Object Types dialog box, clear the Built-in security principals, Groups, and Users check boxes. Select the Computers check box and click OK. In the Enter the object names to select field, type the name of the first Mailbox server to be added to the DAG, and then click OK. Select the first node's computer account, and in the Permissions for <NodeName>field, select Full Control in the Allow column. Click OK to save the permission settings.

 

http://technet.microsoft.com/en-us/library/ff367878.aspx

2013年10月18日金曜日

Windows ストアでWindows 8.1の更新プログラムが見つかりません

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


 

・KB 2871389更新プログラムがインストールされていない。Windows Updateからインストールする必要がある。

・以下のエディションの場合は、Storeから無料アップデートがサポートされていません。

  • Windows 8 Enterprise

  • Editions of Windows 8 Pro that are installed by enterprises using KMS activation

  • Editions of Windows 8 that are installed using an MSDN ISO, and activated using multiple activation keys

Why can't I find the update in the Store?

2013年10月16日水曜日

フェールオーバークラスタ Event ID 1194, 1069, 1205, 1254

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


Windows Server 2012 でCluster1という名前のクラスタをインストールし、fileserverというファイルサーバー役割を構成しました。

役割fileserverを構成後、fileserverをオンラインにできず、以下のようなエラーイベントが出力されました。

ログの名前:         System
ソース:           Microsoft-Windows-FailoverClustering
日付:            2013/10/16 14:44:58
イベント ID:       1194
タスクのカテゴリ:      ネットワーク名リソース
レベル:           エラー
キーワード:        
ユーザー:          SYSTEM
コンピューター:       WS1201.abcd.local
説明:
クラスター ネットワーク名リソース 'fileserver' は、ドメイン 'abcd.local' の関連付けられたコンピューター オブジェクトを作成できませんでした (期間: Resource online)。

関連するエラー コードのテキストは次のとおりです: 制限の違反が発生しました。


ドメイン管理者と協力して、次のことを確認してください。
- クラスター ID 'CLUSTER1$' が、コンピューター オブジェクトを作成するためのアクセス許可を持っていること。既定では、すべてのコンピューター オブジェクトがクラスター ID 'CLUSTER1$' と同じコンテナー内に作成されます。
- コンピューター オブジェクトのクォータに達していないこと。
- 既存のコンピューター オブジェクトがある場合は、[Active Directory ユーザーとコンピューター] のツールを使用して、クラスター ID 'CLUSTER1$' にそのコンピューター オブジェクトに対するフル コントロールのアクセス許可があることを確認してください

イベント XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-FailoverClustering" Guid="{BAF908EA-3421-4CA9-9B84-6689B8C6F85F}" />
    <EventID>1194</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>19</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2013-10-16T05:44:58.872055000Z" />
    <EventRecordID>1208</EventRecordID>
    <Correlation />
    <Execution ProcessID="5160" ThreadID="3020" />
    <Channel>System</Channel>
    <Computer>WS1201.abcd.local</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <EventData>
    <Data Name="ResourceName">fileserver</Data>
    <Data Name="DomainName">abcd.local</Data>
    <Data Name="FailureString">Resource online</Data>
    <Data Name="Status">制限の違反が発生しました。
</Data>
    <Data Name="ClusterIdentity">CLUSTER1$</Data>
    <Data Name="BinaryParameterLength">4</Data>
    <Data Name="BinaryData">2F200000</Data>
  </EventData>
</Event>

ログの名前:         System
ソース:           Microsoft-Windows-FailoverClustering
日付:            2013/10/16 14:44:58
イベント ID:       1069
タスクのカテゴリ:      リソース コントロール マネージャー
レベル:           エラー
キーワード:        
ユーザー:          SYSTEM
コンピューター:       WS1201.abcd.local
説明:
クラスター化された役割 'fileserver' の種類 'Network Name' のクラスター リソース 'fileserver' が失敗しました。

リソースおよび役割のエラー ポリシーに基づいて、このノードでリソースをオンラインにする処理またはグループをクラスターの別のノードに移動した後に再起動する処理がクラスター サービスによって試行される場合があります。フェールオーバー クラスター マネージャーまたは Get-ClusterResource Windows PowerShell コマンドレットを使用して、リソースおよびグループの状態を確認してください。
イベント XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-FailoverClustering" Guid="{BAF908EA-3421-4CA9-9B84-6689B8C6F85F}" />
    <EventID>1069</EventID>
    <Version>1</Version>
    <Level>2</Level>
    <Task>3</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2013-10-16T05:44:58.879055700Z" />
    <EventRecordID>1209</EventRecordID>
    <Correlation />
    <Execution ProcessID="4256" ThreadID="4468" />
    <Channel>System</Channel>
    <Computer>WS1201.abcd.local</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <EventData>
    <Data Name="ResourceName">fileserver</Data>
    <Data Name="ResourceGroup">fileserver</Data>
    <Data Name="ResTypeDll">Network Name</Data>
  </EventData>
</Event>

ログの名前:         System
ソース:           Microsoft-Windows-FailoverClustering
日付:            2013/10/16 14:44:58
イベント ID:       1205
タスクのカテゴリ:      リソース コントロール マネージャー
レベル:           エラー
キーワード:        
ユーザー:          SYSTEM
コンピューター:       WS1201.abcd.local
説明:
クラスター化されたサービスまたはアプリケーション 'fileserver' を完全にオンラインまたはオフラインにすることはできませんでした。1 つ以上のリソースが失敗した状態になっている可能性があります。これは、クラスター化されたサービスまたはアプリケーションの可用性に影響を及ぼす場合があります。
イベント XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-FailoverClustering" Guid="{BAF908EA-3421-4CA9-9B84-6689B8C6F85F}" />
    <EventID>1205</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>3</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2013-10-16T05:44:58.880056600Z" />
    <EventRecordID>1210</EventRecordID>
    <Correlation />
    <Execution ProcessID="4256" ThreadID="4468" />
    <Channel>System</Channel>
    <Computer>WS1201.abcd.local</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <EventData>
    <Data Name="ResourceGroup">fileserver</Data>
  </EventData>
</Event>

ログの名前:         System
ソース:           Microsoft-Windows-FailoverClustering
日付:            2013/10/16 14:44:58
イベント ID:       1254
タスクのカテゴリ:      リソース コントロール マネージャー
レベル:           エラー
キーワード:        
ユーザー:          SYSTEM
コンピューター:       WS1201.abcd.local
説明:
クラスター化された役割 'fileserver' がフェールオーバーのしきい値を超えました。割り当てられたフェールオーバー期間内に試行できる構成済みのフェールオーバー回数の上限に達したため、エラー状態のままとなります。この役割をオンラインにしたり、クラスター内の別の役割にフェールオーバーしたりするために、これ以上の処理が試行されることはありません。エラーに関係するイベントを確認してください。エラーの原因となった問題を解決した後で、この役割を手動でオンラインにするか、再起動の遅延期間が過ぎた後で、クラスターから役割をオンラインにすることができます。
イベント XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-FailoverClustering" Guid="{BAF908EA-3421-4CA9-9B84-6689B8C6F85F}" />
    <EventID>1254</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>3</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2013-10-16T05:44:58.880056600Z" />
    <EventRecordID>1211</EventRecordID>
    <Correlation />
    <Execution ProcessID="4256" ThreadID="4468" />
    <Channel>System</Channel>
    <Computer>WS1201.abcd.local</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <EventData>
    <Data Name="ResourceGroup">fileserver</Data>
  </EventData>
</Event>

原因としては、Cluster Name Object(CNO)であるCluster1がfileserverコンピューターオブジェクトを作成する権限を持っていないからです。

こちらの環境は、クラスタノードがDCになっているため、CNOとVirtual Computer Objects (VCO)が「Domain Controllers」に入っています。メンバーサーバーの場合は、コンテナ「Computers」に入るはず。

image

CNO(Cluster1)がOU「Domain Controllers」に対し、Create権限がなくて、fileserverというVCOを作成できないため、エラーが発生したわけです。

で、解決方法は、Cluster1に権限を付与すればいいです。

1,「Active Directoryユーザーとコンピューター」を起動し、「Domain Controllers」を右クリックし、「プロパティ」を選択する。

2,「セキュリティ」タブで「詳細設定」をクリックする。

3,詳細設定画面で「追加」をクリックする。

4,「プリンシパルの選択」をクリックする。
image

5,以下の画面が表示され、「オブジェクトの種類」で「コンピューター」をチェックする。Cluster1(CNO)を入力しOK。
image image

image

6,アクセス許可エントリ画面で「すべてのプロパティの読み取り」と「コンピューターオブジェクトの作成」をチェックして、OKをクリック。

imageimage

2013年10月11日金曜日

Windows Server 2012 Failover Cluster logの場所

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


Windows Server 2012ではGet-ClusterLogというPowershellコマンドがあります。これを使って、クラスタログの場所や、ログファイルの属性(サイズ、更新日時)などを確認することができます。

Get-ClusterLog

image

ログファイルのLengthは4369648で、場所は\\WS1202.abcd.local\admin$\Cluster\Reports\Cluster.logになっていることがわかります。

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

2013年8月7日水曜日

VBScriptでWeb上のファイルをダウンロードする

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


VBScriptでWebサイト上のファイルをダウンロードするスクリプトです。

例:comodoのinstallerを自作のWEBサーバーにおいて、そこからダウンロードし、クライアントの方で実行するスクリプトです。関数DownloadFileがダウンロードファイルのURL、ファイル名、保存先フォルダを指定してて使えます。

Function DownloadFile(strUrl,strFile,strFolder)
    ' ダウンロード用のオブジェクト
    Set objSrvHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")
    on error resume next
    Call objSrvHTTP.Open("GET", strUrl, False )
    if Err.Number <> 0 then
        Wscript.Echo Err.Description
        Wscript.Quit
    end if
    objSrvHTTP.Send

    if Err.Number <> 0 then
    ' おそらくサーバーの指定が間違っている
        Wscript.Echo Err.Description
        Wscript.Quit
    end if
    on error goto 0
    if objSrvHTTP.status = 404 then
        Wscript.Echo "URLが正しくありません(404)"
        Wscript.Quit
    end if
    ' バイナリデータ保存用オブジェクト
    Set Stream = Wscript.CreateObject("ADODB.Stream")
    Stream.Open
    Stream.Type = 1 ' バイナリ
    ' 戻されたバイナリをファイルとしてストリームに書き込み
    Stream.Write objSrvHTTP.responseBody
    ' ファイルとして保存
    Stream.SaveToFile strFolder & strFile, 2
    Stream.Close
End Function

'Webサイト上のフルパス
url = "http://10.10.3.60/download/cert/cispremium_installer.exe"
'保存先フォルダ
folder = "c:\temp\"
'保存したファイルの名前
filename = "cispremium_installer.exe"

'ダウンロード
DownloadFile url, filename, folder

'ダウンロードしたあとに、.exeを実行する
cmd = "cmd /c " & folder & filename
Set objShell = WScript.CreateObject("WScript.Shell")
’Runで1を指定すると画面が表示される
objShell.Run cmd,1,true
set objShell = Nothing

2013年8月2日金曜日

Powershell 2.0では配列にContainsメッソドが使えない

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


Powershell 2.0では、配列に要素が存在するかを確認するときに、Contains()メッソドを使うと、エラーが発生します。

[System.Object[]] に 'contains' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。
発生場所 行:1 文字:14
+ $arr.contains <<<< ("aa")
    + CategoryInfo          : InvalidOperation: (contains:String) []、RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Powershell 3.0ではうまくいくのですが、Powershell 2.0では使えません。

image

代替策としては、-Containsを使います。

$arr  –contains  “aa”

実行すると、Trueが返って来ます。

Powershell 重複要素 異なる要素の出力と配列結合

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


今日は、Powershellの配列についての話です。

複数配列に存在している同じ(共通)要素を取り出したり、異なる要素を出力したりすることがあります。

例えば、以下2つの配列があるとします。

$array1 = "apple","bear","cat","dog"
$array2 = "apple","book","cut","dog"

1)2つ配列の共通要素を出力する

$array1 | Where-Object { $array2 -contains $_}
または
$newArr = @()
$array1 | ForEach-Object{ if($array2 -contains $_){ $newArr += $_ }}

 

2)$array1にある、$array2にない要素を出力する

$array1 | Where-Object { $array2 -notcontains $_}
または
$newArr = @()
$array1 | ForEach-Object{ if($array2 -notcontains $_){ $newArr += $_ }}

 

3)2つの配列を結合して、重複要素を重複させないようにする

$unionArr = $array1 + $array2 |  Select-Object –Unique

image

2013年7月30日火曜日

Swapのswappinessを小さくすることで、Linux Mint・Ubuntuを速くする

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


既定では、Ubuntu、Linux MintでSwap領域(ハードディスク上の仮想メモリ)をよく使います。サーバーやメモリが少ない端末ではSwapを使用することがよいことですが、個人PC、クライアント(メモリが足りている)では高い頻度で使うとパフォーマンスに悪影響が出る恐れがあります。仮想メモリが本物のメモリよりはるかに遅いからです。

Swapのtendencyを表す値swappiness(範囲:0~100)があります。
0は、なるべくSwap領域を使わない
100は、よく使う。

この値を調整することで、Swapの使用を制御できます。

1)現在値の確認(既定では60になっている)
$ cat /proc/sys/vm/swappiness

2)値を小さくする
$ gksudo gedit /etc/sysctl.conf
sysctl.confファイルを開き、以下を追加する(例:10に設定)

# Reduce the swap tendency
vm.swappiness = 10

3)sysctl.confを保存し、rebootでシステムを再起動する

4)変更後再度値を確認
$ cat /proc/sys/vm/swappiness




2013年7月29日月曜日

PsExecでローカルコンピューター上のプログラムをリモートコンピューターにコピーして実行する

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


PsExecに-cオブションがあります。

これを使って、ローカルコンピューターにあるプログラムをリモートコンピューターにコピーして実行することができます。

普通実行するプログラムがリモートサーバー上においてあります。

例えば、

リモートコンピューター c:\tmp\mkdir.bat
ローカルコンピューター c:\temp\PsExec.exe
c:\temp\call.bat

PsExecコマンドをcall.batバッチに書きます。

rem プログラムがリモートコンピューターにある場合
c:\temp\psexec.exe \\10.10.3.60 -u contoso\administrator -p P@ssw0rd  c:\tmp\mkdir.bat

pause

image

call.batを実行すると、リモートコンピューターでc:\temp\testフォルダが作成されます。
image

 

-cオプションを使う場合、プログラムをローカルコンピューターに置きます。

リモートコンピューター なし
ローカルコンピューター c:\temp\PsExec.exe
c:\temp\call.bat
c:\temp\mkdir.bat

rem プログラムがローカルコンピューターにある場合
c:\temp\psexec.exe \\10.10.3.60 -u contoso\administrator -p P@ssw0rd -c c:\temp\mkdir.bat

pause

image

image

PsExecでリモートコンピューターで実行するプログラムの優先度を設定する

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


PsExecは、リモートコンピューター(サーバー、システム)でプログラムを実行できる強力なツールです。

詳細はこちらをご参照ください。

PsExec

PsExecでリモートコンピューター上のリモート実行対応のプログラムを実行出来ます。バッチ、Powershell、それから普通の.exe、ほとんど対応できます。

ただし、時にはリモートプログラムの実行が反応が遅かったり、途中で応答なし実行に失敗したりすることがあります。リモートコンピューターですぐにはプログラムを実行してくれないようです。

こういう時に、プログラムの実行優先度をHighなどに設定することで、解消できる可能性があります。

PsExecで設定できるプログラムの実行優先度は5つあります。

-low 優先度が低い
-belownormal 普通より低い
-belownormal 普通より高い
-high 優先度が高い
-realtime リアルタイムで優先度が適用される

例:優先度を高くしてリモートでプログラムを実行するコマンドは以下です。

c:\temp\psexec.exe \\server –u <user>  –p <password> –high <program>

c:\temp\psexec.exe \\10.10.3.60 -u contoso\administrator -high -p P@ssw0rd  c:\temp\hostname.bat

2013年7月21日日曜日

Linux Thinkpad トラックポイントの速度と感度を設定する

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


自宅のPC(Thinkpad x201)にLinux Mint 15をインストールしてみました。ThinkPadのトラックポイント(Trackpoint)が鈍くて遅い、操作にはかなり不便を感じます。速くする方法を調べて見たところ、以下の方法を見つけました。二つの値(SpeedとSensitivity)を変更して速くなりました。

Ubuntu 10のころからこの方法で動くそうです。


SpeedとSensitivityという二つのファイルが/sys/devices/platform/i8042/serio1にあります。

Terminalを起動し、serio1に移動します。
root権限でspeed,sensitivityの値を変更します。
値の範囲は0~255、大きいほうが速いです。
私のPCの既定値はspeedが97で、sensitivityが128でした。
ここで両方とも255に設定します。

# echo -n 255 > speed
# echo -n 255 > sensitivity













変更後、トラックポイントの動きが速くなって快適に使えるようになります。

ただし、一度システムを再起動すると、元の値に戻ってしまいます。
それを回避するために、viで/etc/rc.localファイルに以下の二行を追加します。

echo -n 255 > /sys/devices/platform/i8042/serio1/speed
echo -n 255 > /sys/devices/platform/i8042/serio1/sensitivity























これでシステムを再起動する際に二つの値が自動的に255に設定されるようになります。

参考情報

How to configure the TrackPoint



2013年7月20日土曜日

デュアルブート(Windows 7とLinux Mint 15)のブート順序を変更する

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


Windows 7とLinux Mint 15のDual Bootの環境を作成しました。Windows 7を先に入れて、Linux Mint 15はあとからインストールしました。

で、PCを起動すると、ブート方式が普段のWindows7のではなく、Linux GRUB loaderとなります。下の図の様な感じです。
image

Mint 14の画面ですが、Mint 15も同じ感じです。

何もしない時(デフォルトの状態)はMint 15に入りますが、windows7に入りたい場合は、一番下のWindows 7 Loaderを選択して起動出来ます。

デフォルトでWindows 7を起動したい場合は、この順序を変える必要があります。

順序を変えるにはEasyBCDというツールを使います。

ダウンロードはこちらから https://neosmart.net/EasyBCD/

1)EasyBCDを起動し、Mint 15のためのブートエントリーを追加する。
 image
Type:GRUB 2
Name:わかりやすい名前でいい

2)Windows 7のブートエントリーを追加する。
image
PartitionでWindows のシステムドライブを指定(既定ではC)
Install the Windows Vista/7 bootloader to MBRをチェックする

3)Windows 7とMint 15のブート順序を確認する。
image
Windows 7がデフォルト(YES)になっている。
必要に応じて、Timeout Optionsを指定する(既定では30秒カウントダウン)。ブートメニューをスキップしたい場合は、「Skip the boot menu」をチェックすればいい。

これで、設定が完了です。再起動すると、Windows7風のBootメニューが表示される。
image

2013年7月19日金曜日

Linux Mintのブート可能なUSBを作成する

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


つい最近、Linux Mint 15 "Olivia"がリリースされました。すごいですね、シンプル、快速なMintが人気上昇中!

さて、Linux Mint 15 のインストール用のUSBを作成する手順を紹介します。他のバージョンやディストリビューションも適用できると思います。

1)まずは、Linux Mint 15のイメージファイルのダウンロードです。

Download Linux Mint 15 Olivia

デスクトップの種類が幾つかありますね。Cinnamon、MATE、Xfceとか。筆者はCinnamon 64bitを利用しています。

2)ブートUSB作成用のツールをダウンロードして、そのツールを使ってブート用のUSBを作成します。

ツールは割りと多いようです。ここでUnetbootinを選択して説明します。なぜなら、.exeファイルサイズが小さくて、ほぼすべてのディストリビューションが対応で、インストールする必要もないからです。ツールの選びはお好みでしてください。

現時点で最新版はUnetbootin-windows-585になっています。

UNetbootin, Universal Netboot Installer

Universal USB Installer

既にISOファイルをダウンロードできたので、「ディスクイメージ」を選択します。

imageimageimage
「終了」をクリックし、ブートUSBの作成が完了です。Bootable USBを使ってPCにLinux Mintをインストールできるようになります。

※補足
事前にISOファイルをダウンロードしていない場合でも、Unetbootinで自動的にダウンロードしてくれます。

imageimage

 

※注意

USBから起動しようとすると、下記メッセージが表示されて次へ進まないケースがあります。

BOOTMGR is missing
Press Ctrl+Alt+Del to restart

原因は、USBをFAT32にフォーマットしていないからです。

UnetbootinでLIVE USBを作成する前に、USBをフォーマットする必要があります。

「エクスプローラー」を開いて、対象USBを右クリックし、「フォーマット」を選択します。フォーマット画面でファイルシステムをFAT32(既定)に設定し、フォーマットを開始します。

image

これで作成したUSBからブートできるようになります。

2013年7月11日木曜日

証明書の最長有効期間について

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


今日は証明書の最長有効期間についての話をしたいと思います。

certreq.exe –New –f c:\temp\win7.inf c:\temp\win7.req
※win7.infの中身を省略する
※certreqで証明書要求作成、発行について、こちらをご参照ください

certreq.exe –Submit  -q  -f  -config  ca01.test.local\test-ca01-ca   c:\temp\win7.req c:\temp\win7.cer

上記の証明書発行コマンド(Certreq.exe –submit…)をCAサーバー上で実行する時に、以下のようなメッセージが出る場合があります。

テンプレート有効期間が CA が許可する証明書の最長有効期間よりも長いため、証明書の有効期間は <テンプレート名> 証明書テンプレートが指定するよりも短くなります。CA 証明書を更新するか、テンプレートの有効期間を短くするか、レジストリ有効期間を長くしてください

メッセージ自体はエラーではありません。証明書が問題なく生成できます。ただし、作成できた証明書(win7.cer)の有効期限が証明書テンプレートで設定した有効期限と異なります。例えば、テンプレートで10年の有効期間を設定したのに、実際に作成できた証明書の有効期間が2年とか、5年未満になっていることがあります。

原因としては、証明書の有効期間が以下の3つ値と関連しているからです。

1、CAサーバー上のレジストリに設定された期間(既定2年)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA Name>\ValidityPeriod
値:Years

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA Name>\ValidityPeriodUnits
値:2

2、CAサーバーの有効期間

3、証明書テンプレートで設定された有効期間

1が2より、2が3より、優先順位が高いです。

 

例えば、
・2013年1月1日でルートCAサーバーを立てた。「このCAから生成された証明書の有効期間を選択」で5年に設定した。
image

・テンプレート作成で10年に設定した。

この場合、1~3の値は以下となります。
1、レジストリの有効期間が既定で2年
2、CAサーバーの有効期間は5年。(2013/01/01 ~ 2018/01/01)
3、テンプレートでの有効期間は10年。

●2013/06/01の時点でCertreqコマンドで証明書を生成した時に、1の制限が効くので、証明書の有効期間は2年(2013/06/01 ~ 2015/06/01)になる。

●1レジストリの値を10年に設定した場合、2の制限が適用される。有効期間は5年未満(2013/06/01 ~ 2018/01/01)になる。

●2CAの有効期間を15年に構成した場合(CAの有効期間:2013/01/01 ~ 2028/01/01)、3の制限が適用されるので、有効期間は10年(2013/06/01 ~ 2023/06/01)になる。

 

1のレジストリの有効期間の確認と設定はcertutilコマンドでもできます。

※確認
certutil –getreg ca\ValidityPeriod
certutil –getreg ca\ValidityPeriodUnits

※設定
certutil –setreg ca\ValidityPeriodUnits 10

※CertSvcサービスを再起動する

 

参考情報

How to Create Certificates with a Longer Validity Period

2013年7月10日水曜日

net useで共有フォルダをドライブにマッピングした場合、「管理者として実行」でCMDを起動するとドライブが認識されない

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


net useを使って共有フォルダをローカルのドライブにマッピングします。普通にCMDを起動すると、ドライブを普通に利用できますが、「管理者として実行」で起動した場合は、”指定されたドライブが見つかりません”というメッセージが表示されます。

image

 

以下のシナリオを考えてみます。

・Xドライブに、管理者権限に昇格し実行する必要があるVBScript(Test.vbs)がある

・Test.vbsを呼び出すバッチ(callVBS.bat)がある

image

Test.vbsの内容は以下です。

' 管理者権限に昇格 
' WScript.Arguemnts.Count = 0:GUI 1:CUI 
do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7 
 
  ' Check WScript5.7~ and Vista~ 
  Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") 
  Set os = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem") 
  For Each value in os 
    if left(value.Version, 3) < 6.0 then exit do  'Exit if not vista 
  Next 
  
  ' Run this script as admin. 
  Set sha = CreateObject("Shell.Application") 
  sha.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ uac", "", "runas" 
  
  WScript.Quit 
loop 
 
' todo: 
Set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.RegWrite "HKLM\SOFTWARE\Test\Value", "Test", "REG_SZ" 

 

バッチを実行すると、UACのポップアップ画面が表示されて、「はい」を選択したら、”スクリプト ファイル <Script name>が見つかりません。”という旨のエラーが出ます。

image

 

なぜかわからないですが、どうやら、マッピングしたドライブに直接実行することができなくて、VBScriptをローカルにコピーして実行する必要があります。

2013年7月4日木曜日

Windows Server 2012でMSFCを使わずに仮想マシンのライブマイグレーションを構成する

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


Windows Server 2012以前のバージョンではライブマイグレーションを実現するためにフェールオーバークラスタリング(MSFC)が必須条件でした。2012になってFailover Clusterを使用せず、Live Migration環境を構築できるようになりました。非クラスター環境でライブ マイグレーションの大まかな手順を簡単にご紹介します。

●前提条件の確認

●「必要に応じて省略可能」制約付き委任を構成する
「Active Directoryユーザーとコンピューター」でコンピューターオブジェクトに対して設定する
image

●ライブマイグレーションの移行元サーバーと移行先サーバーを構成する
>Hyper-Vマネージャーで設定(移行元サーバー、移行先サーバーに対して同じ設定をする)
image

>Powershellで行う場合

PS C:\> Enable-VMMigration
PS C:\> Set-VMMigrationNetwork 192.168.10.1
PS C:\> Set-VMHost –VirtualMachineMigrationAuthenticationType Kerberos

 

●実行中の仮想マシンを移動する
Windows Server 2012 で Hyper-V を実行しているサーバーから別のサーバーへ、実行中の仮想マシンを移動する。
>Hyper-Vマネージャーを使う
image
image
image
image

>Powershellの場合

PS C:\> Move-VM LMTest TestServer02 –IncludeStorage –DestinationStoragePath D:\LMTest

 

参考情報

クラスター化されていない仮想マシンでのライブ マイグレーションの構成と使用

2013年6月27日木曜日

Office 2010 KMS Host ライセンスパックをWindows 8 Or Windows Server 2012にインストールする

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


現行バージョンのOffice 2010 KMS ホストライセンスパックをWindows 8 Or Windows Server 2012にインストールすると、サポートされていないOSという旨のエラーが表示されます。

以下のステップで回避出来ます。

1)Office 2010 KMS Host License Packをダウンロードする。

2)KeyManagementServiceHost.exeを解凍し、"Unsupported operating system"メッセージを無視する。

3)%programfiles%\MSECache\OfficeKMSフォルダを開く(64-bitのOSの場合、%programfiles(x86)%)。

4)kms_host.vbsをkms_host.oldにリネームする

5)Office Deployment Support TeamのSkyDrive(http://sdrv.ms/RiZ8Q9)からkms_host.zipファイルをダウンロードする。(自分のLive ID、Microsoft IDが必要)

6)ダウンロードしたkms_host.zipを解凍し、kms_host.vbsファイルを%programfiles%\MSECache\OfficeKMSフォルダーにコピーする。

7)cmdを起動し、%programfiles%\MSECache\OfficeKMSにナビゲートする。以下のコマンドを実行

cscript kms_host.vbs

8)KMSホストでインタネット接続があれば、「Yes」をクリックし、オンラインでOffice KMS ホストプロダクトキーをActivateする。でなければ、「No」→「Enter」をクリックし、Command Windowを閉じる

9)最後に以下のコマンドを実行し、正しくインストールされていることを確認する

cscript slmgr.vbs /dlv bfe7a195-4f8f-4f0b-a622-cf13c7d16864

 

参考:

How to install the Office 2010 KMS Host License Pack on Windows 8 or Windows Server 2012

2013年6月26日水曜日

Exchange 2010 トランスポートルールで特定のユーザーが特定の外部メールドメインにしか送信できないように構成する

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


Exchange 2010のトランスポートルールを使って特定のユーザーから外部への送信を制御することができます。

今回以下の条件を満たしたトランスポートポートルールを作成してみます。

・特定のユーザーから組織内部への送信はできる。

・特定のユーザー(Ex10user01@contoso.com)から特定の外部メールドメイン(@Gmail.com、@Hotmail.com)にしか送信できない。

・NDRが返ってくる

1)Exchange 管理コンソールを開き、「組織の構成」→「ハブトランスポート」→「トランスポートルール」をクリックします。「操作」ペインで「トランスポート ルールの新規作成」をクリックします。2013-06-26_16h32_27

2)適当な名前を入れて、「次へ」をクリックします。
2013-06-26_16h33_36

3)条件画面で「差出人がユーザーの場合」をチェックし、「ユーザー」を選択します。
2013-06-26_16h42_16

4)条件画面で「メッセージを組織の内部または外部、あるいはパートナーのユーザーに送信する場合」をチェックし、「組織外」を選択します。
2013-06-26_16h42_45

5)「次へ」をクリックします。
2013-06-26_16h42_55

6)処理画面で「send rejection message to sender with enhanced status code」をチェックし、「rejection message」に"You are not allowed to send mail to outside"のような分かりやすいメッセージを入力します。
2013-06-26_16h44_11

7)処理画面で「Enhanced status code」をチェックし、拡張状態コードを入力します。終わったら「次へ」をクリックします。
image

8)例外画面で「受信者のアドレスがテキストパターンと一致する場合を除く」をチェクし、「テキストパターン」を設定します。テキストパターンの自体は正規表現です。
@gmail.com$ → "@gmail.com”で終わる文字列
image

9)「次へ」をクリックし、「新規作成」をクリックします。
2013-06-26_16h45_37
2013-06-26_16h45_51

10)トランスポートルールの作成ができたら、Ex10user01でOWAにログオンし、メールを送信してみます。
宛先はGmail メールアドレス、Hotmailメールアドレス、許可されない外部メールアドレス、内部メールアドレス
image

11)送信許可された内部、Gmail、Hotmailにメールは送信されました。送信制限された外部メールアドレスへの送信はできなく、NDRが返って来ました。設定したRejection MessageもNDRに表示されています。
image

image

 

特定の外部メールドメインへの送信を許可する手順を紹介して来ましたが、特定の外部のユーザーへの送信も同じようなやりかたで制御できます。