LoginSignup
0
0

More than 5 years have passed since last update.

PowerShellでArcGIS Server 10.5のインストールを自動化してみた

Last updated at Posted at 2018-05-10

インストーラーの解凍だけはGUI必須だけど他は自動化できた!

自動化した処理

  • ArcGIS Server 10.5のインストール
  • ArcGIS Server 10.5の認証
  • プライマリサイトの作成

インストーラーを解凍する

ArcGIS_Server_Windows_105_ja_155416.exeを実行する.
解凍先を適宜設定する.
「今すぐプログラムを実行」のチェックを外すこと.

インストーラーを実行する

$username = "arcgis"
$password = "pass"
$arcGISServerSetupExe = "E:\ArcGISInstaller\Server\setup.exe"
$arcGISServerSetupArg = "/qn /quiet USER_NAME={0} PASSWORD={1}" -f $username, $password

Start-Process -FilePath $arcGISServerSetupExe -ArgumentList $arcGISServerSetupArg -Verb runas -Wait

ライセンス認証を行う

$prvcPath = "E:\PrvcFiles\ArcGISServerStandard10.5.prvc"
$softwareAuthorizationExe = "C:\Program Files\Common Files\ArcGIS\bin\softwareauthorization.exe"
$softwareAuthorizationArg = "-S -LIF {0}" -f $prvcPath

Start-Process -FilePath $softwareAuthorizationExe -ArgumentList $softwareAuthorizationArg -Verb runas -Wait
ArcGISServerStandard10.5.prvc
// User Information

First Name=Hoge

Last Name=Fuga

Organization=Some Company

Department=System Development

Email=someone@somecompany.co.jp

Address 1=1-1-1 Shinagawa

City=Shinagawa-ku

State/Province=Tokyo

Country=Japan

Zip/Postal Code=111-1111

Phone Number=+81(0)3-1234-5678

// Features and authorization numbers

ArcGIS Server=ECP000000000

プライマリサイトを作成する

$pythonExe = "C:\Python27\ArcGISx6410.5\python.exe"
$createPrimarySiteArg = "-B E:\ArcPy\create_new_site.py"

Start-Process -FilePath $pythonExe -ArgumentList $createPrimarySiteArg -Verb runas -PassThru
create_new_site.py
# coding:utf-8
import httplib
import urllib
import json
import sys
import os
import getpass

def create_new_site(): 
    # プライマリサイトの管理者ユーザー名
    username = "someone"
    # プライマリサイトの管理者パスワード
    password = "pass"
    # ルートサーバー名
    server_name  = "arcgis_server"
    # ルートサーバーのポート番号
    server_port = 6080
    # ルートサーバーディレクトリ
    root_dir_path = r"C:\arcgisserver\directories"
    # 構成ストアディレクトリ
    config_store_dir_path = r"C:\arcgisserver\config-store"

    # 構成ストアの設定
    config_store_connection={"connectionString": config_store_dir_path, "type": "FILESYSTEM"}

    # サーバーディレクトリの設定
    cache_dir_path = os.path.join(root_dir_path, "arcgiscache")
    jobs_dir_path = os.path.join(root_dir_path, "arcgisjobs")
    output_dir_path = os.path.join(root_dir_path, "arcgisoutput")
    system_dir_path = os.path.join(root_dir_path, "arcgissystem")

    # サーバーディレクトリのリストをJSON形式で作成
    cache_dir = dict(name = "arcgiscache",physicalPath = cache_dir_path,directoryType = "CACHE",cleanupMode = "NONE",maxFileAge = 0,description = "Stores tile caches used by map, globe, and image services for rapid performance.", virtualPath = "")    
    jobs_dir = dict(name = "arcgisjobs",physicalPath = jobs_dir_path, directoryType = "JOBS",cleanupMode = "TIME_ELAPSED_SINCE_LAST_MODIFIED",maxFileAge = 360,description = "Stores results and other information from geoprocessing services.", virtualPath = "")
    output_dir = dict(name = "arcgisoutput",physicalPath = output_dir_path,directoryType = "OUTPUT",cleanupMode = "TIME_ELAPSED_SINCE_LAST_MODIFIED",maxFileAge = 10,description = "Stores various information generated by services, such as map images.", virtualPath = "")
    system_dir = dict(name = "arcgissystem",physicalPath = system_dir_path,directoryType = "SYSTEM",cleanupMode = "NONE",maxFileAge = 0,description = "Stores files that are used internally by the GIS server.", virtualPath = "")
    directories_JSON = json.dumps(dict(directories = [cache_dir, jobs_dir, output_dir, system_dir]))      

    # サイト作成APIのURL
    create_new_sute_url = "/arcgis/admin/createNewSite"

    # リクエスト作成/送信
    params = urllib.urlencode({'username': username, 'password': password, 'configStoreConnection': config_store_connection, 'directories':directories_JSON, 'f': 'json'})    
    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
    http_conn = httplib.HTTPConnection(server_name, server_port)
    http_conn.request("POST", create_new_sute_url, params, headers)

    # レスポンス取得
    response = http_conn.getresponse()
    if (response.status != 200):
        http_conn.close()
        print u"プライマリサイト作成中にエラーが発生しました."
        return
    else:
        data = response.read()
        http_conn.close()

        # リクエスト結果確認
        if not assert_json_success(data):          
            print u"プライマリサイト作成中にエラーが発生しました." + str(data)
        else:
            print u"プライマリサイトの作成が完了しました."

        return


def assert_json_success(data):
    obj = json.loads(data)
    if 'status' in obj and obj['status'] == "error":
        return False
    else:
        return True

create_new_site()

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0