はじめに
ここでは、Zowe Explorer、Z Open Editorを使用した接続構成、基本的な設定について解説します。
関連記事
VS Code - z/OS連携 (1)概要
VS Code - z/OS連携 (2)基本構成
VS Code - z/OS連携 (3)基本操作: ソース編集
VS Code - z/OS連携 (4)基本操作: JES操作など
VS Code - z/OS連携 (5)DBBユーザー・ビルド
VS Code - z/OS連携 (6)Advanced Capability
VS Code - z/OS連携 (7)AIエージェントの活用: 概要
VS Code - z/OS連携 (8)AIエージェントの活用: 実践編
全体像
z/OS側コンポーネント構成サンプル
ここでは、z/OS側コンポーネントの構成情報のサンプルを抜粋して記載します。あくまで構成の参考としてご参照ください。
※TAZ(Test Accelarator for Z)に含まれる On-Demand Environment(旧ZD&T)で提供されるStock Imageの環境をベースに一部カスタマイズしたものです。
z/OSのバージョンはV3.2です。
z/OSMF関連
Angel Process起動プロシージャー
//IZUANG1 PROC P='',C=N,OUTCLS='*',
// IZUTIME=NOLIMIT,
// NAME=IZUANG1,
// WLPDIR='/usr/lpp/zosmf/liberty'
//*--------------------------------------------------------------*/
//* Startup procedure for the z/OSMF Websphere Liberty Profile */
//* Angel process. */
//*--------------------------------------------------------------*/
//*
//STEP1 EXEC PGM=BPXBATA2,REGION=0M,
// TIME=&IZUTIME.,
// PARM='PGM &WLPDIR./lib/native/zos/s390x/bbgzangl COLD=&C NAME=&NAME
// &P'
//STDOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
RACF STARTEDクラス: IZUANG1.*
RLIST STARTED IZUANG1.* STDATA
CLASS NAME
----- ----
STARTED IZUANG1.* (G)
LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING
----- -------- ---------------- ----------- -------
00 IBMUSER NONE NONE NO
INSTALLATION DATA
-----------------
NONE
APPLICATION DATA
----------------
NONE
AUDITING
--------
FAILURES(READ)
NOTIFY
------
NO USER TO BE NOTIFIED
STDATA INFORMATION
------------------
USER= IZUSVR
GROUP= IZUADMIN
TRUSTED= NO
PRIVILEGED= NO
TRACE= YES
z/OSMFサーバー起動プロシージャー
//IZUSVR1 PROC PARMS='zosmfServer', /* Server parms */
// ROOT='/usr/lpp/zosmf', /* z/OSMF installation root */
// WLPDIR='/usr/lpp/zosmf/liberty', /* Liberty directory */
// OUTCLS='*', /* SYSOUT class */
// USERDIR='/global/zosmf', /* Configuration directory */
// TRACE='N', /* Trace option */
// KCINDEX='Y', /* KC index rebuild flag */
// IZUPRM='00', /* Parmlib suffixes or PREV */
// SERVER='AUTOSTART', /* AUTOSTART server */
// Z='0', /* Reserved for IBM */
// IZUMEM=4G /* Server memlimit */
//*
//*--------------------------------------------------------------*/
//* z/OSMF AUTOSTART Websphere Liberty Profile server startup */
//* procedure */
//*--------------------------------------------------------------*/
//*------------------------------------------------------------------
//* Parse z/OSMF PARMLIB member
//*------------------------------------------------------------------
//ZPARM EXEC PGM=IZUPARMS,REGION=0M,
// PARM='/IZUPRM=&IZUPRM,TRACE=&TRACE,USERDIR=&USERDIR,SERVER=&SERVER,Z
// =&Z'
//*
//DFLTCFG DD PATH='&ROOT./defaults/configuration.defaults'
//*
//STDOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//CEEDUMP DD SYSOUT=&OUTCLS
//*
//*------------------------------------------------------------------
//* Configure z/OSMF server
//*------------------------------------------------------------------
//CONFZMF EXEC PGM=BPXBATCH,REGION=0M,COND=(0,LT),
// PARM='SH &ROOT./bin/izuconfig.sh &ROOT &USERDIR &TRACE &KCINDEX'
//*
//SYSPRINT DD SYSOUT=&OUTCLS
//SYSOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//STDOUT DD SYSOUT=&OUTCLS
//*
//*------------------------------------------------------------------
//* Start the Websphere Liberty Profile server
//*
//* WLPUDIR - PATH DD that points to the Liberty Profile's "user"
//* directory. If the DD is not allocated, the user
//* directory location defaults to the wlp/usr directory
//* in the install tree.
//* STDOUT - Destination for stdout (System.out)
//* STDERR - Destination for stderr (System.err)
//* STDENV - Initial Unix environment - read by the system. The
//* installation default and server specific server
//* environment files will be merged into this environment
//* before the JVM is launched.
//*------------------------------------------------------------------
//ZOSMF EXEC PGM=BPXBATSL,REGION=0M,COND=(0,LT),
// MEMLIMIT=&IZUMEM.,TIME=NOLIMIT,
// PARM='PGM &WLPDIR./lib/native/zos/s390x/bbgzsrv --clean &PARMS'
//*
//WLPUDIR DD PATH='&USERDIR./configuration'
//*
//STDOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//*STDOUT DD PATH='&ROOT/izusvr1.stdout',
//* PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//* PATHMODE=SIRWXU
//*STDERR DD PATH='&ROOT/izusvr1.stderr',
//* PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//* PATHMODE=SIRWXU
RACF STARTEDクラス: IZUSVR1.*
RLIST STARTED IZUSVR1.* STDATA
CLASS NAME
----- ----
STARTED IZUSVR1.* (G)
LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING
----- -------- ---------------- ----------- -------
00 IBMUSER NONE NONE NO
INSTALLATION DATA
-----------------
NONE
APPLICATION DATA
----------------
NONE
AUDITING
--------
FAILURES(READ)
NOTIFY
------
NO USER TO BE NOTIFIED
STDATA INFORMATION
------------------
USER= IZUSVR
GROUP= IZUADMIN
TRUSTED= NO
PRIVILEGED= NO
TRACE= YES
IZUPRMxx
参考: IZUPRMxx reference information
HOSTNAME('*')
HTTP_SSL_PORT(10443)
INCIDENT_LOG UNIT('SYSALLDA')
JAVA_HOME('/usr/lpp/java/java21/current_64/')
KEYRING_NAME('ZOSMF_RING')
LOGGING('*=warning:com.ibm.zoszmf.*=info:com.ibm.zoszmf.environment.ui=
finer')
RESTAPI_FILE ACCT(IZUACCT) REGION(65536) PROC(IZUFPROC)
COMMON_TSO ACCT(IZUACCT) REGION(50000) PROC(IZUFPROC)
SAF_PREFIX('IZUDFLT')
SEC_GROUPS USER(IZUUSER),ADMIN(IZUADMIN),SECADMIN(IZUSECAD)
SESSION_EXPIRE(495)
TEMP_DIR('/tmp')
UNAUTH_USER(IZUGUEST)
SERVER_PROC('IZUSVR1')
ANGEL_PROC('IZUANG1')
AUTOSTART('CONNECT')
AUTOSTART_GROUP('NONE')
USER_DIR('/global/zosmf')
CLOUD_SEC_ADMIN('IBMUSER')
WLM_CLASSES DEFAULT(IZUGHTTP)
LONG_WORK(IZUGWORK)
/* Uncomment PLUGINS statement and the names of the plugins you
wish to use below: */
/* PLUGINS( CAPACITY_PROV,
COMMSERVER_CFG,
INCIDENT_LOG,
ISPF,
RESOURCE_MON,
SOFTWARE_MGMT,
SYSPLEX_MGMT,
WORKLOAD_MGMT,
ZERT_ANALYZER) */
PLUGINS(COMMSERVER_CFG,
ISPF,
SOFTWARE_MGMT,
RESOURCE_MON,
WORKLOAD_MGMT)
F IZUSVR1,DISPLAY IZU
参考: Displaying the z/OSMF server settings
VS01 2026110 13:13:53.94 -f IZUSVR1,DISPLAY IZU
VS01 2026110 13:13:54.04 STC00353 +CWWKB0004I: z/OSMF PARMLIBs DISPLAY
IZUG200I The home page of z/OSMF server in SYSTEM(VS01)
https://STD1.example.com:10443/zosmf
IZUG041I The server started at 04/03/2026 20:23:42
and has been running for 16 day(s) 16 hour(s) 50 minute(s) 12 secon
d(s)
Current z/OSMF settings Source
HOSTNAME(STD1.example.com) IZUPRM00
VS01 2026110 13:13:54.05 STC00353 +CWWKB0061I CONTINUATION 1 FOR MESSAGE IDENTIFIER 98234
HTTP_SSL_PORT(10443) IZUPRM00
LOGGING('*=warning:com.ibm.zoszmf.*=info:com.ibm.zoszm
f.environment.ui=finer') IZUPRM00
UNAUTH_USER(IZUGUEST) IZUPRM00
SEC_GROUPS
ADMIN(IZUADMIN) IZUPRM00
USER(IZUUSER) IZUPRM00
SECADMIN(IZUSECAD) IZUPRM00
SAF_PREFIX(IZUDFLT) IZUPRM00
VS01 2026110 13:13:54.07 STC00353 +CWWKB0061I CONTINUATION 2 FOR MESSAGE IDENTIFIER 98234
CLOUD_SAF_PREFIX(IYU) DEFAULT
KEYRING_NAME(ZOSMF_RING) IZUPRM00
SESSION_EXPIRE(495) IZUPRM00
WLM_CLASSES
LONG_WORK(IZUGWORK) IZUPRM00
DEFAULT(IZUGHTTP) IZUPRM00
JAVA_HOME(/usr/lpp/java/java21/current_64/) IZUPRM00
TEMP_DIR(/tmp) IZUPRM00
INCIDENT_LOG UNIT(SYSALLDA) IZUPRM00
VS01 2026110 13:13:54.07 STC00353 +CWWKB0061I CONTINUATION 3 FOR MESSAGE IDENTIFIER 98234
RESTAPI_FILE
ACCT(IZUACCT) IZUPRM00
PROC(IZUFPROC) IZUPRM00
REGION(65536) IZUPRM00
COMMON_TSO
ACCT(IZUACCT) IZUPRM00
PROC(IZUFPROC) IZUPRM00
REGION(50000) IZUPRM00
AUTOSTART_GROUP(NONE) IZUPRM00
VS01 2026110 13:13:54.07 STC00353 +CWWKB0061I CONTINUATION 4 FOR MESSAGE IDENTIFIER 98234
AUTOSTART(CONNECT) IZUPRM00
SERVER_PROC(IZUSVR1) IZUPRM00
ANGEL_PROC(IZUANG1) IZUPRM00
USER_DIR(/global/zosmf) IZUPRM00
CSRF_SWITCH(ON) DEFAULT
CLOUD_SEC_ADMIN(IBMUSER) IZUPRM00
Status of z/OSMF plugins
VS01 2026110 13:13:54.09 STC00353 +CWWKB0061I CONTINUATION 5 FOR MESSAGE IDENTIFIER 98234
Configuration Assistant(STARTED) IZUPRM00
Capacity Provisioning(UNSPECIFIED) DEFAULT
Workload Management(STARTED) IZUPRM00
Resource Monitoring(STARTED) IZUPRM00
Incident Log(UNSPECIFIED) DEFAULT
Software Management(STARTED) IZUPRM00
WebISPF(STARTED) IZUPRM00
ZERT(UNSPECIFIED) DEFAULT
Sysplex Management(UNSPECIFIED) DEFAULT
VS01 2026110 13:13:54.10 STC00353 +CWWKB0005I: COMMAND RESPONSES COMPLETED SUCCESSFULLY FROM display
izu|setizu Command Handler.
VS01 2026110 13:13:54.12 STC00353 +CWWKB0002I: MODIFY COMMAND DISPLAY IZU COMPLETED SUCCESSFULLY.
/global/zosmf/configuration/local_override.cfg
JVM_OPTIONS="-Dcom.ibm.ws.classloading.tcclLockWaitTimeMillis=300000\n-Xshareclasses:cacheDir=/javasc/izusvr1,name=izusvr1cache\n-Xscmx150M\n-Xquickstart\n-Xms256M\n-Xmx1024M\n-Xlp:objectheap:pagesize=1m,warn,pageable\n-Xlp:codecache:pagesize=1m,pageable\n-Xscmaxaot150M"
CEA(Common Event Adapter)
参考: Ensure that common event adapter (CEA) is configured and active
SNAPSHOT(N)
HLQLONG(CEA)
DUMPCAPTURETIME
(
SLIP(OPERLOG(00:30:00) LOGREC(01:00:00)
LOGRECSUMMARY(04:00:00))
DUMP(OPERLOG(00:30:00) LOGREC(01:00:00)
LOGRECSUMMARY(04:00:00))
ABEND(OPERLOG(00:30:00) LOGREC(01:00:00)
LOGRECSUMMARY(04:00:00))
)
TSOASMGR
(
MAXSESSIONS(50)
MAXSESSPERUSER(10)
RECONSESSIONS(0)
RECONTIME(00:00:00)
)
CIM(Common Information Model) Server
参考: Quick guide: CIM server setup and verification
//CFZCIM PROC
//********************************************************************
//* STEP 1 - Start cimserver *
//********************************************************************/
//STEP1 EXEC PGM=BPXBATCH,TIME=NOLIMIT,REGION=0M,
// PARM='PGM /usr/lpp/wbem/bin/cimserver daemon=false'
//STDENV DD PATH='/etc/wbem/cimserver.env'
//STDOUT DD PATH='/var/wbem/logs/cimserver.out',
// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=(SIRUSR,SIWUSR,SIRGRP)
//STDERR DD PATH='/var/wbem/logs/cimserver.err',
// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=(SIRUSR,SIWUSR,SIRGRP)
//CEEDUMP DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSMDUMP DD SYSOUT=*
//********************************************************************
//* STEP 2 - Copy stdout back to joblog *
//********************************************************************/
//STEP2 EXEC PGM=BPXBATCH,
// PARM='PGM /bin/cat /var/wbem/logs/cimserver.out',
// COND=EVEN
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//********************************************************************
//* STEP 3 - Copy stderr back to joblog *
//********************************************************************/
//STEP3 EXEC PGM=BPXBATCH,
// PARM='PGM /bin/cat /var/wbem/logs/cimserver.err',
// COND=EVEN
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
PEGASUS_HOME=/usr/lpp/wbem
LIBPATH=/usr/lpp/wbem/lib:/usr/lpp/wbem/provider:/usr/lib
_CEE_RUNOPTS=FILETAG(AUTOCVT,AUTOTAG) STACK(32K,32K,ANYWHERE,KEEP,96K,32K) THREADSTACK(ON,128K,64K,ANYWHERE,KEEP,96K,32K) HEAP(32M,8M,ANYWHERE,KEEP,8K,4K) ANYHEAP(7M,1M,ANYWHERE,FREE) HEAPP(ALIGN,8,1,16,3,32,6,56,8,80,5,248,5,2064,13,4104,27,8208,4,16392,1,32784,2,65536,10) TERMTHDACT(UADUMP) DYN(*USERID,DYNAMIC,TDUMP)
_BPX_SHAREAS=NO
_BPXK_AUTOCVT=ON
_TAG_REDIR_ERR=TXT
_TAG_REDIR_IN=TXT
_TAG_REDIR_OUT=TXT
_BPXK_GPSENT_SECURITY=THREAD
#OSBASE_TRACE=0
#OSBASE_TRACE_FILE=/tmp/wbemosbase.trc
#RMF_CIM_HOST=127.0.0.1
#RMF_CIM_PORT=8803
#RMF_CIM_TRACE=0
#RMF_CIM_TRACE_FILE=/tmp/wbemosmonitoring.trc
RMF_CIM_PROVIDER=DISABLE
RSE関連
JMON
JMON起動プロシージャー
//*********************************************************************
//*
//* JES JOB MONITOR
//*
//JMON PROC PRM=, * PRM='-TV' TO START TRACING
// LEPRM='RPTOPTS(ON)',
// HLQ=FEK,
// CFG=FEK.#CUST.PARMLIB(FEJJCNFG)
//*
//JMON EXEC PGM=FEJJMON,REGION=0M,TIME=NOLIMIT,
// PARM=('&LEPRM,ENVAR("_CEE_ENVFILE_S=DD:ENVVARS")/&PRM')
//STEPLIB DD DISP=SHR,DSN=&HLQ..SFEKAUTH
//ENVVARS DD DISP=SHR,DSN=&CFG
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
// PEND
//*
JMON構成ファイル
参考: FEJJCNFG, the JES Job Monitor configuration file
#
# JES JOB MONITOR CONFIGURATION FILE
#
# (1) REQUIRED DEFINITIONS
#
SERV_PORT=8115
TZ=EST5EDT
#
# (2) OPTIONAL DEFINITIONS
#
#APPLID=FEKAPPL
#AUTHMETHOD=SAF
#CODEPAGE=UTF-8
#CONCHAR=$
#CONSOLE_INTERVAL=100
#CONSOLE_NAME=JMON
#DISPLAY_ACTIVE=ON
#DISPLAY_SYSIN=OFF
#ENF70_MONITOR_INTERVAL=5
#GEN_CONSOLE_NAME=OFF
#HOST_CODEPAGE=IBM-1047
#LIMIT_COMMANDS=USERID
#LIMIT_CONSOLE=LIMITED
#LIMIT_VIEW=NOLIMIT
#LISTEN_QUEUE_LENGTH=5
#LOOPBACK_ONLY=ON
#MAX_DATASETS=32
#MAX_THREADS=200
#PASS_PHRASE=OFF
#TIMEOUT=3600
#TIMEOUT_INTERVAL=1200
#TRACE_STORAGE=OFF
#SAF_CLASS=FACILITY
#SEARCHALL=OFF
#SUBMIT_TIMEOUT=30
#SUBMITMETHOD=TSO
#TSO_TEMPLATE=FEK.#CUST.CNTL(FEJTSO)
RSED
RSED起動プロシージャー
//*********************************************************************
//*
//* RSE DAEMON
//*
//RSED PROC IVP=, * 'IVP' to do an IVP test
// PORT=,
// CNFG='/etc/zexpl',
// HOME='/usr/lpp/IBM/zexpl'
//*
//RSED EXEC PGM=BPXBATSL,REGION=0M,TIME=NOLIMIT,
// PARM='PGM &HOME./bin/rsed.sh &IVP -C&CNFG -P&PORT'
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
// PEND
//*
RSE構成ファイル
参考: rse.env, the RSE configuration file
# Specify the RSE Daemon and JES Job Monitor ports
#-------------------------------------------------------------
_RSE_RSED_PORT=8137
_RSE_JMON_PORT=8115
# Specify the directory where Java is installed
#-------------------------------------------------------------
JAVA_HOME=/usr/lpp/java/java21/current_64/
# Specify the directories where RSE plugins are installed
#-------------------------------------------------------------
RSE_PLUGIN_PATH=/usr/lpp/IBM/zee:/usr/lpp/IBM/debug/rse
# Specify Java options to start RSE server
#-------------------------------------------------------------
## load balancing
_RSE_JAVAOPTS="$_RSE_JAVAOPTS -Xms256m -Xmx512m -Xquickstart"
## logs
_RSE_JAVAOPTS="$_RSE_JAVAOPTS -Dkeep.last.log=true"
## system
_RSE_JAVAOPTS="$_RSE_JAVAOPTS -DDISABLE_MIGRATE_HRECALL_HDELETE=true"
# Specify the port range for RSE client connections
#-------------------------------------------------------------
_RSE_PORTRANGE=8138-8139
# Specify System SSL variables to limit protocol/cipher selection
#-------------------------------------------------------------
GSK_V3_CIPHER_SPECS_EXPANDED=130113021303003C003D003E00680069006A
#=============================================================
# Additional environment variables
#=============================================================
_RSE_JAVAOPTS="$_RSE_JAVAOPTS -Xms256m -Xmx512m -Xquickstart -Xscmx30m"
_RSE_JAVAOPTS="$_RSE_JAVAOPTS -Xshareclasses:nonFatal,cacheDirPerm=0777,cacheDir=/javasc/rsed,name=rsedcache"
_RSE_JAVAOPTS="$_RSE_JAVAOPTS -Xlp:objectheap:pagesize=1m,warn,pageable -Xlp:codecache:pagesize=1m,pageable"
ISPF Gateway構成ファイル
※TSOコマンド実行に必要
参考: ISPF.conf, the Legacy ISPF Gateway configuration file
*
* ISPF.conf - "Legacy ISPF Gateway" configuration file
*
* Note: This is a copy of ISPF's ISP.SISPSAMP(ISPZISPC)
* with z/OS Explorer customizations
*
* REQUIRED:
* Below is the minimum requirements for ISPF allocation.
* Change the default ISPF dataset names below to match your host site.
* Add additional dsn concatenations on same line and separate by comma.
* Order of datasets listed is search order in concatenation.
ispllib=ISP.SISPLOAD
ispmlib=ISP.SISPMENU
isptlib=ISP.SISPTENU
ispplib=ISP.SISPPENU
ispslib=ISP.SISPSLIB
sysproc=ISP.SISPCLIB,FEK.SFEKPROC
* OPTIONAL:
* Include below your own additional user exec for data set allocations.
* A sample exec is found in ISPF's samplib, ISP.SISPSAMP(ISPZISP2).
* If required, remove the * below and provide the absolute reference to
* your exec. When using allocjob, Be careful not to undo allocations
* done earlier in ISPF.conf.
*allocjob = ISP.SISPSAMP(ISPZISP2)
* OPTIONAL:
* When using re-usable ISPF sessions then the following timeout
* parameter will determine the time a users ISPF session will remain
* idle between service requests before shutting itself down.
* At the next request a new session will be established automatically.
* If required, remove the * below and specify, in seconds, the default
* time for all sessions. If not set, the default idle time is 15 min. .
*ISPF_timeout = 900
--- 以下、IDz EE 用構成 (要ライセンス) ---
z/OS Explorer Extensions構成ファイル
※Z Open Editor - Advanced Capabilityの自動Activationに必要
参考: zee.env, the environment configuration file
#
# z/OS Explorer Extensions
# zee.env - environment variables
#
#=============================================================
# optional definitions, defaults provided if not specified
#=============================================================
# HLQ where zExplExt FMID HHOPxxx is installed (default read from ELAXF)
#-------------------------------------------------------------
FEL_HLQ=${ELAXF_FEL:-FEL}
IFAPRDxx
※Z Open Editor - Advanced Capabilityの自動Activationに必要
参考: Product enablement in IFAPRDxx
...
PRODUCT OWNER('IBM CORP')
NAME('IBM IDz EE')
ID(5755-AB5)
VERSION(*) RELEASE(*) MOD(*)
FEATURENAME(*)
STATE(ENABLED)
...
RSE API
RSE API起動プロシージャー
//*********************************************************************
//*
//* RSE API
//*
//RSEAPI PROC HOME='/usr/lpp/IBM/rseapi',
// APICFG='/etc/zexpl',
// RSECFG='',
// SRVNUM='1',
// SECURE='true'
//*
// EXPORT SYMLIST=*
// SET QUOTE=''''
// SET HOME="E.&HOME."E.
// SET RSECFG="E.&RSECFG."E.
// SET APICFG="E.&APICFG."E.
// SET SRVNUM=&SRVNUM.
// SET SECURE="E.&SECURE."E.
//*
//RSEAPI EXEC PGM=BPXBATSL,REGION=0M,TIME=NOLIMIT,
// PARM='PGM /bin/sh &HOME./tomcat.base/start.sh'
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDENV DD *,SYMBOLS=JCLONLY
_BPXK_AUTOCVT=ON
CATALINA_RUN=run
RSEAPI_CFG=&APICFG
RSE_CFG=&RSECFG
SERVER_NUM=&SRVNUM
SECURE_SERVER=&SECURE
// PEND
//*
RACF STARTEDクラス: RSEAPI.*
RLIST STARTED RSEAPI.* STDATA
CLASS NAME
----- ----
STARTED RSEAPI.* (G)
LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING
----- -------- ---------------- ----------- -------
00 IBMUSER NONE NONE NO
INSTALLATION DATA
-----------------
NONE
APPLICATION DATA
----------------
NONE
AUDITING
--------
FAILURES(READ)
NOTIFY
------
NO USER TO BE NOTIFIED
STDATA INFORMATION
------------------
USER= STCRSE
GROUP= SYS1
TRUSTED= NO
PRIVILEGED= NO
TRACE= NO
RSE API 構成ファイル
参考: rseapi.env, the RSE API configuration file
#
# rseapi.env - RSE API environment variables
#
#=============================================================
# optional definitions, defaults provided if not specified
#=============================================================
# Directory where Java is installed (default set in rse.env)
#-------------------------------------------------------------
JAVA_HOME=/usr/lpp/java/java21/current_64/
# RSE API server and JES Job Monitor ports
#-------------------------------------------------------------
RSEAPI_PORT_HTTP_1="8195"
RSEAPI_PORT_SHUTDOWN_1="8196"
RSEAPI_JMON_PORT_1="8115"
# Encrypted communication details
#-------------------------------------------------------------
# Use this for a keystore file or a RACF keyring owned by the
# started task user ID
#RSEAPI_KEYRING="RSEDRING"
RSEAPI_KEYRING="RSEDRING2"
# For JCERACFKS keystore
#RSEAPI_KEYSTORE_FILE="safkeyringjce://$(id -un)/$RSEAPI_KEYRING"
#RSEAPI_KEYSTORE_PASS="password"
RSEAPI_KEYSTORE_TYPE="JCERACFKS"
# Options to enable SAF JWT support
# Default to true.
#-------------------------------------------------------------
#RSEAPI_SAF_JWT=true
RSEAPI_SAF_JWT=false
# To enable the Common Properties service, this variable needs to
# set to a shared UNIX directory on the system.
#-------------------------------------------------------------
RSE_COMMON_PROPERTIES=/var/rseapi_common
# Disable data set migration, recall and deletion of migrated data set.
# The default value is false.
#-------------------------------------------------------------
DISABLE_MIGRATE_HRECALL_HDELETE=true
# The host port to use when creating a connection from the server to
# the TN3270 emulator.
# The default is 23
#-------------------------------------------------------------
RCE_PORT=992
# Whether or not to use a secure connection when connecting from the
# server application to the TN3270 emulator.
# The default is false.
#-------------------------------------------------------------
RCE_SECURITY=true
CATALINA_OPTS="$CATALINA_OPTS -Xms256m -Xmx512m -Xquickstart -Xscmx30m"
CATALINA_OPTS="$CATALINA_OPTS -Xshareclasses:nonFatal,cacheDirPerm=0777,cacheDir=/javasc/rseapi,name=rseapicache"
CATALINA_OPTS="$CATALINA_OPTS -Xlp:objectheap:pagesize=1m,warn,pageable -Xlp:codecache:pagesize=1m,pageable"
RSE_COMMON_PROPERTIES=/var/rseapi_common
補足:
Z Open EditorのAdvanced Capabilityに含まれる3270エミュレーター機能(RCE: Remote Connection Emulator)を使用するため、RSEAPI_SAF_JWT=false、RSEAPI_KEYRING="RSEDRING2"とし、当該環境用にKeyRing, サーバー証明書を作成しなおしています。詳細は後続記事で記載予定。
SSH関連
SSHD起動プロシージャー
//SSHD PROC
//SSHD EXEC PGM=BPXBATCH,REGION=0M,TIME=NOLIMIT,
// PARM='PGM /bin/sh -c /etc/ssh/sshd.sh'
//* STDIN AND STDOUT ARE BOTH DEFAULTED TO /dev/null
//STDERR DD PATH='/tmp/sshd.stderr',
// PATHOPTS=(OWRONLY,OCREAT,OAPPEND),PATHMODE=(SIRWXU)
SSHデーモン構成ファイル
参考: sshd_config - OpenSSH daemon configuration file
# /****PROPRIETARY_STATEMENT******************************************/
# /* */
# /* LICENSED MATERIALS - PROPERTY OF IBM */
# /* 5655-M23 COPYRIGHT IBM CORP. 2004, 2018 */
# /* */
# /* STATUS= HOS2240 */
# /* */
# /****END_OF_PROPRIETARY_STATEMENT***********************************/
#PermitRootLogin prohibit-password
# Note: For compatibility with previous versions we still allow this
# Note: Customers should consider disabling root (superuser) logins
PermitRootLogin yes
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
HostbasedAuthentication yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
PermitEmptyPasswords no
UseDNS no
# override default of no subsystems
Subsystem sftp /usr/lib/ssh/sftp-server
Match User IBMUSER
AllowTcpForwarding yes
# Allow specific user IDs
AllowUsers IBMUSER DEV01 USER01 ...
セキュリティー設定についての補足
実行権限やリソースへのアクセス制限については、基本的に使用するTSOユーザー/グループをベースにRACF等のセキュリティー・マネージャー機能で制御する、という考え方は従来と同様です。
それに加えて、使用する接続方式ごとに追加で考慮が必要になる部分があります。
詳細は以下のドキュメントもご参照ください。
参考:
z/OSMF - Security structures for z/OSMF
RSE - Security definitions
VS Codeワークスペース
VS Codeでは"ワークスペース"という考え方があり、ワークスペース単位に独自の設定などを行うことができます。OS上の1つのディレクトリを1ワークスペースとして管理する Single-folderワークスペースと、複数のディレクトリのセットをまとめて1ワークスペースとして管理する Multi-rootワークスペースという使い方があります。
参考:
What is a VS Code "workspace"?
Git管理されているRepositroyを扱う場合、ローカルにクローンした1つのRepositoryを1つのワークスペースとして扱うと制御がしやすいかと思います。そのため、ここでは Single-folderワークスペースの利用をベースとして具体例を見ていきたいと思います。
Single-folderワークスペース利用例
ワークスペースとして使用する適当なフォルダをWindows上に用意しておいて、そのフォルダをVS Codeで開けばOKです。
例えば、ZoweTemp01というフォルダを作成しておき、VS Codeのメニューから[ファイル]-[フォルダーを開く]選択し、ZoweTemp01を選びます。

最初に開く際には以下のポップアップが表示されるので信頼するをクリック。

ヘッダー部分とエクスプローラービューにフォルダー名が表示されていればOK

当該フォルダがワークスペースとして開かれた状態になりました。
※コマンドプロンプトなどから当該フォルダーに移動してcode .を実行しても可
続けてVS Codeの設定変更をしてみます。
メニューから[ファイル]-[ユーザー設定]-[設定]を選択すると、各種設定が行えるViewが開きます。
検索窓の下に"ユーザー", "ワークスペース"というタブがあることからも分かるように、設定をこれらのレベルで使い分けることができます。ワークスペース単位で設定を切り替えたい場合は"ワークスペース"タブで設定を行えばよいということになります。
例えば上の例では、Zowe Explorer関連の設定で、ワークスペースレベルで「Zowe: Logger」というプロパティーの値をINFO → DEBUGに変更してみました。
このようなワークスペースレベルの設定変更情報は、.vscode\settings.jsonファイルが作成されこのファイル内に保持されます。

ユーザーレベルのプロパティー設定は、<ユーザーのホームディレクトリ>\AppData\Roaming\Code\User\setting.jsonファイルに保存されます。
ちなみに、VS CodeのExtensionは、ワークスペース単位で無効化することができます。たくさんExtensionを入れて分かりにくくなってしまった場合、ワークスペース毎に不要なExtensionは無効化することで画面を簡素化するといった制御も可能です。
例: Extensionの「無効にする」の右側のプルダウンメニューにある「無効にする(ワークスペース)」を選択すると、その時点で開いているワークスペース上でのみ当該Extensionが無効化されます。

こんな感じでワークスペースの制御が行われています。
※この辺りはZowe Explorerに関係なく、一般的なVS Codeの話です。
z/OSとの接続構成
z/OS接続構成ファイルの管理
z/OSとの接続構成情報は、グローバル/プロジェクトの2つのレベルで保持できます。
"グローバル"はVS Codeを使用するユーザーの単位で保持され、当該ユーザーで使用する全ての環境で有効となります。これは先の記事で作成した、<ユーザーのホームディレクトリ>\.zowe\zowe.config.jsonファイルに該当します。
"プロジェクト"レベルはVS Codeのワークスペース単位で保持され、ワークスペースの範囲で有効となります。
| 種類 | 構成ファイル | 有効範囲 |
|---|---|---|
| グローバル | <ユーザーのホーム>\.zowe\zowe.config.json |
当該ユーザーの全環境 |
| プロジェクト | <ワークスペースのトップ>\zowe.config.json |
ワークスペース |
ワークスペースをGitで管理する場合、構成情報もGit管理対象に含めることができるので、プロジェクト単位での管理を行っておくと管理がしやすいと思います。
Zowe Explorer view の 「データ・セット」の右側の「+」アイコンをクリック

Create a New Team Configuration FIleをクリック

以下のようにGlobal/Projectの選択肢が表示されます。ここでは「Project」を選択してみます。

すると、当該ワークスペースに紐づけられたフォルダ(今回のケースだとZoweTest01ディレクトリ下)に、zowe.config.jsonファイルが作成されて、z/OSとの接続構成の雛形が作成されます。
接続構成雛形
{
"$schema": "./zowe.schema.json",
"profiles": {
"zosmf": {
"type": "zosmf",
"properties": {
"port": 443
},
"secure": []
},
"tso": {
"type": "tso",
"properties": {
"account": "",
"codePage": "1047",
"logonProcedure": "IZUFPROC"
},
"secure": []
},
"ssh": {
"type": "ssh",
"properties": {
"port": 22
},
"secure": []
},
"rse": {
"type": "rse",
"properties": {
"port": 6800,
"basePath": "rseapi",
"protocol": "https"
},
"secure": []
},
"project_base": {
"type": "base",
"properties": {
"host": "",
"rejectUnauthorized": true
},
"secure": [
"user",
"password"
]
}
},
"defaults": {
"zosmf": "zosmf",
"tso": "tso",
"ssh": "ssh",
"rse": "rse",
"base": "project_base"
},
"autoStore": true
}
このファイルをカスタマイズしてz/OSとの接続定義を行うことができます。
参考:
Creating Zowe Explorer profiles
Managing and using profiles
z/OSMF Profile
z/OSMF profile設定例
{
"$schema": "./zowe.schema.json",
"profiles": {
"odeinst1": {
"properties": {
"host": "odeinst1"
},
"profiles": {
"zosmf": {
"type": "zosmf",
"properties": {
"port": 10443,
"encoding": "IBM-939",
"rejectUnauthorized": false
},
"secure": ["user", "password"]
}
}
}
},
"defaults": {
"zosmf": "odeinst1.zosmf"
},
"autoStore": true
}
上の構成例は、以下のようなz/OS環境がある前提で、このz/OSへの接続設定を行ったものです。以下の接続先の情報を定義し、VS Code上からはホスト名と同じodeinst1という名前で認識するよう定義しています。
- ホスト名: odeinst1
- z/OSMF構成済み(HTTPSのポート番号: 10443)
RSE Profile
RSE profile設定例
{
"$schema": "./zowe.schema.json",
"profiles": {
"odeinst1": {
"properties": {
"host": "odeinst1"
},
"profiles": {
"rse": {
"type": "rse",
"properties": {
"rejectUnauthorized": false,
"port": 8195,
"basePath": "rseapi",
"protocol": "https"
},
"secure": ["user", "password"]
}
}
}
},
"defaults": {
"zosmf": "odeinst1.zosmf"
},
"autoStore": true
}
上の構成例は、以下のようなz/OS環境がある前提で、このz/OSへの接続設定を行ったものです。以下の接続先の情報を定義し、VS Code上からはホスト名と同じodeinst1という名前で認識するよう定義しています。
- ホスト名: odeinst1
- z/OSMF構成済み(HTTPSのポート番号: 8195)
SSH Profile
SSH profile設定例
...
"profiles": {
"odeinst1": {
"properties": {
"host": "odeinst1",
"rejectUnauthorized": false
},
"profiles": {
"zosmf": {
"type": "zosmf",
"properties": {
"port": 10443,
"encoding": "IBM-1399"
},
"secure": ["user", "password"]
},
"ssh": {
"type": "ssh",
"properties": {
"port": 2022,
"user": "DEV01",
"privateKey": "C:\\Users\\TomohiroTaguchi\\.ssh\\eeZdev_ISECloud\\id_rsa_DEV01"
}
},
...
基本的にSSHプロファイルを単体で使うことはないと思いますので、z/OSMFプロファイルと合わせて同じホスト名に対してSSHプロファイルを追加する例を示しています。
DEV01ユーザーで鍵認証をする場合の設定例です。
事前にキーペアを作成しておき、Public KeyはUSS上のDEV01ユーザーのホームディレクトリ以下に適切にセットアップされている前提で、プロパティとしてはユーザーIDとPrivate Keyを指定しています。
接続確認例
上の構成を行うと、ZOWE EXPLORER view のデータ・セットの欄に 接続先としてodeinst1.zosmfというエントリーが追加されます。
接続確認のためにデータセットをVS Codeから参照してみます。
odeinst1.zosmfの横の虫メガネアイコン(データセットの検索)をクリックします。

最初にアクセスする際にはユーザーID/パスワードの入力が求められますのでガイドに従って入力します。(z/OSMF使用権原のあるユーザー/パスワードを指定)

参照したいデータセットのキーワードを入力します。ここでは「DEV01.*」を指定します。

適当なメンバー(COBOLソース)を選択してみます。VS Codeのエディターで開くことが確認できました。

同じようなイメージで、USSのファイルやJOB関連の操作も行えます。
※ここでの接続確認は、上の構成ファイルで定義した内容のうちz/OSMFに関するものです。
構成ファイル補足
ファイルの構造について
デフォルトで作成されるプロファイルは、複数の接続先を想定していないような感じの例になっています。
環境によっては、複数環境に対してそれぞれプロファイルを指定して接続したい場合もありますし、1つの環境に対して複数プロトコルのプロファイルを定義する場合がありますので、接続先ホスト名に対して各プロトコルごとの階層を作って接続構成を行うような定義の仕方が分かりやすいと思います。例えば、以下のような定義の仕方が可能です。
1つの接続先に対して複数プロトコルのプロファイルを指定する例
{
"$schema": "./zowe.schema.json",
"profiles": {
"odeinst1": {
"properties": {
"host": "odeinst1",
"rejectUnauthorized": false
},
"profiles": {
"zosmf": {
"type": "zosmf",
"properties": {
"port": 10443,
"encoding": "IBM-939"
},
"secure": ["user", "password"]
},
"ssh": {
"type": "ssh",
"properties": {
"port": 2022,
"user": "TAG",
"privateKey": "C:\\Users\\TomohiroTaguchi\\.ssh\\eeZdev_ISECloud\\id_rsa_odeinst1_root"
}
},
"rse": {
"type": "rse",
"properties": {
"port": 8195,
"basePath": "rseapi",
"protocol": "https"
},
"secure": ["user", "password"]
},
"tso": {
"type": "tso",
"properties": {
"account": "ACCT001"
}
}
}
}
},
"defaults": {
"zosmf": "odeinst1.zosmf"
},
"autoStore": true
}
サーバー証明書のチェックについて
z/OSMFと接続する際のプロトコルとしては通常https、すなわちTLS通信が行われます。この時、デフォルトではz/OSMF側から送られてくるサーバー証明書のチェックが行われます。具体的には、以下のようなチェックが行われます。
- そのサーバー証明書がそのサーバー証明書が信頼された認証局により署名されているか
- アクセスしているホスト名のドメインがサーバー証明書に記載されているドメイン名(Subject Alternate Name)と一致しているか
つまり、事前に、送られてくるサーバー証明を発行した認証局のCA証明書を"信頼できるルート証明機関"として登録しておき、かつ、サーバー証明書のSANには正しいドメイン名を設定しておく必要があります。証明書の管理はそれなりに負荷がかかりますので、一時的なテスト環境の場合や、セキュリティリスクが低いと判断されるある程度閉じた環境(中間者攻撃等のリスク等が少ないと判断されるような環境)では、このサーバー証明書のチェックをバイパスするということも可能です。
それを制御するのが rejectUnauthorized プロパティです。デフォルトでは rejectUnauthorized: trueとなっておりサーバー証明書のチェックが行われてチェックが通らない場合は接続を破棄します。チェックをバイパスしたい場合は rejectUnauthorized: false を指定する必要があります。
これは、ブラウザからあるサイトにhttpsでアクセスしたときに一旦証明書不正の警告がでたけれども、警告を無視してそのままアクセスする、という操作をするのと同じイメージです。
ユーザーID/パスワード情報の管理
z/OSMF経由でz/OSに接続して各種操作を行う場合、基本的にはTSOユーザーを作成しておき、ユーザーID/パスワードでログインして使用するということになります。
接続時に毎回ユーザーID/パスワードを入力する運用が面倒な場合、それを保持しておくことができます。それが autoStore: true で制御できます。これはユーザーID/パスワードに限りませんが、何か操作をしようとしたときに不足している情報があると、その入力を促すプロンプトが画面上に表示されます。それを自動的に保持するかどうかを制御するものです。ただ、デフォルトだとこの情報は zowe.config.json ファイルに平文で保存されてしまいます。パスワード情報をテキストファイルに平文で保持するのはセキュリティ上あまり望ましくありません。
参考:
Storing properties automatically
Configuring Zowe CLI where secure credential storage is not available
平文で保持してほしくない情報については、secure というプロパティで制御することができ、ここで指定したプロパティの情報についてはセキュアなストレージに情報が保持されることになります。
例えば、secure: ["user", "password"] と指定すると、ユーザーID、パスワードの情報は、WindowsであればOS提供の"資格情報マネージャー"に保持されます。
参考:
Managing credential security
Creating Zowe Explorer profiles - Managing profiles
セキュアなストレージに保持された資格情報(ユーザーID, パスワード)は、Zowe Explorer Viewのプロファイルを右クリック - [プロファイルの管理] - [資格情報の更新] から更新できます。
パスワードがExpireした場合の挙動
TSOユーザーのパスワードは、ある一定期間の有効期限を設けてそれが過ぎた場合更新を行わせる、という運用を行う場合があります。
例えば、PCOMでログインしようとした場合、以下のように新しいパスワードのセットが促されます。

このような状況でz/OSMFもしくはRSEプロファイル経由で接続しようとすると、以下のようなエラーで接続できない状態となります。
これに関しては、例えばz/OSMFについて以下のようなIssueが起票されています。
GitHub Issue #3081: Provide more info in response to authentication errors and allow users to update password on mainframe
上のIssueを見ると、新しいパスワードを設定できるような改善要望が含まれますが、残念ながら Closed as not planned となっているので今のところ実装される可能性は低そうです。
パスワード変更スクリプト
Zowe Explorerではパスワード変更のUIが提供されていないようなので、別途パスワード変更用の仕組みを考えてみます。z/OSMFではバスワード変更用のREST APIが提供されているので、こちらをcurlコマンドで発行するPowerShellスクリプトを作成してみました。
必要であればこのような追加の運用の仕組みを検討するとよいと思います。
参考:
Change the user password or passphrase
PH34912: NEW FUNCTION - z/OSMF enhancements on the desktop UI and changing password
パスワード変更用PowerShellスクリプト
# zosmf-change-password.ps1
# z/OSMF パスワード変更: PUT /zosmf/services/authenticate
# 仕様: Content-Type: application/json, X-CSRF-ZOSMF-HEADER 必須, JSON { userID, oldPwd, newPwd }
# 変更機能は APAR PH34912 のPTFが必要 [1](https://marketplace.visualstudio.com/items?itemName=Zowe.vscode-extension-for-zowe)
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$HostName,
[Parameter(Mandatory=$false)]
[int]$Port = 443,
[Parameter(Mandatory=$false)]
[switch]$InsecureTLS, # 自己署名などで -k 相当を使う場合
[Parameter(Mandatory=$false)]
[string]$ZosmfBasePath = "" # 例: "/zosmf" が必要な環境なら指定(通常は空でOK)
)
function ConvertFrom-SecureStringToPlain([SecureString]$sec) {
$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec)
try { [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr) }
finally { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr) }
}
try {
if (-not (Get-Command curl.exe -ErrorAction SilentlyContinue)) {
throw "curl.exe が見つかりません。Windows 標準の curl が使える環境か確認してください。"
}
Write-Host "=== z/OSMF パスワード変更 (PUT /zosmf/services/authenticate) ===" -ForegroundColor Cyan
Write-Host "Host: $HostName Port: $Port" -ForegroundColor Gray
$userId = Read-Host "User ID"
$oldSec = Read-Host "Current Password/Passphrase" -AsSecureString
$newSec = Read-Host "New Password/Passphrase" -AsSecureString
# 平文へ(送信のため一時的に必要)
$oldPwd = ConvertFrom-SecureStringToPlain $oldSec
$newPwd = ConvertFrom-SecureStringToPlain $newSec
# JSONボディ(userID/oldPwd/newPwd)
$bodyObj = @{
userID = $userId
oldPwd = $oldPwd
newPwd = $newPwd
}
$jsonBody = $bodyObj | ConvertTo-Json -Compress
# JSONボディを一時ファイルに保存(PowerShellの配列展開問題を回避)
# BOMなしのUTF-8で保存(z/OSMFはBOMを解析できない)
$tempFile = Join-Path $env:TEMP "zosmf-change-password-$PID.json"
$utf8NoBom = New-Object System.Text.UTF8Encoding $false
[System.IO.File]::WriteAllText($tempFile, $jsonBody, $utf8NoBom)
# API URL(PUT /zosmf/services/authenticate)
# z/OSMF 認証サービス: PUT /zosmf/services/authenticate [1](https://marketplace.visualstudio.com/items?itemName=Zowe.vscode-extension-for-zowe)
$url = "https://$HostName`:$Port$ZosmfBasePath/zosmf/services/authenticate"
# curl 引数
$curlArgs = @(
"-sS",
"-X", "PUT", $url,
"-u", "$userId`:$oldPwd", # Basic認証(現在の資格情報で認証)
"-H", "Origin: https://$HostName`:$Port", # CSRF対策: Originヘッダー
"-H", "Referer: https://$HostName`:$Port/zosmf/", # CSRF対策: Refererヘッダー
"-H", "Content-Type: application/x-www-form-urlencoded", # IBM Docsのサンプルに従う
"-H", "X-CSRF-ZOSMF-HEADER: ", # 必須、値は任意/空でも可
"-d", "@$tempFile",
"-w", "`nHTTP_STATUS=%{http_code}`n"
)
if ($InsecureTLS) { $curlArgs = @("-k") + $curlArgs }
Write-Host "`nRequesting..." -ForegroundColor Yellow
# 実行(結果取り込み)
$output = & curl.exe @curlArgs 2>&1
$statusLine = ($output | Select-String -Pattern "^HTTP_STATUS=" | Select-Object -Last 1).ToString()
$httpStatus = [int]($statusLine -replace "HTTP_STATUS=", "").Trim()
# レスポンスボディ(HTTP_STATUS 行を除去)
$bodyLines = $output | Where-Object { $_ -notmatch "^HTTP_STATUS=" }
$respBody = ($bodyLines -join "`n").Trim()
Write-Host "`n--- Result ---" -ForegroundColor Cyan
Write-Host "HTTP Status: $httpStatus" -ForegroundColor Gray
if ($httpStatus -eq 200) {
Write-Host "✅ Success: Password/Passphrase was changed." -ForegroundColor Green
if ($respBody) {
Write-Host "Response:" -ForegroundColor Gray
Write-Host $respBody
}
}
else {
Write-Host "❌ Failed." -ForegroundColor Red
if ($respBody) {
Write-Host "Response:" -ForegroundColor Gray
Write-Host $respBody
} else {
Write-Host "No response body." -ForegroundColor Gray
}
# HTTPステータスに応じたヒントメッセージ
Write-Host ""
if ($httpStatus -eq 0) {
# 証明書エラーかどうかを判定
$isCertError = $respBody -match "(certificate|SSL|TLS|schannel|SEC_E_|verify the legitimacy)"
if ($isCertError) {
Write-Host "Hint: SSL/TLS証明書の検証に失敗しました。" -ForegroundColor Yellow
Write-Host " 自己署名証明書または検証できない証明書を使用している場合は、" -ForegroundColor Yellow
Write-Host " -InsecureTLS オプションを追加して実行してください:" -ForegroundColor Yellow
Write-Host " 例: .\zosmf-change-password.ps1 -HostName $HostName -Port $Port -InsecureTLS" -ForegroundColor Cyan
}
else {
Write-Host "Hint: サーバーに接続できませんでした。以下を確認してください:" -ForegroundColor Yellow
Write-Host " - ホスト名が正しいか (現在: $HostName)" -ForegroundColor Yellow
Write-Host " - ポート番号が正しいか (現在: $Port)" -ForegroundColor Yellow
Write-Host " - ネットワーク接続またはファイアウォールの設定" -ForegroundColor Yellow
}
}
elseif ($httpStatus -eq 401) {
Write-Host "Hint: 認証に失敗しました。ユーザーIDまたは現在のパスワードが間違っている可能性があります。" -ForegroundColor Yellow
}
elseif ($httpStatus -eq 403) {
Write-Host "Hint: アクセスが拒否されました。" -ForegroundColor Yellow
Write-Host " リモートサイトからのアクセスが許可されていない可能性があります。" -ForegroundColor Yellow
Write-Host " z/OSMF管理者に連絡して、CORS設定またはリモートアクセス許可の確認を依頼してください。" -ForegroundColor Yellow
}
elseif ($httpStatus -eq 404) {
Write-Host "Hint: APIエンドポイントが見つかりません。z/OSMFのバージョンやベースパスの設定を確認してください。" -ForegroundColor Yellow
}
elseif ($httpStatus -eq 500) {
# HTTP 500の場合、レスポンスボディの内容に応じて適切なヒントを表示
if ($respBody -match "not in JSON format") {
Write-Host "Hint: JSON形式のエラーが発生しました。" -ForegroundColor Yellow
Write-Host " この問題は通常、スクリプト内部で自動的に処理されます。" -ForegroundColor Yellow
Write-Host " それでもエラーが発生する場合は、スクリプトの最新版を使用しているか確認してください。" -ForegroundColor Yellow
}
elseif ($respBody -match "Check whether the user ID and old") {
Write-Host "Hint: パスワード変更に失敗しました。" -ForegroundColor Yellow
Write-Host " ユーザーIDまたは現在のパスワードが間違っている可能性があります。" -ForegroundColor Yellow
Write-Host " または新しいパスワードがパスワードポリシーに従っていない可能性があります。" -ForegroundColor Yellow
}
elseif ($respBody -match "newPwd is invalid") {
Write-Host "Hint: 新しいパスワードが無効です。" -ForegroundColor Yellow
Write-Host " 以下を確認してください:" -ForegroundColor Yellow
Write-Host " - パスワードポリシーに準拠しているか" -ForegroundColor Yellow
Write-Host " - パスワードとパスフレーズを混在させていないか" -ForegroundColor Yellow
Write-Host " - パスワード変更の最小間隔が経過しているか" -ForegroundColor Yellow
}
else {
Write-Host "Hint: 予期しないエラーが発生しました。" -ForegroundColor Yellow
Write-Host " 詳細についてはResponse内容を確認するか、z/OSMF管理者に連絡してください。" -ForegroundColor Yellow
}
}
else {
Write-Host "Hint: 予期しないエラーが発生しました。z/OSMF管理者に連絡してください。" -ForegroundColor Yellow
}
}
} finally {
# 一時ファイルを削除
if (Test-Path $tempFile) {
Remove-Item $tempFile -Force -ErrorAction SilentlyContinue
}
# できる範囲で平文を破棄(完全消去は保証できないが、変数上書きで痕跡を減らす)
$oldPwd = $null
$newPwd = $null
$jsonBody = $null
[GC]::Collect()
}
簡易実行用バッチ
上のPowerShellスクリプトを実行するバッチ
@echo off
setlocal enabledelayedexpansion
cd /d "%~dp0"
REM ========================================
REM 設定: ここを環境に合わせて変更してください
REM ========================================
set HOSTNAME=odeinst1
set PORT=10443
REM ========================================
REM PowerShellスクリプトを実行(実行ポリシーをバイパス)
powershell.exe -ExecutionPolicy Bypass -File ".\zosmf-change-password.ps1" -HostName %HOSTNAME% -Port %PORT% -InsecureTLS
REM エラーコードを確認
if %ERRORLEVEL% neq 0 (
echo.
echo エラーが発生しました。終了コード: %ERRORLEVEL%
pause
exit /b %ERRORLEVEL%
)
echo.
echo 処理が完了しました。
pause








